vsftp 多用戶不同訪問權限配置

實驗環境

   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_enableYESYES NONO
chroot_local_userYESNOYESNO
意義文件中列出的用戶根目錄爲系統根目錄,其它用戶根目錄爲自己主目錄。文件中列出的用戶根目錄爲自己主目錄,其它用戶根目錄爲系統根目錄。全部用戶根目錄都是自己主目錄。全部用戶根目錄都是系統根目錄。

參考資料:http://blog.csdn.net/pigchan/article/details/4768717


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章