vsftpd(Very Secure FTP Daemon)是一个在Linux系统上常用的FTP软件。
# 在CentOS上安装vsftpd
sudo yum install vsftpd
安装完成之后,可以直接通过匿名的方式进行登录。但是这样不安全,比较安全的登录方式是,通过虚拟用户登录ftp 并进行上传下载。
- 创建用来登录ftp的虚拟用户。
useradd -s /sbin/nologin 虚拟用户名
useradd:是 linux系统添加用户的命令-s:指定用户的登录shell。/sbin/nologin: 禁止用户登录(禁止登录Linux,但是不会影响虚拟用户登录ftp)
- 创建几个用来真正登录ftp使用的账号密码,这几个账号并不在Linux系统中创建。
#创建一个文件,这里保存用来登录ftp的账号
vim /etc/vsftpd/virtualUser.txt
ftpUser1 #账号和密码是成对的,上一行是账号,下一行就是这个账号的密码
密码1
ftpUser2
密码2
ftpUser3
密码3
- 通过 db_load 这个命令,把刚才保存ftp登录帐号和密码的文件,生成数据库格式的文件。
db_load -T -t hash -f /etc/vsftpd/virtualUser.txt /etc/vsftpd/virtualUser.db
db_load:命令的作用是将用户信息文件转换为数据库并使用 hash 加密,如果需要保存虚拟帐号和密码的文本文件且不让被系统帐号直接调用,我们就需要使用db_load 命令生成db数据库。
-T:允许应用程序能够将文本文件转译载入进数据库。由于我们之后是将虚拟用户的信息以文件方式存储在文件里的,为了让vsftpd这个应用程序能够通过文本来载入用户数据,必须要使用这个选项。如果指定了选项-T,那么一定要追跟子选项-t
-t:追加在在-T选项后,用来指定转译载入的数据库类型。-t可以指定的数据类型有(btree、hash、queue和recon数据库。)
-f: 指定源文件
/etc/vsftpd/virtualUser.db: 这个是你要生成的数据库文件
ps : 在生成了数据库文件(virtualUser.db)之后,可以将之前的用户文件(virtualUser.txt)删除,或者保存在安全位置
- pam 验证
PAM(Pluggable Authentication Modules,插入式验证模块),它提供了一连串的验证机制,只要用户将验证阶段的需求告知PAM以后,PAM就能够返回用户验证的结果(成功或是失败)。PAM是一套验证的机制,可以提供给其他程序调用,
你使用的任何程序都可以使用PAM来进行验证
vim /etc/pam.d/vsftpd #在 /etc/pam.d/ 这个目录下有一个用来验证 vsftpd 的配置文件,打开并编辑它
原文件中的内容不需要,只写入这两条
auth sufficient /usr/lib64/security/pam_userdb.so db=/etc/vsftpd/virtualUser
account sufficient /usr/lib64/security/pam_userdb.so db=/etc/vsftpd/virtualUser
auth: authentication (认证)的缩写,用来检验用户的身份,这种类别通常是需要密码来检验的, 后续接的模块(/usr/lib64/security/pam_userdb.so) 是用来检验用户身份的。
account: (账号) 用于进行authorization(授权),主要检验用户是否具有正确的权限。
sufficient: 验证成功就立刻返回success给原程序,并终止后续的验证流程。
pam_userdb.so: 模块的主要作用是通过一个轻量级的Berkeley数据库来保存用户和口令信息。这样用户认证将通过该数据库进行,而不是传统的/etc/passwd和/etc/shadow或者其它的一些基于LDAP或者NIS等类型的网络认证。所以存在于Berkeley数据库中的用户也称为虚拟用户。ps:
pam_userdb.so,使用之前先确认一下这个文件的路径,可以先搜一下
find / -name pam_userdb.so
db=/etc/vsftpd/virtualUser: 这个就是在第3步中生成的那个数据库文件,需要注意这里不要加文件后缀
- 给每个用户添加单独的配置文件
mkdir /etc/vsftpd/virtualUserConf # 创建一个目录,保存用户的配置文件
vim /etc/vsftpd/ftpuser1 # 编写用户 ftpuser1 的配置文件
local_root=/ftpdata/ftpuser1 # 这个是用户的根目录,就是ftpuser1这个用户登录ftp后,只能在这个目录下活动。
# 如果不做目录限制的话,让用户在你的系统里随意走动,可能会产生危险后果。
write_enable=YES # 启用写入功能
allow_writeable_chroot=YES # 将一个用户放到该用户可写的目录中,用户都将拥有chroot权限。
ps : 用户的根目录建在什么位置依据个人需求(local_root=/ftpdata/ftpuser1)。
ftpuser2,ftpuser3: 这两个用户的配置文件可以根据个人需求编写,但是要写在
/etc/vsftpd/virtualUserConf这个放用户配置文件目录中,配置文件和用户名是对应的关系,用户叫什么名字,配置文件就叫什么名字。
- 修改 vsftpd 的配置文件
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
chroot_local_user=YES
local_root=/var/ftp
chroot_list_enable=YES
guest_enable=YES # 开启虚拟用户身份映射
guest_username=虚拟用户名 # 第1步中创建的那个用户名
user_config_dir=/etc/vsftpd/virtualUserConf # 用户配置文件目录
virtual_use_local_privs=YES # 虚拟用户和本地用户有相同的权限
chroot_list_file=/etc/vsftpd/chroot_list
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
guest_enable: 开启虚拟用户身份映射,就是将第 2 步中,写在文件中的那几个用户,映射到第 1 步,系统中创建的那个用户useradd -s /sbin/nologin 虚拟用户名ps: 修改完配置文件,要重新启动 vsftpd 服务
systemctl restart vsftpd.serivce现在可以用
ftpuser1,ftpuser2,ftpuser3登录了。
ps:如果发现用户登录了ftp后,可以下载,但是不能上传,要检查一下用户的根目录local_root=/ftpdata/ftpuser1权限
这里是将目录所有者改成第1步中创建的那个系统用户
chown 虚拟用户名 /ftpdata/ftpuser1