解決endnote引起的輸入法bug

endnote絕對是科研神器,但是在mac osx的word環境中卻給我帶來的不小的困擾。因為打開endnote時候,中文輸入法會出現重複輸入英文字符的bug。排查原因,發現如果輸入速度夠快的話就沒有這個bug,稍有停頓就會連同中文字符對應的英文拼音代碼一起輸入。

無奈,求助GOOGLE大帝,原來早就有人反應過這個問題了,是endnote在檢測到文章有更新或者文檔有輸入動作的時候自動重新編排引文造成的,把這個功能關閉就可以解決這個bug。

兩步走,筆者用的是endnote x7,其他版本可能稍有不同:
1、在endnote的Tools-Cite While You Write-CWYW Preferences,General選項卡,將“Enable Instant Formatting on New Word Documents”勾選掉。

2、在Word的Tools-Endnote X7選擇turn Instant Formatting off。

這樣就OK了,只是以後只能手動更新引文的編號與排序了。

本文參照了以下網頁:
http://ie.sogou.com/bbs/archiver/?tid-554786.html

python版shadowsocks的安裝

Debian 7.0 64位環境下,需要有python 2.6或者2.7,用下面的命令查看:

python --version

因為初次使用python,pip之類的包都沒有安裝,先得安裝這些依賴包:

sudo apt-get install libxml2-dev libxslt-dev libevent-dev python-dev python-pip python-m2crypto python-gevent

然後pip安裝shadowsocks:

pip install shadowsocks

建一個shadowsocks所需的config.json文件:

sudo mkdir /etc/shadowsocks
vim /etc/shadowsocks/config.json

config.json的內容如下:

{
    "server":"my_server_ip",
    "server_port":8388,
    "local_port":1080,
    "password":"barfoo!",
    "timeout":600,
    "method":"table"
}

加密方式可以用”bf-cfb”, “aes-256-cfb”, “des-cfb”, “rc4″等。最後就可以運行啦:

ssserver -c /etc/shadowsocks/config.json

後台運行可以使用nohup命令:

nohup ssserver -c /etc/shadowsocks/config.json &

如果無需輸出任何日誌則:

nohup ssserver -c /etc/shadowsocks/config.json >/dev/null 2>&1 &

可以建一個簡單的腳本來方便輸入上面的命令:

vim ss.sh

在腳本中插入以下代碼:

#!/bin/bash
cd /root
nohup ssserver -c /etc/shadowsocks/config.json >/dev/null 2>&1 &

然後更改腳本權限,使之可執行:

chmod 755 ss.sh

最後,直接執行該腳本就可以啦:

./ss.sh

MAC OSX下客戶端可以選擇shadowsocks-gui或者GoAgentx

當然,debian下更簡單的方法是使用@madeye已經編譯好的shadowsocks-libev版本,以debian 7.0 amd64為例:

wget http://travis-ci.s3-website-ap-northeast-1.amazonaws.com/nightly/shadowsocks_1.3.3-1_amd64.deb
dpkg -i shadowsocks_1.3.3-1_amd64.deb

更多安裝包可以在這裡下載,http://travis-ci.s3-website-ap-northeast-1.amazonaws.com/,安裝之後編輯shadowsocks的配置文件並啓動服務:

vim /etc/shadowsocks/config.json
sudo /etc/init.d/shadowsocks restart

本文參考了以下網頁:

[1] @clowwindy. Shadowsocks使用說明. https://github.com/clowwindy/shadowsocks/wiki/Shadowsocks-%E4%BD%BF%E7%94%A8%E8%AF%B4%E6%98%8E

解決Mac OSX下Cisco IPSec VPN自動斷線的問題

轉載自:http://imwuyu.me/talk-about/something-about-vpn.html/

“连接 VPN Cisco IPSec (让系统生成配置文件)

拷贝配置文件到/etc/racoon打开终端执行:

sudo cp /var/run/racoon/xxx.xxx.xxx.xxx.conf /etc/racoon

修改 racoon 配置文件:

sudo vim /etc/racoon/racoon.conf

将最后一行注释掉(目的是不使用系统生成配置):

# include "/var/run/racoon/*.conf" ;

将下面一行添加到文件末尾,**包含分号**(使用定制的配置文件):

include "/etc/racoon/xxx.xxx.xxx.xxx.conf" ;

