本文共 3936 字,大约阅读时间需要 13 分钟。
原理讲解,vsftpd网上教程一大堆,但很多同学一说虚拟用户还是有点不解,这里我来抛砖引玉和大家分享,VSFTPD利用了PAM登陆认证模块,但是确没有直接使用系统的用户,而是用自己的用户数据库,但由于vsftpd必须要存取操作系统上的文件,所以又离不开系统那个用户,那么就来个映射,不用系统直接登陆,只需要用自己的用户登陆之后在和系统用户做个映射,这样,就能安全很多了。
应用场景:1,网站虚拟主机配合磁盘配额可以用来管理不同的用户;2,企业用户提供文件共享;3,运维中的原创备份FTP服务器端。 下面是配置详细过程: 一,安装yum -y install vsftpd db4-utils
复制代码
二,配置cd /etc/vsftpd/
vi ftpuser.txt
复制代码
输入FTP用户名和密码ftpuser1
123456
ftpuser2
654321
复制代码
注意:奇数行为用户名,偶数行为密码
生成FTP账户的数据库文件db_load -T -t hash -f ./ftpuser.txt ./ftplogin.db
chmod 600 ./ftplogin.db
复制代码
生成和虚拟用户数据库相关联的PAM文件,因为FTP目录的权限需要根据系统用户来设定 cd /etc/pam.d/ vi vsftpd.pamauth required /lib/security/pam_userdb.so db=/etc/vsftpd/ftplogin
account required /lib/security/pam_userdb.so db=/etc/vsftpd/ftplogin
复制代码
注意:是ftplogin而不是ftplogin.db
建立虚拟用户,设置该用户所要访问的目录,并设置虚拟用户访问的权限:useradd -d /data/ftpdata virtual_user
chmod 700 /data/ftpdata
复制代码
经过该步骤的设置,/data/ftpdata就是virtual_user用户的主目录,该用户也是ftpdata目录的拥有者。除root用户之外,只有该用户具有对该目录的读、写和执行的权限。
配置vsftpd,使之启用虚拟用户 vi /etc/vsftpd/vsftpd.conf 输入:anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
#anon_upload_enable=NO
#anon_mkdir_write_enable=NO
dirmessage_enable=NO
xferlog_enable=YES
connect_from_port_20=YES
#chown_uploads=YES
#chown_username=root
#xferlog_file=/var/log/xferlog
xferlog_std_format=YES
idle_session_timeout=600
data_connection_timeout=36000
#nopriv_user=ftpsecure
#async_abor_enable=YES
#ascii_upload_enable=YES
#ascii_download_enable=YES
#ftpd_banner=Welcome to blah FTP service.
#deny_email_enable=YES
#banned_email_file=/etc/vsftpd/banned_emails
#chroot_list_enable=YES
#chroot_list_file=/etc/vsftpd/chroot_list
#ls_recurse_enable=YES
listen=YES
#listen_ipv6=YES
guest_enable=YES
guest_username=virtual_user
pam_service_name=vsftpd.pam
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
复制代码
其中:guest_enable=YES
guest_username=virtual_user
pam_service_name=vsftpd.pam
复制代码
guest_enable=YES:表示启用虚拟用户
guest_username=virtual_user:本地用户,就是虚拟用户要映射的本地用户,这个主要是用来设置本地文件系统的权限的 pam_service_name=vsftpd.pam:虚拟用户的认证用户注意,默认pam_service_name=vsftpd,要改过来,否则报“530 Login incorrect.” 这样的错误的哦 整个过程是:用户输入虚拟用户账户(ftpuser.txt这里设置的)------登陆服务器利用PAM模块认证------映射为本地用户virtual_user----以virtual_user用户的身份去存取virtual_user的根目录下的文件 登陆实验:ftp 127.0.0.1
Connected to 127.0.0.1 (127.0.0.1).
220 (vsFTPd 2.0.5)
Name (127.0.0.1:root): ftpuser1
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> dir
227 Entering Passive Mode (127,0,0,1,150,205)
150 Here comes the directory listing.
226 Transfer done (but failed to open directory).
ftp> pwd
257 "/"
ftp>
复制代码
OK,没有问题了,我用的账户其实在服务器里是不存在的,就算这个用户密码泄露,别人也无法直接登陆我的linux主机
三,权限配置 我们还可以对每个用户设置权限 vi /etc/vsftpd/vsftpd.conf 添加用户配置目录:user_config_dir=/etc/vsftpd/vsftpd_user_conf
复制代码
mkdir -p /etc/vsftpd/vsftpd_user_conf
cd /etc/vsftpd/vsftpd_user_conf 配置每个用户的控制信息 vi /etc/vsftpd/vsftpd_user_conf/ftpuser1 输入:write_enable=NO
anono_upload_enable=NO
复制代码
注意/etc/vsftpd/vsftpd_user_conf/ftpuser1这里的文件名和用户名必须相同哦
四,用户隔离 但是这里有个问题,当我有多个用户的时候ftpuser1 ftpuser2,那么这两个用户默认都在同一个目录,就是/data/ftpdata那我很多情况需要把用户隔离开来,例如我一台主机上有很多不同用户的网站,他们需要单独管理,企业用户也需要保护自己的隐私,原创备份服务器也有多中数据需要备份到不同的目录,所以,实现主目录隔离的虚拟用户才是终解决方案。下面就来看看如何解决这个问题了 接着上面,我们以ftpuser1为例 vi /etc/vsftpd/vsftpd_user_conf/ftpuser1 添加: local_root=/data/ftpdata/ftpuser1mkdir -p /data/ftpdata/ftpuser1 chown -R virtual_user:virtual_user /data/ftpdata/ftpuser1 其他用户同理 五,后期维护 这个算是建立好了,那以后还需要添加用户怎么办呢,步骤如下: 1.在ftpuser.txt中添加用户名和密码 2.运行如下命令,将用户名和密码添加到数据库中db_load -T -t hash -f ./ftpuser.txt ./ftplogin.db
复制代码
3.在vsftpd_user_conf文件夹下新建和用户名相同的文件,并在其中加入
vi /etc/vsftpd/vsftpd_user_conf/username
输入:
local_root=/data/ftpdata/username
复制代码
4.在/data/ftpdata中新建一个文件夹,与用户名相同
mkdir -p /data/ftpdata/username
chown -R virtual_user:virtual_user /data/ftpdata/username
复制代码
如何改用户名: 只需要修改下ftpuser.txt里面的密码行,然后执行db_load -T -t hash -f ./ftpuser.txt ./ftplogin.db
复制代码
即可,连重启都不需要,所以这里注意ftpuser.txt这个文件保护好,为了以后维护方面还是不要删除了吧
原创作品,转载务必保留出处: