實驗環境:
centos 6.4 x86_64
實驗目標:
實現在同一跟目錄下對admin,upload,download三個虛擬用戶的不同權限的控制。具體權限控制列表如下:
用戶名 | 權限說明 |
admin | 管理員,可以上傳、下載、新建文件夾、刪除和更改文件和文件夾名。 |
upload | 不可以下載,可以上傳、新建文件夾,但不能刪除文件和文件夾,不能重命名原有文件和文件夾; |
download | 只能下載,不能進行其他操作。 |
以上三個虛擬用戶均不允許登錄系統,並且使用ftp時會被鎖定在指定目錄內不可進入系統其他目錄。
一、安裝、配置vsftpd
爲了方便我這裏採用yum的方式安裝vsftpd
[root@centi-c /]# yum -y install vsftpd [root@centi-c /]# cd /etc/vsftpd/ [root@centi-c vsftpd]# cp vsftpd.conf vsftpd.conf.bak [root@centi-c vsftpd]# service vsftpd start Starting vsftpd forvsftpd: [ OK ] #添加一個不能登錄系統的用戶,用來做虛擬用戶映射 [root@centi-c vsftpd]# useradd –s /sbin/nologin –d /home/www2013 -M www2013 [root@centi-c vsftpd]# passwd www2013 #創建虛擬用戶列表,分別是upload、download和admin [root@centi-c vsftpd]# touch /etc/vsftpd/vu_list.txt [root@centi-c vsftpd]# echo upload >>/etc/vsftpd/vu_list.txt [root@centi-c vsftpd]# echo 111111 >>/etc/vsftpd/vu_list.txt [root@centi-c vsftpd]# echo download >>/etc/vsftpd/vu_list.txt [root@centi-c vsftpd]# echo 111111 >>/etc/vsftpd/vu_list.txt [root@centi-c vsftpd]# echo admin >>/etc/vsftpd/vu_list.txt [root@centi-c vsftpd]# echo 111111 >>/etc/vsftpd/vu_list.txt #查看列表內容 [root@centi-c vsftpd]# cat /etc/vsftpd/vu_list.txt upload 111111 download 111111 admin 111111 #保存虛擬帳號和密碼的文本文件無法被系統帳號直接調用,需要創建用於系統認證的db文件 [root@centi-c vsftpd]# db_load -T -t hash -f /etc/vsftpd/vu_list.txt /etc/vsftpd/vu_list.db #創建db文件需要db4支持,如果系統沒安裝請安裝 [root@centi-c vsftpd]# yum -y install db4 db4-devel db4-utils #修改db文件的權限,以免被非法用戶修改 [root@centi-c vsftpd]# chmod 600 /etc/vsftpd/vu_list.db
配置PAM文件
由於服務器通過調用系統PAM模塊來對客戶端進行身份驗證,因此需要修改指定的配置文件來調整認證方式。PAM模塊的配置文件路徑爲:/etc/pam.d/,這個目錄下存放只許多與用戶認證有關的配置文件。
[root@centi-c pam.d]# ls chfn fingerprint-auth passwd runuser smtp.postfix su-l chsh fingerprint-auth-ac password-auth runuser-l sshd system-auth config-util login password-auth-ac smartcard-auth su system-auth-ac crond newrole remote smartcard-auth-ac sudo vsftpd cvs other run_init smtp sudo-i
編輯vsftpd文件
32位系統添加:
auth required /lib/security/pam_userdb.so db=/etc/vsftpd/vu_list account required /lib/security/pam_userdb.so db=/etc/vsftpd/vu_list
64位系統添加:
auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/vu_list account required /lib64/security/pam_userdb.so db=/etc/vsftpd/vu_list
兩行內容。
[root@centi-c pam.d]# vi vsftpd #%PAM-1.0 session optional pam_keyinit.so force revoke auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusersonerr=succeed auth required pam_shells.so auth include system-auth account include system-auth session include system-auth session required pam_loginuid.so auth required /lib/security/pam_userdb.so db=/etc/vsftpd/vu_list account required /lib/security/pam_userdb.so db=/etc/vsftpd/vu_list
創建虛擬用戶配置文件:
#創建conf文件夾 [root@centi-c pam.d]# cd /etc/vsftpd [root@centi-c vsftpd]# mkdir conf [root@centi-c vsftpd]# cd conf #創建admin用戶的配置文件 [root@centi-c conf]# cat >>admin<< EOF > anon_world_readable_only=NO > write_enable=YES > anon_mkdir_write_enable=YES > anon_other_write_enable=YES > anon_upload_enable=YES > EOF #創建upload用戶的配置文件 [root@centi-c conf]# cat >>upload<< EOF > write_enable=NO > anon_upload_enable=YES > anon_mkdir_write_enable=YES > anon_world_readable_only=NO >download_enable=NO > EOF #創建download用戶的配置文件 [root@centi-c conf]# cat >>download<< EOF > anon_world_readable_only=NO > EOF
修改vsftpd.conf文件
#修改內容如下 [root@centi-c conf]# cd .. [root@centi-c vsftpd]# vi vsftpd.conf anonymous_enable=NO local_enable=YES anon_mkdir_write_enable=NO dirmessage_enable=YES xferlog_enable=YES connect_from_port_20=YES chown_uploads=NO chroot_local_user=YES chroot_list_enable=YES chroot_list_file=/etc/vsftpd/chroot_list # To fixed 500 OOPS: vsftpd: refusing to run with writable root inside chroot () allow_writable_root=YES xferlog_file=/var/log/vsftpd.log xferlog_std_format=YES nopriv_user=www2013 async_abor_enable=YES ascii_upload_enable=YES ascii_download_enable=YES ftpd_banner=Welcome to blah FTP service ^_^ ls_recurse_enable=NO listen=YES pam_service_name=vsftpd userlist_enable=YES tcp_wrappers=YES local_root=/home/www2013 guest_enable=YES guest_username=www2013 virtual_use_local_privs=YES user_config_dir=/etc/vsftpd/conf
如果不加這一段的話會報如下錯誤:
To fixed 500 OOPS: vsftpd: refusing to run with writable root inside chroot ()
具體原因請看這裏:Ben Scobie’s Blog
具體測試過程就不一一列舉了,有空再添加。
部分錯誤解決方法:
1.530 Permission denied.
解決過程如下:
[root@centi-c vsftpd]# ftp 127.0.0.1 Connected to 127.0.0.1 (127.0.0.1). 220 Welcome to blah FTP service ^_^ Name (127.0.0.1:root): admin 331 Please specify the password. Password: 530 Permission denied. Login failed. ftp> bye 221 Goodbye. #查看secure日誌後,錯誤原因一目瞭然 [root@centi-c vsftpd]# tail -f /var/log/secure Jul 5 10:09:30 centi-c vsftpd[36501]: PAM unable to dlopen(/lib/security/pam_userdb.so): /lib/security/pam_userdb.so: cannot openshared object file: No such fileor directory Jul 5 10:09:30 centi-c vsftpd[36501]: PAM adding faulty module: /lib/security/pam_userdb.so Jul 5 10:16:34 centi-c vsftpd[36501]: PAM unable to dlopen(/lib/security/pam_userdb.so): /lib/security/pam_userdb.so: cannot openshared object file: No such fileor directory Jul 5 10:16:34 centi-c vsftpd[36501]: PAM adding faulty module: /lib/security/pam_userdb.so Jul 5 10:16:39 centi-c vsftpd[36501]: PAM unable to dlopen(/lib/security/pam_userdb.so): /lib/security/pam_userdb.so: cannot openshared object file: No such fileor directory Jul 5 10:16:39 centi-c vsftpd[36501]: PAM adding faulty module: /lib/security/pam_userdb.so Jul 5 10:16:53 centi-c vsftpd[36501]: PAM unable to dlopen(/lib/security/pam_userdb.so): /lib/security/pam_userdb.so: cannot openshared object file: No such fileor directory Jul 5 10:16:53 centi-c vsftpd[36501]: PAM adding faulty module: /lib/security/pam_userdb.so Jul 5 10:26:48 centi-c vsftpd[37818]: PAM unable to dlopen(/lib/security/pam_userdb.so): /lib/security/pam_userdb.so: cannot openshared object file: No such fileor directory Jul 5 10:26:48 centi-c vsftpd[37818]: PAM adding faulty module: /lib/security/pam_userdb.so
修改/etc/pam.d/vsftpd文件,將
auth required /lib/security/pam_userdb.so db=/etc/vsftpd/vu_list account required /lib/security/pam_userdb.so db=/etc/vsftpd/vu_list
改爲:
auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/vu_list account required /lib64/security/pam_userdb.so db=/etc/vsftpd/vu_list
重啓sftpd服務,就可以正常登錄了
2.chroot_list_enable和chroot_local_user取值的不同組合情況:
參數 | 取值 | 取值 | 取值 | 取值 |
chroot_list_enable | YES | YES | NO | NO |
chroot_local_user | YES | NO | YES | NO |
意義 | 文件中列出的用戶根目錄爲系統根目錄,其它用戶根目錄爲自己主目錄。 | 文件中列出的用戶根目錄爲自己主目錄,其它用戶根目錄爲系統根目錄。 | 全部用戶根目錄都是自己主目錄。 | 全部用戶根目錄都是系統根目錄。 |
參考資料:http://blog.csdn.net/pigchan/article/details/4768717