VSFTP 配置用户名密码方式访问[测试通过]
实例 :公司内部现在有一台 FTP 和 WEB 服务器,FTP 的功能主要用于维护公司的网站内容,包括上传文件、创建目录、更新网页等等。公司现有两个部门负责维护任务,他们分别使用 team1 和 team2 帐号进行管理。先要求仅允许 team1 和 team2 帐号登录 FTP 服务器,但不能登录本地系统,并将这两个帐号的根目录限制为/var/www/html,不能进入该目录以外的任何目录。 ftp和www web服务器相结合。
www web 服务器根目录:/var/www/html
只允许:team1 和 team2 两用户可以上传,vsftp 禁止匿名。
分析:
将 FTP 和 WEB 服务器做在一起是企业经常采用的方法,这样方便实现对网站的维护,为了增强安
全性,首先需要使用仅允许本地用户访问,并禁止匿名用户登录。其次使用chroot功能将team1和
team2锁定在/var/www/html目录下。如果需要删除文件则还需要注意本地权限。
解决方案:
(1)建立维护网站内容的 ftp帐号 team1和 team2并禁止本地登录,然后设置其密码。
# useradd -s /sbin/nologin team1 #创建 team1 用户,并禁止登录系统。
# useradd -s /sbin/nologin team2 #创建 team2 用户,并禁止登录系统。
# echo "123456" | passwd --stdin team1 #设置 team1 用户密码。
Changing password for user team1.
passwd: all authentication tokens updated successfully.
# echo "123456" | passwd --stdin team2 #设置 team2 用户密码。
Changing password for user team2.
passwd: all authentication tokens updated successfully.
(2)配置 vsftpd.conf 主配置文件并作相应修改
#yum install -y vsftpd
# cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak #备份的 FTP 配置文件,以便需要还原时覆盖当前的 FTP 配置文件。
# vim /etc/vsftpd/vsftpd.conf #编辑 FTP 配置文件,修改如下内容:(未提及内容保持不变)
anonymous_enable=NO #禁止匿名用户登录 local_enable=YES #允许本地用户登录 local_root=/var/www/html #新增配置,设置本地用户的根目录为/var/www/html 。 chroot_list_enable=YES #取消#注释,激活 chroot 功能。 chroot_list_file=/etc/vsftpd/chroot_list #取消#注释,设置锁定用户在根目录中的列表文件。此文件存放要锁定的用户名。 allow_writeable_chroot=YES #新增配置,允许锁定的用户有写的权限。
修改完成后保存并退出。
(3)建立/etc/vsftpd/chroot_list文件,添加 team1和 team2帐号
# touch /etc/vsftpd/chroot_list #创建 chroot_list 文件。
# ll !$
ll /etc/vsftpd/chroot_list
-rw-r--r-- 1 root root 0 Nov 10 17:08 /etc/vsftpd/chroot_list
# vim /etc/vsftpd/chroot_list #写入以下内容,一行一个用户名。
team1
team2
(4)创建目录修改本地权限
# mkdir -p /var/www/html/ #创建/var/www/html/目录
# ll -d /var/www/html/ #以长格式查看/var/www/html/目录权限,-d 选项用于查看目录本身,不包含目录下的文件。
drwxr-xr-x. 2 root root 4096 Oct 6 2011 /var/www/html/
# chmod -R o+w /var/www/html/ #赋予/var/www/html/目录和该目录下所有文件的写权限。
# ll -d /var/www/html/ #以长格式查看/var/www/html/目录权限
drwxr-xrwx. 2 root root 4096 Oct 6 2011 /var/www/html/
(5)重启 vsftpd 服务使配置生效
# systemctl restart vsftpd
# cp /etc/passwd /var/www/html/ #随意复制一个文件放到FTP根目录下,便于测试。
(6)测试
客户端用 lftp 登陆查看:
# lftp 192.168.1.63 -u team1,123456
lftp [email protected]:~> ls
-rw-r--r-- 1 0 0 1384 Jul 30 01:56 passwd
lftp [email protected]:/>
能列出ftp目录中文件,说明配置成功!
补充:大家和我一样照着做,但是测试时是不是提示却是这样的结果:
[root@CentOS7-63 ~]# lftp 192.168.3.63 -u team1,123456
lftp [email protected]:~> ls
ls: 登录失败: 530 Login incorrect.
lftp [email protected]:~>
分析一下,这个是提示530,账号密码错误,但是创建时候没错呀!应该是哪里没配置对。
经过学神老师的提醒,让我查一下配置文件中是不是有pam_service_name=vsftpd
让我注释去掉,去编辑/etc/pam.d/vsftpd这个PAM认证文件修改认证顺序!
解决如下:
vim /etc/pam.d/vsftpd
查找这行,将这行注释掉
auth required pam_shells.so
修改后的样子:
#auth required pam_shells.so
再次重启vsftpd服务试试,是不是可以了!