David Chao

David Chao

#
創業誌

Virtual User Vsftp And MySQL On CentOS5

2008/02/10

之前實做了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軟體,深呼吸後開始測試吧!

2008-02-10_0354.png

趙大衛
貫徹死了都要創業為信念,卻差一點讓口號變成事實! 目前正在進行第一次修養,請多多支持。

發佈留言