配置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的訪問密碼

為Squid設置訪問密碼需要用到兩個組件,一個是squid自帶的ncsa_auth,一個是apache的htpasswd。如果是在debian下用aptitude安裝的squid 2.7版ncsa_auth的位置是/usr/lib/squid/ncsa_auth,如果是源代碼編譯安裝的squid需要自己編譯這個程序。

如果服務器上已經安裝了apache,那已經可以使用htpasswd了,如果沒有,則安裝apache2-utils這個包即可:

sudo aptitude install apache2-utils

安裝apache2-utils之後,即可使用htpasswd來生成用戶名密碼:

htpasswd -c /etc/squid/password user

輸入密碼,這樣便新建了user這個用戶了。用戶名和密碼信息保存在/etc/squid/password,再創建新的用戶的時候就不需要再使用-c 這個參數了。

然後在squid的配置文件加入以下配置信息:

auth_param basic program /usr/lib/squid/ncsa_auth /etc/squid/password
auth_param basic children 5
auth_param basic realm Hello!# 這裡輸入squid登陸框的歡迎信息

acl squid_user proxy_auth REQUIRED
http_access allow squid_user

最後重啓squid即可。