基于虚拟用户的FTP服务


基于虚拟用户的FTP服务

建立虚拟用户的账号数据库

1.创建文本格式的用户名、密码列表

奇数行为用户名,偶数行尾上一上中用户所对应的密码

vi /etc/vsftpd/vusers.list
mike
123
john
456

2.创建Berkeley DB格式的数据库文件

cd /etc/vsftpd/
db_load -T -t hash -f vusers.list vusers.db
file vusers.db  //查看转换后的文件类型
  • -f 选项用于指定数据源文件

  • -T选项允许非Berkeley DB的应用程序使用从文本格式转换的DB数据文件

  • -t hash 选项指定读取数据文件的基本方法。

为了提高虚拟用户账号文件的安全性,应将文件权限设置为600,以避免数据外泄。

chmod 600 /etc/vsftpd/vusers.*
ls -lh /etc/vsftpd/vusers.*

3.添加虚拟用户的映射账号、创建FTP根目录

使用FTP目录设为/var/ftproot/,映射账号的名称为virtual

useradd -d /var/ftproot -s /sbin/nologin virtual
chmod 755 /var/ftproot //调整权限以允许浏览目录

为vsftpd服务添加虚拟用户支持

1.为虚拟用户建立PAM认证文件

vi /etc/pam.d/vsftpd.vu

auth required pam_userdb.so db=/etc/vsftpd/vusers

account required pam_userdb.so db=/etc/vsftpd/vusers

上述PAM配置内容中,通过“db=/etc/vsftpd/vusers”参数指定了要使用的虚拟用户数据库文件位置(省略了.db扩展名),即对应为/etc/vsftpd/vusers.db文件

2.修改vsftpd配置,添加虚拟用户支持

local_enable=YES  //需映射本地用户,所以启用此项
write_enable=YES  //启用上传写入支持
anon_umask=022    //指定上传权限掩码
guest_enable=YES   //启用用户映射功能
guest_username=virtual //指定映射的系统用户名称
pam_service _name=vsftpd.vu  //指定新的PAM认证文件

在vsftpd服务中,虚拟用户被默认作为匿名用户进行处理以降低权限,因此对应的配置项通常以anon_开头。 例如在设置虚拟用户所上传文件的默认权限掩码时,应采用配置项为annon_umask而不是local_umask

3.为不同的虚拟用户建立独立的配置文件

为FTP用户启用独立配置文件,需要修改vsftpd.conf配置文件,添加“user_config_dir”配置项。例如,以下设置表示从/etc/vsftpd/vusers_dir、目录中查找每个用户的独立配置文件

vi /etc/vsftpd/vsftpd.conf
user_config_dir=/etc/vsftpd/vusers_dir

有了上述配置以后,就可以在/etc/vsftpd/vsuers_dir/目录中为每个虚拟用户分别建立配置文件了。例如,若要使虚拟用户john能够上传文件,创建目录,而用户mike仍然只有默认的下载权限,可以执行以下操作

mkdir /etc/vsftpd/vusers_dir/  //创建用户配置文件夹
cd /etc/vsftpd/vusers_dir/
vi john  //为用户john建立独立的配置文件
anon_upload_enable=YES
anon_mkdir_write_enable=YES

touch mike   //为其他用户创建空的配置文件
service vsftpd reload //重新加载配置

在vsftpd.conf文件中启用了“user_config_dir”配置项以后,应该为每一个虚拟用户都建立一个单独的配置文件(可以是空文件),否则该用户可能会无法登陆。在每个用户的独立配置文件中,可以添加新的配置项来限制访问权限,下载速率等。

有了虚拟用户数据文件,并为vsftpd正确添加了虚拟用户支持以后,就可以重新加载vsftpd服务程序了。用户可以使用FTP客户程序访问该FTP服务器,以虚拟用户账号进行测试。根据之前的配置过程,至少应确认一下结果。

  • 用户Mike可以登录,并能够正常浏览、下载文件,但不能上传文件
  • 用户john可以登录,且可以正常浏览、下载文件,也可以上传文件。
  • Linux主机中的系统用户将无法登录

results matching ""

    No results matching ""