vsftp 虚拟用户形式配置(定制权限)

实现要求:
FTP服务,添加两个虚拟用户upsir和downsir,主目录为“/ftpsite/”,upload可以上传,可以下载文件;download只可以下载,不可以上传文件;服务器最大并发连接200个,每IP限2个连接,限速100KB。

1. 查看环境,是否支持db4和安装有vsftpd 
#rpm -qa | grep db4
----------------------------
db4-4.0.14-20
db4-utils-4.0.14-20
gpg-pubkey-db42a60e-37ea5438
db4-devel-4.0.14-20

#rpm -qa vsftpd
----------------------------
vsftpd-1.1.3-8

2. 生成虚拟用户username/password database
cd /etc/vsftpd
vi ftpusers.txt
----------------------------------------
upsir
123
downsir
123
----------------------------------------

db_load -T -t hash -f ftpusers.txt vsftpd_login.db
chmod 600 vsftpd_login.db
注意:上面文件ftpusers.txt单行是:用户名;双行是密码
vsftpd_login.db只让root用户可读可写

3.生成跟虚拟用户database相关联的PAM文件
cd /etc/pam.d
vi vsftpd.pam
----------------------------------------
auth required /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login
account required /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login
----------------------------------------
注意:vsftpd_login没有.db

4.建立虚拟用户所映射的系统帐户,定位虚拟用户所在的目录
cd /home
useradd -d /home/ftpsite -s /sbin/nologin virtual
cp /etc/hosts ftpsite/
chown viretual.virtual ftpsite/hosts

5.修改配置文件
1)主配置文件vftpd.conf
全局中权限越低,后面的虚拟用户的权限越能够控制的详细,在配置时候去掉#
cd /etc/vsftpd
下面是vsftpd.conf的配置文件内容解释:

anonymous_enable=NO
local_enable=YES
出于安全的角度禁用了匿名(anonymous)用户,启用非匿名用户—就是我们刚才我们创建的虚拟用户“virtual“

write_enable=NO
anon_upload_enable=NO
anon_mkdir_write_enable=NO
anon_other_write_enable=NO
这些是出于安全的目的,写命令全部被禁用了

chroot_local_user=YES
这个是确信能将虚拟用户限制在我们上述的/home/ftpsite目录中

guest_enable=YES
guest_username=virtual
这个guest_enable是非常重要的—它用来激活虚拟用户! guest_username 是将所有虚拟用户映射成我们先前设置的真实用户"virtual"。这也决定了虚拟用户在文件系统中的位置,也就是"virtual"的主目录 /home/ftpsite。

listen=YES
这个将vsftpd 设置成独立模式( "standalone" mode)也就是不通过 inetd或者xinetd来运行。这意味着你直接运行vsftpd的可执行命令就可以启动它了。

xferlog_enable=YES
xferlog_std_format=YES
#设定PAM服务下vsftpd.pam的验证配置文件名。因此,PAM验证将参考/etc/pam.d/下的vsftpd.pam文件配置。
pam_service_name=vsftpd.pam
userlist_enable=YES
#支持tcp_wrappers,限制访问(/etc/hosts.allow,/etc/hosts.deny)
tcp_wrappers=YES

#启用per-user 配置,对不同的虚拟用户设置不同的权限
user_config_dir=/etc/vsftpd/vsftpd_user_conf

max_client=200
max_per_ip=2
local_max_rate=100000

2)对不同的虚拟用户设置不同的权限
cd /etc/vsftpd/vsftpd_user_conf

vi upsir
------------------------------------------
#主目录
local_root=/home/ftpsite
#可写
write_enable=YES
#可下载
#download_enable=NO这个参数设了出错??
#仅读
anon_world_readable_only=NO
#可上传
anon_upload_enable=YES
#可建目录
anon_mkdir_write_enable=YES
#可删除,改名,移动等权限
anon_other_write_enable=YES

-------------------------------------------
vi downsir
-------------------------------------------
#浏览下载
anon_world_readable_only=NO

6.启动vsftpd
service vsftpd start
开机启动
chkconfig vsftpd on

Notes:

(1) 每次添加完新用户後,就必须执行如下命令,重新Hash用户名文件才能起作用
#db_load -T -t hash -f ftpusers.txt vsftpd_login.db
(2) 更改一个或多个用户的权限和密码不需要执行任何命令

 

 

 


实现三个用户的不同权限:

a.upload用户,可以上传下载,可以新建文件夹,但不能删除文件和文件夹,不能重命名原有文件和文件夹;

b.download用户,只能下载;

c.admin用户,管理员,可以上传,可以下载,可以新建文件夹,可以删除和更改文件和文件夹名。

这些用户都不能登录系统,并且用ftp连接时锁定在自己的家目录中不能进入系统文件夹。

建立用户列表logins.txt 内容如下

upload 

pwd 

download 

pwd 

admin 

pwd 

说明,此文本文件的格式是:单数行为用户名,偶数行为密码

建立访问者的口令库文件,然后修改其权限

db_load t hash f /tmp/logins.txt /etc/vsftpd/vsftpd_login.db

/etc/pam.d/中创建ftp.vu 添加如下信息

auth required /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login

account required /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login

/var/ftp/创建目录并改变其属性和它的属主

useradd -d /var/ftp/test virtual 

chmod 700 /var/ftp/test 

在目录中添加test_file测试文件

创建virtual文件目录/etc/vsftpd/user_conf 并在文件目录中创建以用户名命名的配置文件

download upload admin 

download内容

anon_world_readable_only=NO (开放download用户的下载权限——只能下载;注意不要写成YES,否则将不能列出文件和目录)

upload内容

anon_world_readable_only=NO

write_enable=YES (增加写权限)

anon_upload_enable=YES(增加上传权限)

anon_mkdir_write_enable=YES (增加创建目录的权限)

admin内容

anon_world_readable_only=NO 

write_enable=YES (增加写权限)

anon_upload_enable=YES(增加上传权限)

anon_mkdir_write_enable=YES (增加创建目录的权限)

anon_other_write_enable=YES(增加管理员用户的删除/重命名的权限)

/etc/vsftpd/vsftpd.conf文件中插入下面的配置语句

guest_enable=YES(启用虚拟用户)

guest_username=virtual(将虚拟用户映射为本地virtual用户)

pam_service_name=ftp.vu(指定PAM配置文件为ftp.vu

user_config_dir=/etc/vsftpd/user_conf(指定不同虚拟用户配置文件的存放路径)

重新启动vsftpd 

Service vsftpd restart

一切OK