VSFTP设置虚拟用户

服务器搭建目前采用最多的还是VSFTP服务器,对于公司来讲,很多时间都会需要很多用户,而且针对不同的用户还会有不用的操作权限,如果全部创建为真实的linux用户肯定不是一个很好的选择,所以这时候就会用到虚拟用户的创建

创建虚拟用户的过程如下:

1. 分别创建vsftpd服务的宿主用户vsftpuser和虚拟用户的宿主用户virtualuser,命令如下所示:

useradd vsftpuser -s /usr/sbin/nologin

useradd virtualuser -s /usr/sbin/nologin

-s /usr/sbin/nologin意思是指不允许登录

2. 创建虚拟用户数据文件

cd /etc/vsftpd 

vi vftpuser.txt

创建vsftpuser.txt文件存储虚拟用户的用户名和密码

vftpuser.txt文件格式为一行用户名一行密码,格式如下:

username1

password1

username2

password2

...

...

然后再使用db_load将虚拟用户文件vsftpuser.txt转成系统可识别的db文件,命令如下所示:

db_load -T -t hash -f /etc/vsftpd/vftpuser.txt  /etc/vsftpd/vftpuser.db

如果遇到db命令不可用的情况下,请安装db_load软件,具体安装方式可自行google

最后再修改文件权限,防止其他非法用户获取用户信息

chmod 600 /etc/vsftpd/vftpuser.*

3. 通过配置PAM模块对客户端身份进行认证

PAM(Plugable Authentication Module)为可插拔认证模块,不必重新安装应用系统,通过修改指定的配置文件,调整对该程序的认证方式

PAM模块配置文件路径为/etc/pam.d/目录,此目录下保存着大量与认证有关的配置文件,并以服务名称命名,比如说vsftp的配置文件全路径为 /etc/pam.d/vsftp,找到该文件后,修改文件配置项,文件配置项及配置方式如下所示:

# 对用户名口令进行验证,参与验证的模块是pam_userdb.so,参与验证的文件是/etc/vsftpd/vftpuser

auth    sufficient      /lib/x86_64-linux-gnu/security/pam_userdb.so    db=/etc/vsftpd/vftpuser

# 对用户的帐户有哪些权限哪些限制进行验证

account sufficient      /lib/x86_64-linux-gnu/security/pam_userdb.so    db=/etc/vsftpd/vftpuser

# sufficient表示充分条件,也就是说,一旦在这里通过了验证,那么也就不用经过下面剩下的验证步骤了。

# 相反,如果没有通过的话,也不会被系统立即挡之门外,因为sufficient的失败不决定整个验证的失败,意味着用户还必须将经历剩下来的验证审核

required 和 sufficient:sufficient如果验证不通过,就继续往下验证,required是必须的,验证不通过就不往下验证

最终配置文件样式:

# Standard behaviour for ftpd(8).

# 首先验证不可登录的用户

auth    required        pam_listfile.so item=user sense=deny file=/etc/ftpusers onerr=succeed

# Note: vsftpd handles anonymous logins on its own. Do not enable pam_ftp.so.

# 验证虚拟用户

auth    sufficient      /lib/x86_64-linux-gnu/security/pam_userdb.so    db=/etc/vsftpd/vftpuser

account sufficient      /lib/x86_64-linux-gnu/security/pam_userdb.so    db=/etc/vsftpd/vftpuser

# Standard pam includes

# 验证本地用户

@include common-account

@include common-session

@include common-auth

auth    required        pam_shells.so

配置文件的话,本来就是存在的,需要做的只是要可以读懂配置文件内容,然后根据个人的一些需求进行修改

4. 修改VSFTPD的配置文件etc/vsftpd.conf文件

大部分配置正常来说不需要修改的,下面列出虚拟用户用到的一些必须的配置项

# 设置为vsftpd服务的宿主用户

nopriv_user=vsftpuser

# 指向PAM的vsftpd文件

pam_service_name=vsftpd

# 允许guest用户

guest_enable=YES

# 指向宿主用户

