本文使用vsftp来部署ftp服务,要求如下:
1、使用ftp用户登录指定的家目录,该ftp用户禁止本地登录,禁止访问非家目录外其他目录;
2、不同用户登录不同家目录;
具体操作配置如下:
1、安装vsftp的rpm包
# yum install vsftpd.x86_64
2、创建ftp用户
允许登录ftp服务、禁止登录本地、指定家目录
mkdir -p /home/ftp ##先有ftp目录
###创建ftpuser1、指定家目录为/home/ftp/ftpuser1,禁止登录本地;
useradd -d /home/ftp/ftpuser1 -s /sbin/nologin ftpuser1
echo ftpuser1 | passwd --stdin ftpuser1
###创建smbuser1、指定家目录为/home/ftp/smbuser1,禁止登录本地;
useradd -d /home/ftp/smbuser1 -s /sbin/nologin smbuser1
echo smbuser1 | passwd --stdin smbuser1
3、修改配置
首先查看默认配置文件的有效行,然后有针对性的修改;
#grep -Ev '^$|#' /etc/vsftpd/vsftpd.conf
#####目标vsftp配置文件: grep -Ev '^$|#' /etc/vsftpd/vsftpd.conf
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
xferlog_std_format=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
listen=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
pasv_enable=YES
pasv_min_port=10923
pasv_max_port=10958
use_localtime=YES
需要调整的操作
##禁止匿名用户登录
anonymous_enable=NO ##把原来的YES改为NO
##打开注释
chroot_list_enable=YES #打开注释
chroot_list_file=/etc/vsftpd/chroot_list ##可指定
##打开ipv4监听
listen=YES ##打开监听
##删除或注释掉无用的配置项
connect_from_port_20=YES ##删除或注释
listen_ipv6=YES ##删除或注释
##增加其他附加功能,可不用加 !!!
pasv_enable=YES
pasv_min_port=10923
pasv_max_port=10958
use_localtime=YES
前后比对:
动作 原配置 目标配置
#修改 anonymous_enable=YES anonymous_enable=NO
#原样 local_enable=YES local_enable=YES
#原样 write_enable=YES write_enable=YES
#原样 local_umask=022 local_umask=022
#原样 dirmessage_enable=YES dirmessage_enable=YES
#原样 xferlog_enable=YES xferlog_enable=YES
#原样 xferlog_std_format=YES xferlog_std_format=YES
#新增 chroot_list_enable=YES
#新增 chroot_list_file=/etc/vsftpd/chroot_list
#修改 listen=YES listen=NO
#原样 pam_service_name=vsftpd pam_service_name=vsftpd
#原样 userlist_enable=YES userlist_enable=YES
#原样 tcp_wrappers=YES tcp_wrappers=YES
#删除 listen_ipv6=YES
#删除 connect_from_port_20=YES
#新增 pasv_enable=YES
#新增 pasv_min_port=10923
#新增 pasv_max_port=10958
#新增 use_localtime=YES
4、ftp用户设置
添加用户到配置中指定的文件,允许以下用户登录ftp。
#cat /etc/vsftpd/chroot_list
ftpuser1
smbuser1
5、保存配置并重启服务
/bin/systemctl restart vsftpd.service
systemctl status vsftpd.service
6、验证
使用浏览器登录
命令行下ftp客户端测试
5、继续配置,解决无法登录问题
问题现象描述:
##添加FTP新用户解释器为/sbin/nologin,无法登陆FTP服务,提示:
530 Login incorrect.
Login failed.
原因:vsftpd默认会检查用户的shell,如果用户的shell在/etc/shells没有记录,则无法登陆ftp
解决办法:在/etc/shells文件里面添加用户的shell(解释器)
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash
/bin/tcsh
/bin/csh
/sbin/nologin ###添加
补充:/etc/shells文件的作用
1.系统某些服务在运行过程中,回去检查用户使用的shells,而这些shell查询就是借助/etc/shells这个文件。
2.修改该文件不会影响用户登陆服务器主机的权限,该文件提供给解释器给系统的某些服务判断一个用户是否是有效用户,例如创建的ftpuser1用户解释器为/sbin/nologin,本地系统的/etc/shells文件里面没有添加/sbin/nologin,所以我创建的ftpuser1用户登陆不了ftp服务,后面将/sbin/nologin添加进/etc/shells文件,则问题解决。
6、继续配置,解决权限问题
登录提示:500 OOPS: vsftpd: refusing to run with writable root inside chroot()