修改 IPSec 配置文件:

sudo vim /etc/racoon/xxx.xxx.xxx.xxx.conf

取消 dead peer 检测:

dpd_delay 0;

修改请求方式为 claim(**重要**,原来为 obey):

proposal_check claim;

修改请求周期 (所有 proposal 中的值原来是3600 sec):

lifetime time 24 hours;

重新链接 Cisco IPSec (让系统使用修改后的配置文件)

经测试连接5小时以上未断线”

按這個修改後,一開始45分鐘左右還是會提示輸入密碼,後來重啓一下就OK了。

Squid的高度匿名設置

有些網頁禁止使用代理訪問,可以在squid通過header_access進行高度匿名設置,來隱藏使用代理的特徵,代碼如下:

header_access Allow allow all
header_access Authorization allow all
header_access WWW-Authenticate allow all
header_access Proxy-Authorization allow all
header_access Proxy-Authenticate allow all
header_access Content-Encoding allow all
header_access Content-Length allow all
header_access Content-Type allow all
header_access Date allow all
header_access Expires allow all
header_access Host allow all
header_access If-Modified-Since allow all
header_access Last-Modified allow all
header_access Location allow all
header_access Pragma allow all
header_access Accept allow all
header_access Accept-Charset allow all
header_access Accept-Encoding allow all
header_access Accept-Language allow all
header_access Content-Language allow all
header_access Mime-Version allow all
header_access Retry-After allow all
header_access Title allow all
header_access Connection allow all
header_access Proxy-Connection allow all
header_access Cookie allow all
header_access Set-Cookie allow all
header_access User-Agent allow all # 可以註釋掉這個隱匿瀏覽器信息
header_access All deny all

然後在http://kojiki.server.ne.jp/etc/pj235.cgi?en測試一下看看,匿名的級別是不是已經提高到1了。

不過,這只是讓http的header隱匿了proxy信息,ip還是屬於“hosting provider network”,對於一些嚴格的網站還是不能訪問的,這就沒有辦法啦,老老實實去掉代理訪問吧。

補充

俗話說過猶不及,上面的配置實際上是將header開啟了一個白名單模式,只允許指定的頭部信息,這其實是不符合HTML標準的,訪問某些網站反而會被“403 Forbidden”,比如:http://www.mobile01.com/,因此还是对header进行黑名单式的处理比较好,禁止带有proxy特征的信息:

header_access Cache-Control deny all
header_access From deny all
header_access Server deny all
header_access Link deny all
header_access Via deny all
header_access X-Forwarded-For deny all

这样匿名等级依然很高,可以訪問那些no proxy的網站,對於MOBILE01這類網站也能兼顧。

Nginx上設置301和302跳轉

301跳轉(由abc.com跳轉到def.com):

server {
listen 80;
server_name abc.com;
rewrite ^/(.*) http://def.com/$1 permanent;
access_log off;
}

302跳轉(由abc.com跳轉到def.com):

server {
listen 80;
server_name abc.com;
rewrite ^/(.*) http://def.com/$1 redirect;
access_log off;
}

配置Squid的PAM認證

使用PAM模塊作squid的用戶認證主要是為了配置方便,讓ipsec vpn、squid、sshd等服務可以用一個帳號。

首先編譯squid的pam_auth模塊:

cd /usr/src/squid/squid-2.7.STABLE9/helpers/basic_auth/PAM/
make
cp pam_auth /usr/lib/squid/

pam_auth需要以root身份來運行,否則沒有權限來讀取系統的用戶信息,用下面的命令setuid:

chmod a+s /usr/lib/squid/pam_auth

然後,創建一個系統的pam模塊:

vim /etc/pam.d/squid

在該文件中插入以下代碼:

auth required /lib/security/pam_unix.so
account required /lib/security/pam_unix.so

最後,在squid的配置文件中設置一下即可:

auth_param basic program /usr/lib/squid/pam_auth
auth_param basic children 5
auth_param basic realm Hello!# 這裡輸入squid登陸框的歡迎信息
auth_param basic credentialsttl 2 hours # 驗證有效的時間,2小時,可以根據需要設置

acl squid_user proxy_auth REQUIRED
http_access allow squid_user

可以通過以下命令新建一些最小化權限的用戶用於驗證:

useradd -s /bin/false USERNAME
passwd USERNAME

更新1:

