前言
今天折腾了很久,各种各样的问题出现,特此记录一下,以防再次翻车
第一步:安装vsftpd
yum install vsftpd lftp libdb-utils -y
lftp:是连接lftp的工具
libdb-utils:后面制作虚拟用户数据库需要的工具
libdb-utils:后面制作虚拟用户数据库需要的工具
至此,vsftpd安装完毕
实现虚拟用户需要以下几个步骤:
- 建立虚拟用户数据库文件并添加pam认证机制
- 创建ftp根目录及其虚拟用户映射的系统用户
- 修改vsftpd的配置文件
- 为虚拟用户创建权限文件
- 启用服务
一:创建虚拟用户的数据库文件
~]# cd /etc/vsftpd
~]# vim vusers_list
添加以下用户(奇数行为用户名,偶数行为密码)
user1
123456
user2
456789
:wq 保存文件,接着把该文件转换为数据库文件
~]# db_load -T -t hash -f vusers_list vusers.db
为安全起见修改数据库文件的权限
~]# chmod 600 vusers.db
用户的数据库文件就制作完成了,下面添加pam机制,配置文件在/etc/pam.d/
~]# cd /etc/pam.d
~]# vim vsftpd.vu
键入以下内容
auth required pam_userdb.so db=/etc/vsftpd/vusers
#认证双方密码必须通过pam,db为用户数据库文件路径,不需要加扩展名
account required pam_userdb.so db=/etc/vsftpd/vusers
#账户信息
:wq保存
二:创建ftp根目录以及映射的系统用户
创建ftp根目录,本文演示的根目录为/var/ftproot
~]# mkdir /var/ftproot
创建映射的系统用户
~]# useradd -s /sbin/nologin
修改用户的家目录
~]# vim /etc/passwd
修改倒数第二个字段为: /var/ftproot
~]# chown -R ftpadmin.ftpadmin /var/ftproot
修改用户家目录属组,属主为ftp映射的系统用户
三:修改vsftpd的配置文件
~]# vim /etc/vsftpd/vsftpd.conf
主要修改以下几项,没有的就新增
anonymous_enable=NO
#禁止匿名用户登录
anon_mkdir_write_enable=NO
#禁止匿名用户的写权限
pam_service_name=vsftpd.vu
#修改为刚刚我们新建的pam文件"vsftpd.vu"
guest_enable=YES
#启用虚拟用户
guest_username=ftpadmin
#虚拟用户映射的系统用户,刚刚创建的系统用户 "ftpadmin"
user_config_dir=/etc/vsftpd/vuser.d
#虚拟用户的配置文件
allow_writeable_chroot=YES
#允许用户在其主目录有写权限,非常重要,必须有
reverse_lookup_enable=NO
#禁用dns反解,不然很慢
chroot_local_user=YES
#禁止本地用户离开自己的主目录
:wq保存
四:为虚拟用户提供权限文件
~]# cd /etc/vsftpd
进入vsftpd的配置文件目录
~]# mkdir vuser.d && cd vuser.d
进入vuser.d目录
~]# vim user1
这里的配置文件为每个用户一个文件,且文件名和用户名一致
给用户user1写入权限
local_root=/var/ftproot/admin
#指定用户的家目录
anon_mkdir_write_enable=YES
#写权限
anon_upload_enable=YES
#上传权限
:wq保存退出
~]# vim user2
不给用户user2写入权限
anon_mkdir_write_enable=NO
五:启动服务
~]# systemctl start vsftpd.service
启动服务
~]# systemctl enable vsftpd.service
开机启动服务
在centos 7上出现让博主很迷的情况,登录ftp后可以看到文件夹,可创建文件夹,上传文件,但是看不到上传的文件,只能看到文件夹。
后来改变ftproot的权限为777以后就可以看到文件了,然后再把权限改回755,文件也能正常显示了。博主不知道具体原因
后来改变ftproot的权限为777以后就可以看到文件了,然后再把权限改回755,文件也能正常显示了。博主不知道具体原因
注意:新版本的vsftpd安全限制较高,必须加入下面这个配置:
allow_writeable_chroot=YES
allow_writeable_chroot=YES
END