vsftpd+mysql 實現本地用戶,匿名用戶,虛擬用戶同時工作
大綱
1.安裝vsftpd mysql pam-mysql
2.添加虛擬用戶(使用本地數據庫和數據庫服務器)
3.實現本地用戶,匿名用戶,虛擬用戶同時工作
4.說下vsftpd.conf文件的內容
一、安裝
先說下環境我是在centos 5.6下做的 安裝vsftpd mysql
vsftpd和mysql是使用yum源安裝的,pam_mysql使用編譯安裝的是因爲我沒找到rpm軟件包!!!
首先安裝vsftpd+mysql 以及必要軟件(pam_mysql db4*)
yum install vsftpdmysql db4* -y
編譯安裝需要用以下軟件:
yum install gcc gcc-c++ pam-devel mysql-devel 也還需要更多的開發工具,到時只需使用
使用下面的命令與地址下載pam_mysql:
解壓和安裝
tar zxf pam_mysql-0.7RC1.tar.gz -C /tmp/
cd /tmp/pam_mysql-0.7RC1/
./configure --with-openssl
make
make install
當使用find / -name pam_mysql.so命令找到pam_mysql.so時就是代表安裝成功了。
ls /usr/lib/security/pam_mysql.so #查看下是否有這個文件存在
pam_mysql的安裝可以參考下面的內容:
http://bbs.51cto.com/thread-825165-1.html
二、添加虛擬用戶
虛擬用戶可以使用兩種方式添加 mysql數據和db4工具生成的數據文件。
建立虛擬用戶使用的系統帳戶virtual
這個帳戶不需要登錄所以將他的home設爲/var/ftp/ 或者不指定
useradd -d /var/ftp/ -s /sbn/nologin virtual
chown virtual.virtual /var/ftp #將ftp目錄的屬主和屬組改爲virtual
1.使用mysql添加虛擬用戶
建立vsftpd使用的mysql數據庫和表,並插入用戶名和密碼到表中:
mysqladmin -u root password 'your_Passw0rd';
mysql –u root –p;
mysql>create database vsftpd;
mysql>use vsftpd;
mysql>create table users(name char(20),password char(20));
mysql> insert into users(name,password) values ('pei','pei');
mysql> insert into ftpusers(name,password) values ('admin','12345');
mysql>grant allon vsftpd.users to virtual@localhost identified by 'passwd';
mysql>quit;
編輯pam文件加入以下內容:
vim /etc/pam.d/vsftpd
auth sufficient /usr/lib/security/pam_mysql.so user=virtual passwd=majinlong host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=passwd crypt=0
account sufficient /usr/lib/security/pam_mysql.so user=virtual passwd=majinlong host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=passwd crypt=0
除以上內容外的其他內容全部使用#號註釋掉
注意:
crypt= n
crypt=0:明文密碼
crypt=1:使用crpyt()函數(對應SQL數據裏的encrypt(),encrypt()隨機產生salt)
crypt=2:使用MYSQL中的password()函數加密
crypt=3:表示使用md5的散列方式
虛擬用戶的vsftpd.conf配置文件內容
#virtual users
guest_enable=YES 啓用虛擬用戶
guest_username=virtual 虛擬用戶使用的系統賬戶
virtual_use_local_privs=NO 虛擬用戶和本地用戶是否有相同的權限
user_config_dir=/etc/etc/vsftpd_user_config 單獨的用戶配置文件位置
2.使用本地數據添加虛擬用戶
添加虛擬用戶口令文件格式如下:
user
passwd
例如:
vi user.txt
admin
12345
生虛擬用戶口令認證數據庫文件,需要使用db4-utils軟件
db_load -T -t hash -f 口令文件的路徑 生成後的數據認證文件
db_load -T -t hash -f user.txt /etc/vsftpd/vuser.db
編輯pam文件 加入下面兩行:
auth sufficient pam_userdb.so db=/etc/vsftpd/vuser
account sufficient pam_userdb.so db=/etc/vsftpd/vuser
其他的內容全部使用#號註釋掉
虛擬用戶的vsftpd.conf配置文件內容
#virtual users
guest_enable=YES 啓用虛擬用戶
guest_username=virtual 虛擬用戶使用的系統賬戶
virtual_use_local_privs=NO 虛擬用戶和本地用戶是否有相同的權限
user_config_dir=/etc/etc/vsftpd_user_config //單獨的用戶配置文件位置
注意:從頭到尾pam_service_name=vsftpd這個選項都沒有動過,因爲我們一直在修改/etc/pam.d/vsftpd這個文件,沒有建立新的pam文件所以不需要改變這一項。
至此虛擬用戶的內容就完了下面可以使用虛擬用戶測試下
三、實現本地用戶,匿名用戶,虛擬用戶同時工作
實現本地用戶,匿名用戶,虛擬用戶同時工作的方法有兩種:
一個是添加多個vsftpd.conf配置文件,修改監聽端口使其工作在21端口以外的端口上
一個是修改pam文件使vsftpd直接支持本地,匿名和虛擬用戶同時登錄
上面第一種方法不是很難,網上有許多教程,我使用的是第二種方法下面就說下怎麼實現的:
修改後完整的pam文件/etc/pam.d/vsftpd的內容如下:
auth sufficient /usr/lib/security/pam_mysql.so user=virtual passwd=majinlong host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=passwd crypt=0
account sufficient /usr/lib/security/pam_mysql.so user=virtual passwd=majinlong host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=passwd crypt=0
#auth required pam_listfiles.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed(不允許ftpusers文件中的用戶登錄)
#auth required pam_shell.so(這個還不太清楚)
auth include system-auth(認證本地用戶的默認選項)
account include system-auth(認證本地用戶的默認選項)
session include system-auth(認證本地用戶的默認選項)
session required pam_loginuid.so(認證系統用戶的默認選項)
#session optional pam_keyinit.so force revoke(可有可無)
如果想弄清楚上面的內容具體是什麼意思建議參考下‘pam百度百科’
大家可以參考下面:
http://spazzzz.blog.51cto.com/2707720/677799
一般第一列指定的內容是:module-type,一共就只有4種,分別是:
1 auth:對用戶身份進行識別,如提示輸入密碼,判斷是root否;
2 account:對賬號各項屬性進行檢查,如是否允許登錄,是否達到最大用戶數;
3 session:定義登錄前,及退出後所要進行的操作,如登錄連接信息,用戶數據的打開和關閉,掛載fs;
4 password:使用用戶信息來更新數據,如修改用戶密碼。
第二列內容是:control-flag,有很多,不過一般常用的是4種,分別是:
5 optional:不進行成功與否的返回,一般返回一個pam_ignore;
6 required:表示需要返回一個成功值,如果返回失敗,不會立刻將失敗結果返回,而是繼續進行同類型的下一驗證,所有此類型的模塊都執行完成後,再返回失敗;
7 requisite:與required類似,但如果此模塊返回失敗,則立刻返回失敗並表示此類型失敗;
8 sufficient:如果此模塊返回成功,則直接向程序返回成功,表示此類成功,如果失敗,也不影響這類型的返回值。
第三列內容是PAM模塊的存放路徑,默認是在/lib/security/目錄下,如果在此默認路徑下,要填寫絕對路徑。
第四列內容是PAM模塊參數,這個需要根據所使用的模塊來添加。
四、詳解vsftpd.conf文件的內容
1. 匿名及本地用戶共同參數
listen=yes //vsftpd工作在standalone 模式下
write_enable=yes/no //是否允許全局可寫
download_enable=yes/no //是否允許所有用戶可以下載
dirlist_enable=yes/no //是否允許所有用戶可以瀏覽(列出文件列表)
pam_service_name=vsftpd
ftpd_banner=歡迎語字符串
banner_file=文件
dirmessage_enable=yes/no
message_file=文件
參數ftpd_banner設置的歡迎語字符串將在登錄時看到,如果想做出多行歡迎語,就要把內容單獨存爲banner_file參數指定的文件,應用中 這兩個參數二選一即可。dirmessage_enable和message_file參數是進入某個目錄後顯示的歡迎信息,用法與前兩個參數一樣。
2.本地用戶
local_root=/path //本地用戶登陸服務器後直接進入的目錄
local_umask=八進制數 //本地用戶上傳檔案權限的 umask值
local_max_rate=數字 //本地用戶傳輸速率單位爲 bps
chmod_enable=yes/no // 是否允許本地用戶改變ftp 服務器上檔案的權限
user_config_dir=/path //用戶單獨配置文件所在目錄
userlist_enable=yes/no //是否啓用 userlist 功能模塊
userlist_deny=yes/no //是否拒絕 userlist 文件中用戶登陸 ftp 服務
userlist_file=/path/to/file //指定的 userlist 文件名
chroot_list_enable=yes/no //是否啓用 chroot_list 文件
chroot_local_user=yes/no //是否限制本地用戶的根目錄爲自己的主目錄
chroot_list_file=/path/to/file //設置 chrootlist 文件名
3.匿名用戶
anonymous_enable=YES /NO //是否允許匿名訪問
no_anon_password=YES //匿名用戶不需要輸入密碼
anon_root=/var/ftp //設置匿名用戶的FTP根目錄(缺省爲/var/ftp)
anon_upload_enable=YES/NO //匿名用戶是否可以上傳
anon_umask=022 //設置匿名用戶所上傳文件的默認權限掩碼值
anon_other_write_enable=YES/NO //是否允許匿名用戶可以使用除了建立文件夾和上傳文件以外其他的ftp寫操作命令。例如:delete、rename 等等
anon_world_readable_only=YES/NO //匿名用戶是否可以瀏覽
anon_mkdir_write_enbale=YES/NO //是否允許匿名用戶有創建目錄的寫入權限
anon_max_rate=0 //限制匿名用戶最的最大傳輸速率(0爲無限制,單位爲字節)
4.虛擬用戶
guest_enable=YES //啓用虛擬用戶
guest_username=virtual //虛擬用戶使用的系統賬戶
user_config_dir=/etc/etc/vsftpd_user_config //單獨的用戶配置文件位置
virtual_use_local_privs=NO
當virtual_use_local_privs=YES時,虛擬用戶和本地用戶有相同的權限;
當virtual_use_local_privs=NO時,虛擬用戶和匿名用戶有相同的權限,默認是NO
用戶單獨的配置文件可以使用匿名用戶配置文件的全部內容,
local_root=/var/ftp/123 //用戶的主目錄
#anon_world_readable_only=NO //匿名用戶是否可以瀏覽
anon_upload_enable=YES //匿名用戶是否可以上傳
anon_mkdir_write_enable=YES //是否允許匿名用戶有創建目錄的寫入權限
anon_other_write_enable=YES//是否允許匿名用戶可以使用除了建立文件夾和上傳文件以外其他的ftp寫操作命令。例如:delete、rename 等等
anon_max_rate=512000 //限制匿名用戶最的最大傳輸速率(0爲無限制,單位爲字節)
5.其他設置
日誌文件
xferlog_enable=yes/no //是否啓用 xferlog 日誌格式
xferlog_std_format=yes/no //是否採用標準格式記錄日
xferlog_file=/path/to/logfile //xferlog 日誌文件所在位置,默認爲/var/log/xferlog
dual_log_enable=yes/no //是否採用Vsftpd自己的日誌記錄方式
log_ftp_protocol=yes/no //是否記錄所有的ftp命令日誌
vsftpd_log_file=/path/to/logfile //指定vsftpd 日誌文件位置,默認爲/var/log/vsftpd.log
主動模式
port_enable=YES //開啓主動模式
connect_from_port_20=YES //當主動模式開啓的時候 是否啓用默認的20端口監聽
ftp_date_port=%portnumber% //上一選項使用NO參數是 指定數據傳輸端口
被動模式
pasv_enable=YES //開啓被動模式
pasv_min_port=%number% //被動模式最低端口
pasv_max_port=%number% //被動模式最高端口
連接限制
max_client=%number% //最大連接數
max_per_ip=%number% //每ip最大連接數
anon_max_rate=%number% //匿名用戶最大速率 單位kbps
local_max_rate=%number% //本地用戶最大速率 單位kbps
超時限制
idle_session_timeout=600 //空閒連接超時
data_connection_timeout=120 //數據傳輸超時
accept_timeout=60 //PAVS請求超時
connect_timeout=60 //PROT模式連接超時
更多vsftpd.conf詳細配置:
http://tzsky.blog.51cto.com/1062094/237322
http://www.linux.gov.cn/ linux學園
http://redking.blog.51cto.com/27212/136218