Debian從squeeze更新至wheezy後,pam模塊需要更正一下,無需指定pam_unix.so的路徑,更正如下(Ubuntu 12.04也是):

auth required pam_unix.so
account required pam_unix.so

 

Squid編譯過程中關於SSLv2出错的問題

最近需要在Ubuntu 12.04 LST上編譯安裝Squid 2.7,編譯參數中需要使用“–enable-ssl”來打開https_port功能,原本在debian上很順利的過程卻在Ubuntu上一直提示沒有sslv2的庫。

原來debian 6.0中使用的openssl是0.98,而ubuntu 12.04使用的是1.01,在1.01版本的openssl中已經直接禁用了有安全隱患的sslv2,使得squid無法完成編譯。想修改squid的源代碼來禁用sslv2,卻一直沒有成功,無奈,只能曲線救國,直接安裝debain下0.98版的openssl庫。

先刪除ubuntu安裝的1.01版本:

aptitude purge libssl libssl-dev libssl-doc

然後下載debian的deb包:

wget http://ftp.us.debian.org/debian/pool/main/o/openssl/libssl-dev_0.9.8o-4squeeze14_i386.deb
wget http://ftp.us.debian.org/debian/pool/main/o/openssl/libssl0.9.8_0.9.8o-4squeeze14_i386.deb

接著dpkg安裝即可:

dpkg -i libssl0.9.8_0.9.8o-4squeeze13_i386.deb
dpkg -i libssl-dev_0.9.8o-4squeeze13_i386.deb

因為依賴關係,先安裝libssl再安裝libssl-dev

然後編譯就一切順利啦!

當然,別忘了在squid的配置文件中禁用sslv2,畢竟有安全隱患:

options=NO_SSLv2

更新1:

最近更新了Debian 7 64位的系統,amd64位的兩個包的地址有所變更,如下:

wget http://ftp.us.debian.org/debian/pool/main/o/openssl/libssl-dev_0.9.8o-4squeeze14_amd64.deb
wget http://ftp.us.debian.org/debian/pool/main/o/openssl/libssl0.9.8_0.9.8o-4squeeze14_amd64.deb

 

vim的默認配置文件

安裝vim之後總需要為它調整配置文件,其實vim已經準備了一個樣本,如果沒有特殊需求,直接啟用該文件即可,諸如語法高亮、檢索關鍵詞高亮等配置都有了,debian, root環境:

cd /usr/share/vim/vim72
cp vimrc_example.vim ~/.vimrc

以上命令是為某個用戶準備的配置文件,如果需要全局使用同一份配置文件則:

cd /usr/share/vim/vim72
cp vimrc_example.vim ../vimrc

下面是以前常使用的一個配置:

" 高亮代碼
syntax on
" 默認編碼
set ts=4
set enc=utf-8
" 高亮搜索關鍵詞
set hlsearch
" 記憶上次編輯的位置
autocmd BufReadPost *
            \ if line("'\"")>0&&line("'\"")<=line("$") |
            \   exe "normal g'\"" |
            \ endif

安裝Racoon實現Pure IPsec VPN

前段時間參考“VPS上基于Debian搭建和配置Pure IPsec支持iOS/Win7/Android等多平台VPN客户端”一文編譯安裝了Strongswan作pure ipsec vpn供ios使用,但是,一來strongswan穩定性一般,二則不能通過vpnc連接,因此考慮利用racoon來實現pure ipsec vpn。

服務器環境是debian 6.0,ramhost kvm LA機房。

首先安裝rancoon:

sudo aptitude install racoon

安裝完成後配置文件在/etc/racoon目錄,首先編輯racoon的配置文件:

cd /etc/racoon
sudo vim racoon.conf

插入以下代碼:

path pre_shared_key "/etc/racoon/psk.txt";

listen {
}

remote anonymous { 
exchange_mode aggressive, main, base;
mode_cfg on;
proposal_check obey;
nat_traversal on;
generate_policy unique;
ike_frag on; 
passive on;
dpd_delay 30;

proposal {
lifetime time 28800 sec;
encryption_algorithm aes;
hash_algorithm sha1;
authentication_method xauth_psk_server;
dh_group 2;
          }
} 

sainfo anonymous {
encryption_algorithm aes, 3des, blowfish;
authentication_algorithm hmac_sha1, hmac_md5;
compression_algorithm deflate;
} 

