之前實做了Postfix ((Postfix 是一種電子郵件伺服器,它是Wietse Venema為了改良sendmail郵件伺服器而產生的。))的Virtual User後,這兩天花了點時間
試著將Vsftpd也改成Virtual User的方式,實際操作上不會太困難
但是在pam_mysql認證的地方碰上了一些問題,最後還是處理好了
日後希望與postfix讀取同一個資料庫並且同時能像postfixadmin一樣由網頁新增User
馬上開始動手實作吧!
系統環境:CentOS5.1、mysql-5.0.22-2.2.el5_1.1、mysql-devel-5.0.22-2.2.el5_1.1、vsftpd-2.0.5-10.el5、pam_mysql-0.7RC1
我主要參考了HowtoForge的這篇文章Virtual Hosting With vsftpd And MySQL On Debian Etch
Step1 建立Vsftpd用的資料庫
[quickcode:noclick]
mysql -u root -p
[/quickcode]
產生資料庫vsftpd
[quickcode:noclick]
CREATE DATABASE vsftpd;
[/quickcode]
進入vsfptd
[quickcode:noclick]
USE vsftpd;
[/quickcode]
產生table
[quickcode:noclick]
CREATE TABLE `accounts` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`username` VARCHAR( 30 ) NOT NULL ,
`pass` VARCHAR( 50 ) NOT NULL ,
UNIQUE (
`username`
)
) ENGINE = MYISAM ;
[/quickcode]
離開mysql
[quickcode:noclick]
quit;
[/quickcode]
Step2 新增使用者並設定加目錄
輸入以下指令新增vsftpd使用者並設定加目錄在/home/vsftpd
[quickcode:noclick]
useradd –home /home/vsftpd –gid nobody -m –shell /bin/false vsftpd
[/quickcode]
Step3 建立一個新的vsfptd.conf並增加設定
[quickcode:noclick]
cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf_orig
cat /dev/null > /etc/vsftpd/vsftpd.conf
vi /etc/vsftpd/vsftpd.conf
[/quickcode]
輸入內容
[quickcode:noclick]
listen=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
nopriv_user=vsftpd
chroot_local_user=YES
pam_service_name=vsftpd
rsa_cert_file=/etc/ssl/certs/vsftpd.pem
guest_enable=YES
guest_username=vsftpd
local_root=/home/vsftpd/$USER
user_sub_token=$USER
virtual_use_local_privs=YES
user_config_dir=/etc/vsftpd_user_conf
[/quickcode]
?建立放個別user設定檔的目錄
[quickcode:noclick]
mkdir /etc/vsftpd_user_conf
[/quickcode]
Step4 安裝pam_mysql,先下載檔案,官方下載點pam-mysql 0.7RC1、本站下載pam-mysql 0.7RC1
解壓縮並安裝
[quickcode:noclick]
tar -zxvf pam_mysql-0.7RC1.tar.gz
cd pam_mysql-0.7RC1
./configure –with-openssl
make
make install
[/quickcode]
如沒有報error就代表一切順利的安裝完成囉,
Step5 設定pam,輸入以下指令編輯該檔
[quickcode:noclick]
vi /etc/pam.d/vsftpd
[/quickcode]
輸入以下內容
[quickcode:noclick]
auth required /usr/lib/security/pam_mysql.so config_file=/etc/security/pam_mysql.conf
account required /usr/lib/security/pam_mysql.so config_file=/etc/security/pam_mysql.conf
[/quickcode]
請注意這是兩行文字喔!
編輯config_file=/etc/security/pam_mysql.conf
[quickcode:noclick]
vi config_file=/etc/security/pam_mysql.conf
[/quickcode]
輸入以下內容
[quickcode:noclick]
users.host=test輸入主機名稱
users.database=vsftpd資料庫名稱
users.db_user=有權限讀取資料庫的帳號
users.db_passwd=有權限讀取資料庫帳號的密碼
users.table=accounts資料表名稱
users.user_column=username使用者欄位名稱
users.password_column=pass密碼欄位名稱
users.password_crypt=3加密方式
verbose=1
[/quickcode]
加密方式的地方特別說明一下
0為不加密、1是使用crpyt()、2是用mysql的password function、3是用md5
網路上參考都是用2,但可能pam_mysql與目前mysql的password function相容上有問題,一直無法通過
所以改為md5加密
都設定完記得重新啟動vsftpd
[quickcode:noclick]
/etc/init.d/vsftpd restart
[/quickcode]
Step6 新增使用者並測試
[quickcode:noclick]
mysql -u root -p
[/quickcode]
進入vsfptd資料庫
[quickcode:noclick]
USE vsftpd;
[/quickcode]
新增一筆記錄
[quickcode:noclick]
INSERT INTO accounts (username, pass) VALUES(‘testuser’, md5(‘123456’));
quit;
[/quickcode]
建立測試使用者的家目錄,並設定權限
[quickcode:noclick]
mkdir /home/vsftpd/testuser
chown vsftpd:nogroup /home/vsftpd/testuser
[/quickcode]
Step7?有關500 OOPS: cannot change directory:/rootConnection closed by remote host
如果出現以上的錯誤訊息,原因是Selinux設置關閉了ftp,輸入如下指令
[quickcode:noclick]
setsebool -P ftpd_disable_trans 1
[/quickcode]
Step8 開啟你的ftp client軟體,深呼吸後開始測試吧!
發佈留言