赞
踩
- 差异非常大
- ftp相当于一种网络协议,可运行在不同操作系统,默认使用21端口和20端口,明文传输且不稳定
- sftp基于ssh,默认使用22端口,Linux自带,加密传输且稳定
- vsftpd是用于配置ftp,与sftp无关
- sftp无需配置,相当于ssh远程连接,本地用户使用
sftp user@XX.XX.XX.XX
即可
yum install -y vsftpd* ftp*
systemctl start vsftpd
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可访问
默认访问目录/home/ftpuser
可访问其他目录
新增本地用户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可访问
仅可访问目录/var/ftp
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
成功可根据情况注释
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
安全增强模块,根据情况修改
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
默认ipv6,可修改为ipv4配置
listen=YES
listen_ipv6=NO
确认用户账密无误
网上的pam_service_name=vsftpd
方法无效
查看/etc/pam.d/vsftpd
文件,对以下两条要求进行排查,我的用户是/sbin/nologin
,不在/etc/shells
范围内。
- auth required pam_shells.so: 仅允许用户的shell是 /etc/shells文件内的shell,才能登录
- auth required pam_listfile.so item=user sense=deny file=/etc/ftpusers onerr=succeed:/etc/ftpusers 中的用户禁止登陆
[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()
,见下条
原因:安装的最新版本,增加了对配置错误的强制检查,要求根目录不可写
Add stronger checks for the configuration error of running with a
writeable root directory inside a chroot(). This may bite people who
carelessly turned on chroot_local_user but such is life.
allow_writeable_chroot=YES
ftptest
用户根目录不可写chmod a-w ftptest
描述:本机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
描述:内网正常,外网登陆成功但执行其他命令失败
原因:防火墙添加端口后,未firewall-cmd --reload
使其生效
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。