mode_cfg {
auth_source system; #使用系統的用戶名和密碼認證
dns4 8.8.8.8;
banner "/etc/racoon/motd"; #banner,登錄成功後的歡迎信息
save_passwd on;
network4 10.12.0.100;
netmask4 255.255.255.0;
pool_size 100;
pfs_group 2;
}

然後編輯群組名稱和密鑰:

sudo vim psk.txt

设置好psk.txt文件的权限:

chmod 600 /etc/init.d/psk.txt

群組名稱和密鑰既vpnc的IPsec ID和IPsec secret,用下面的形式:

NAME SECRET

中間用空格或tab隔開。

然後編輯banner:

sudo vim motd

內容隨便寫。

最後添加iptables轉發信息:

iptables -A INPUT -p udp -m udp --dport 500 -j ACCEPT
iptables -A INPUT -p udp -m udp --dport 4500 -j ACCEPT
iptables -A INPUT -p esp -j ACCEPT
iptables -A FORWARD -s 10.12.0.0/255.255.255.0 -j ACCEPT
iptables -t nat -A POSTROUTING -s 10.12.0.0/255.255.255.0 -o eth0 -j MASQUERADE

並修改net.ipv4.ip_forward為1允許轉發:

sudo vim /etc/sysctl.conf
net.ipv4.ip_forward = 1

使修改立即生效:

sudo sysctl -p

可以添加一些不允許登錄的用戶來登錄vpn:

sudo useradd -s /bin/false username
sudo passwd username

如果有问题,或者连接不上可以用打开log查错:

racoon -F

本文主要參考了以下網頁:

[1] Wellsgz. Pure IPsec VPN with IPsec-Tools/Racoon on CentOS. http://blog.wellsgz.info/?p=1964
[2] Lordong. Centos VPS+黑莓VPN教程. http://lordong.me/wp/post/1420.html

Mac OS下免密碼SSH登錄遠程主機

使用密碼通過ssh登錄遠程主機既不安全也不方便,Mac OS下我們可以很方便地通過生成一對公私鑰來免密碼登錄遠程主機,首先在終端通過以下命令生成一對公私鑰:

ssh-keygen -t rsa

輸入命令後系統第一個問題是問密鑰的id,這裡要說明一下,一對公私鑰可以多個主機反覆使用,不需要重複生成,因此默認即可。接著系統會詢問輸入密碼,我們生成密鑰就是為了免密碼登錄,因此這裡直接回車,不要輸入密碼。執行完這個命令後在~/.ssh目錄下會生成id_rsa和id_rsa.pub兩個文件。

id_rsa是私鑰,id_rsa.pub是公鑰,公鑰我們需要上傳至目標服務器,通過scp命令上傳(假設遠程主機用戶名為:user,主機域名為:yourhost.com,下同):

scp ~/.ssh/id_rsa.pub user@yourhost.com:~/.ssh/

需要說明的是,通過哪個用戶登錄就得把公鑰上傳至該用戶的~/.ssh下,不可搞錯。如果因為遠程主機用戶名下沒有.ssh這個目錄,會提示上傳失敗,則需要先用密碼登錄遠程主機創建這個目錄:

mkdir ~/.ssh

接著,需要把公鑰寫入認證文件,在遠程主機中輸入以下命令:

touch ~/.ssh/authorized_keys
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

更改目錄權限,適當保護一下.ssh目錄和認證文件:

chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

接著我們需要修改ssh服務的配置文件:

vim /etc/ssh/sshd_config

插入下面這行代碼:

AuthorizedKeysFile ~user/.ssh/authorized_keys

保存,並重啓ssh服務:

/etc/init.d/ssh restart

接著試試登錄,應該無需密碼登錄遠程主機了。

為安全我們可以禁用密碼登錄遠程主機,在ssh的配置文件中增加這麼一行即可:

PasswordAuthentication no

此外,可以寫一個config文件,記錄ssh遠程服務器、用戶名和端口的信息,進一步減少“鍵入”的字符數:

vim ~/.ssh/config

這麼寫:

Host XXX
HostName IP or DOMAIN
Port 22
User root

然後登録只需要ssh XXX即可。

本文參考了「SSH 免密碼登入」一文,並且這篇文章詳述了公私鑰驗證與登錄的原理,推薦仔細閱讀。