|
实验环境:
centos 6.4 x86_64
实验目标:
实现在同一跟目录下对admin,upload,download三个虚拟用户的不同权限的控制。具体权限控制列表如下:
用户名 权限说明
admin 管理员,可以上传、下载、新建文件夹、删除和更改文件和文件夹名。
upload 不可以下载,可以上传、新建文件夹,但不能删除文件和文件夹,不能重命名原有文件和文件夹;
download 只能下载,不能进行其他操作。
以上三个虚拟用户均不允许登录系统,并且使用ftp时会被锁定在指定目录内不可进入系统其他目录。
一、安装、配置vsftpd
为了方便我这里采用yum的方式安装vsftpd
[iyunv@centi-c /]# yum -y install vsftpd
[iyunv@centi-c /]# cd /etc/vsftpd/
[iyunv@centi-c vsftpd]# cp vsftpd.conf vsftpd.conf.bak
[iyunv@centi-c vsftpd]# service vsftpd start
Starting vsftpd for vsftpd: [ OK ]
#添加一个不能登录系统的用户,用来做虚拟用户映射
[iyunv@centi-c vsftpd]# useradd –s /sbin/nologin –d /home/www2013 -M www2013
[iyunv@centi-c vsftpd]# passwd www2013
#创建虚拟用户列表,分别是upload、download和admin
[iyunv@centi-c vsftpd]# touch /etc/vsftpd/vu_list.txt
[iyunv@centi-c vsftpd]# echo upload >>/etc/vsftpd/vu_list.txt
[iyunv@centi-c vsftpd]# echo 111111 >>/etc/vsftpd/vu_list.txt
[iyunv@centi-c vsftpd]# echo download >>/etc/vsftpd/vu_list.txt
[iyunv@centi-c vsftpd]# echo 111111 >>/etc/vsftpd/vu_list.txt
[iyunv@centi-c vsftpd]# echo admin >>/etc/vsftpd/vu_list.txt
[iyunv@centi-c vsftpd]# echo 111111 >>/etc/vsftpd/vu_list.txt
#查看列表内容
[iyunv@centi-c vsftpd]# cat /etc/vsftpd/vu_list.txt
upload
111111
download
111111
admin
111111
#保存虚拟帐号和密码的文本文件无法被系统帐号直接调用,需要创建用于系统认证的db文件
[iyunv@centi-c vsftpd]# db_load -T -t hash -f /etc/vsftpd/vu_list.txt /etc/vsftpd/vu_list.db
#创建db文件需要db4支持,如果系统没安装请安装
[iyunv@centi-c vsftpd]# yum -y install db4 db4-devel db4-utils
#修改db文件的权限,以免被非法用户修改
[iyunv@centi-c vsftpd]# chmod 600 /etc/vsftpd/vu_list.db
配置PAM文件
由于服务器通过调用系统PAM模块来对客户端进行身份验证,因此需要修改指定的配置文件来调整认证方式。PAM模块的配置文件路径为:/etc/pam.d/,这个目录下存放只许多与用户认证有关的配置文件。
[iyunv@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文件
添加:
auth required /lib/security/pam_userdb.so db=/etc/vsftpd/vu_list
account required /lib/security/pam_userdb.so db=/etc/vsftpd/vu_list
两行内容。
[iyunv@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/ftpusers onerr=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文件夹
[iyunv@centi-c pam.d]# cd /etc/vsftpd
[iyunv@centi-c vsftpd]# mkdir conf
[iyunv@centi-c vsftpd]# cd conf
#创建admin用户的配置文件
[iyunv@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用户的配置文件
[iyunv@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用户的配置文件
[iyunv@centi-c conf]# cat >>download<< EOF
> anon_world_readable_only=NO
> EOF
修改vsftpd.conf文件
#修改为如下内容
[iyunv@centi-c conf]# cd ..
[iyunv@centi-c vsftpd]# vi vsftpd.conf
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
加入 allow_writable_root=YES 是为了实现虚拟用户可以同一目录下工作而不需要创建子目录。
如果不加这一段的话会报如下错误:
1
To fixed 500 OOPS: vsftpd: refusing to run with writable root inside chroot ()
|
|
|
|
|
|
|