ftp与sftp
安装vsftpd和ftp
- ftp用于测试
yum install -y vsftpd* ftp*
- 启动
systemctl start vsftpd
- 防火墙开放21端口
firewall-cmd --zone=public --add-port=21/tcp --permanent firewall-cmd --reload firewall-cmd --zone=public --list-ports
- 测试
默认配置下,匿名用户登录,密码为空systemctl status vsftpd netstat -ntlp | grep vsftpd ftp xx.xx.xx.xx
本地用户登录-不限制访问目录
-
新增本地用户
ftpuser
useradd -d /home/ftpuser -s /bin/bash ftpuser passwd ftpuser
-
修改配置
/etc/vsftpd/vsftpd.conf
默认配置如下anonymous_enable=yes local_enable=yes write_enable=yes local_umask=022 dirmessage_enable=yes xferlog_enable=yes connect_from_port_20=yes xferlog_std_format=yes listen=no listen_ipv6=yes pam_service_name=vsftpd userlist_enable=yes tcp_wrappers=yes
修改后
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 listen=no listen_ipv6=yes pam_service_name=vsftpd userlist_enable=yes tcp_wrappers=yes # yes,user_list用户为黑名单,禁止登录;no则为白名单,可登录 userlist_deny=yes # chroot_list本地用户可登录ftp名单,且本地用户需要在/etc/shells范围内或者修改/etc/pam.d/vsftpd的pam限制 chroot_list_enable=yes chroot_list_file=/etc/vsftpd/chroot_list # 设置根目录可写 allow_writeable_chroot=yes
-
在
/etc/vsftpd/
下新建chroot_list
文件,然后写入本地用户ftpuser
,一行代表一个用户 -
重启
systemctl restart vsftpd
-
本机测试
ftp xx.xx.xx.xx
成功
本地用户登录-限制访问目录
- 新增本地用户
ftptest
useradd -d /var/ftp -s /sbin/nologin ftptest passwd ftptest chmod -r 777 /var/ftp
- 修改
/etc/pam.d/vsftpd
,使用户可通过pam验证[root@localhost vsftpd]# vi /etc/pam.d/vsftpd #%pam-1.0 session optional pam_keyinit.so force revoke auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed #auth required pam_shells.so auth include password-auth account include password-auth session required pam_loginuid.so session include password-auth
- 修改配置
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 listen=no listen_ipv6=yes pam_service_name=vsftpd userlist_enable=yes tcp_wrappers=yes # yes,user_list用户为黑名单,禁止登录;no则为白名单,可登录 userlist_deny=yes # 限制访问目录本地用户仅可访问/var/ftp chroot_local_user=yes local_root=/var/ftp # 设置根目录可写 allow_writeable_chroot=yes
- 重启
systemctl restart vsftpd
- 本机测试
ftp xx.xx.xx.xx
成功
有可能影响连接的问题
pam认证
auth required pam_shells.so
: 仅允许用户的shell是 /etc/shells文件内的shell,才能登录auth required pam_listfile.so
:/etc/ftpusers 中的用户禁止登陆
# cat /etc/pam.d/vsftpd
#%pam-1.0
session optional pam_keyinit.so force revoke
auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed
auth required pam_shells.so
auth include password-auth
account include password-auth
session required pam_loginuid.so
session include password-auth
selinux策略
ftpd_full_access
:影响创建新目录等tftp_home_dir
:影响ftp根目录访问等
setsebool -p tftp_home_dir 1
setsebool -p ftpd_full_access 1
systemctl restart vsftpd
# sestatus -b | grep ftp
ftpd_anon_write off
ftpd_connect_all_unreserved off
ftpd_connect_db off
ftpd_full_access on
ftpd_use_cifs off
ftpd_use_fusefs off
ftpd_use_nfs off
ftpd_use_passive_mode off
httpd_can_connect_ftp off
httpd_enable_ftp_server off
tftp_anon_write off
tftp_home_dir on
被动模式
pasv_enable=yes
pasv_min_port=31000
pasv_max_port=31999
防火墙
firewall-cmd --zone=public --add-port=31000-31999/tcp --permanent
firewall-cmd --reload
firewall-cmd --zone=public --list-ports
ipv4和ipv6
默认ipv6,可修改为ipv4配置
listen=yes
listen_ipv6=no
报错
1、 530 login incorrect
-
确认用户账密无误
-
网上的
pam_service_name=vsftpd
方法无效 -
查看
/etc/pam.d/vsftpd
文件,对以下两条要求进行排查,我的用户是/sbin/nologin
,不在/etc/shells
范围内。[root@localhost vsftpd]# cat /etc/pam.d/vsftpd #%pam-1.0 session optional pam_keyinit.so force revoke auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed auth required pam_shells.so auth include password-auth account include password-auth session required pam_loginuid.so session include password-auth [root@localhost vsftpd]# cat /etc/shells /bin/sh /bin/bash /usr/bin/sh /usr/bin/bash
- 方案一:可以修改
/etc/pam.d/vsftpd
注释掉auth required pam_shells.so
- 方案二:修改用户登录属性,
usermod -s /bin/bash ftptest
- 方案一:可以修改
-
重启验证,该报错解决,但登录时出现先报错
500 oops: vsftpd: refusing to run with writable root inside chroot()
,见下条
2、500 oops: vsftpd: refusing to run with writable root inside chroot()
原因:安装的最新版本,增加了对配置错误的强制检查,要求根目录不可写
- 方案一:配置文件设置
allow_writeable_chroot=yes
- 方案二:设置
ftptest
用户根目录不可写chmod a-w ftptest
3、227 entering passive mode (10,1,58,5,242,166). ftp: connect: 没有到主机的路由
描述:本机ftp测试没问题;内网其他服务器ftp登陆成功,但执行ls等命令报错
原因:被动模式端口问题
- 方案一:登录后,输入
passive
,关掉被动模式ftp> passive passive mode off. ftp> ls 200 port command successful. consider using pasv. 150 here comes the directory listing. drwxrwxrwx 2 0 0 6 jun 09 2021 pub drwxr-xr-x 2 1001 1001 6 feb 20 06:05 test 226 directory send ok.
- 方案二:配置文件设置被动模式,并开放防火墙端口
31000-31999
配置
防火墙pasv_enable=yes pasv_min_port=31000 pasv_max_port=31999
firewall-cmd --zone=public --add-port=31000-31999/tcp --permanent firewall-cmd --reload firewall-cmd --zone=public --list-ports
4、425 failed to establish connection. error eelftpserror: control channel transfer error 114690
描述:内网正常,外网登陆成功但执行其他命令失败
原因:防火墙添加端口后,未firewall-cmd --reload
使其生效
发表评论