guest_username=virtualuser

# 允许虚拟用户的权限和本地用户权限一样

virtual_use_local_privs=YES

# 虚拟用户配置路径

user_config_dir=/etc/vsftpd/user_config

5. 最后根据不同用户进行个性化配置

vsftpd.conf中配置的user_config_dir配置的是虚拟用户的配置路径,根据配置找到对应的路径/etc/vsftpd/user_config,如果没有则创建;

然后在路径下根据之前在虚拟用户数据库配置文件vftpuser.txt中定义的用户名来创建对应的配置文件,比如之前定义的用户名为chris,那么这里创建的用户配置文件全路径为/etc/vsftpd/user_config/chris

用户的主要配置内容如下:

# 虚拟用户是否和本地用户拥有同样的权限

virtual_use_local_privs=YES

# 用户登入FTP时的初始路径

local_root=/home/ftp

# 是否可写

write_enable=YES

# 虚拟用户只读

anon_world_readable_only=NO

# 虚拟用户是否可以上传文件

 anon_upload_enable=YES

 下面是一些配置项以及相关的作用:

设置是否启用chroot_list_file配置项指定的用户列表文件。默认值为NO

chroot_list_enable=YES/NO(NO)

用于指定用户列表文件,该文件用于控制哪些用户可以切换到用户家目录的上级目录

chroot_list_file=/etc/vsftpd.chroot_list

用于指定用户列表文件中的用户是否允许切换到上级目录。默认值为NO

chroot_local_user=YES/NO(NO)

通过搭配能实现以下几种效果:

a.  当chroot_list_enable=YES,chroot_local_user=YES时,在/etc/vsftpd.chroot_list文件中列出的用户,可以切换到其他目录;未在文件中列出的用户,不能切换到其他目录

b.  当chroot_list_enable=YES,chroot_local_user=NO时,在/etc/vsftpd.chroot_list文件中列出的用户,不能切换到其他目录;未在文件中列出的用户,可以切换到其他目录

c.  当chroot_list_enable=NO,chroot_local_user=YES时,所有的用户均不能切换到其他目录

d.  当chroot_list_enable=NO,chroot_local_user=NO时,所有的用户均可以切换到其他目录

 virtual_use_local_privs参数:

a.  当 virtual_use_local_privs=YES时,虚拟用户和本地用户有相同的权限

b.  当virtual_use_local_privs=NO 时,虚拟用户和匿名用户有相同的权限,默认是NO

c.  当virtual_use_local_privs=YES,write_enable=YES时,虚拟用户具有写权限(上传、下载、删除、重命名)

d.  当 virtual_use_local_privs=NO,write_enable=YES,anon_world_readable_only=YES,anon_upload_enable=YES 时,虚拟用户不能浏览目录,只能上传文件,无其他权限

e.  当 virtual_use_local_privs=NO,write_enable=YES,anon_world_readable_only=NO,anon_upload_enable=NO 时,虚拟用户只能下载文件,无其他权限

f.  当 virtual_use_local_privs=NO,write_enable=YES,anon_world_readable_only=NO,anon_upload_enable=YES 时,虚拟用户只能上传和下载文件,无其他权限

g.  当 virtual_use_local_privs=NO,write_enable=YES,anon_world_readable_only=NO,anon_mkdir_write_enable=YES 时,虚拟用户只能下载文件和创建文件夹,无其他权限

h.  当 virtual_use_local_privs=NO,write_enable=YES,anon_world_readable_only=NO,anon_other_write_enable=YES 时,虚拟用户只能下载、删除和重命名文件,无其他权

allow_writeable_chroot=YES  解决 500 OOPS: vsftpd: refusing to run with writable root inside chroot ()

这些配置可以选择配置到/etc/vsftpd/user_config路径下,也可以选择配置到/etc/vsftpd.conf文件中,区别是一个针对单个用户,一个针对所有用户,所以可以根据需要自己进行判断和选择。

所有配置完成后重启即可。

猜你喜欢

转载自xielongemail.iteye.com/blog/2301954