目录:
1. 简介
2. 原理
2.1 主动模式
2.2 被动模式
3. 安装配置
3.1 安装部署
3.2 服务配置
3.3 用户配置
3.3.1 配置登录用户
4. 安全
4.1 防火墙
4.2 pam配置
5. 问题处理
5.1 530 Login incorrect
5.2 530 Permission denied
1. 简介
什么是FTP服务器呢,FTP全程为file transfer protocol,提供网络文件存储和下载等功能。是一个C/S架构。官网http://mina.apache.org/ftpserver-project/documentation.html,
2. 原理
FTP默认采用TCP协议,占用两个端口,分别是20和21,20号端口是用来传输数据的为数据通道,21号端口是用来传输指令的为控制通道。
2.1 主动模式
主动模式表示FTP客户端连接到FTP服务器21号端口,发送用户名和密码,客户端随机开放一个端口,发送port命令到FTP的server端,发送的内存主要是工作模式为主动模式,并且已经开放了端口,FTP server端会通过20号端口和客户端的端口进行数据交互。
image2.2 被动模式
被动模式是FTP客户端连接到21号端口,发送给server端用户名和密码,并且发送一个PASV的命令给FTP服务器,告诉服务端是采用被动连接模式,那么服务端在本地随机开放一个端口,然后将端口告诉客户端,客户端再连接服务器开放的端口进行数据传输。
image3. 安装配置
3.1 安装部署
FTP的安装包名称为vsftpd,官方镜像源就可以安装
yum install vsftpd
通过rpm进行安装的,文件位置如下,删除了部分文档类文件路径输出
[root@zhserver ~]$ rpm -ql vsftpd-3.0.2-28.el7.x86_64
/etc/logrotate.d/vsftpd
/etc/pam.d/vsftpd
/etc/vsftpd
/etc/vsftpd/ftpusers
/etc/vsftpd/user_list
/etc/vsftpd/vsftpd.conf
/etc/vsftpd/vsftpd_conf_migrate.sh
/usr/lib/systemd/system-generators/vsftpd-generator
/usr/lib/systemd/system/vsftpd.service
/usr/lib/systemd/system/vsftpd.target
/usr/lib/systemd/system/vsftpd@.service
/usr/sbin/vsftpd
/var/ftp
/var/ftp/pub
3.2 服务配置
查看vsftpd.conf配置
[root@zhserver vsftpd]$ cat /etc/vsftpd/vsftpd.conf | egrep -v "^#"
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 | YES/NO | 表示匿名用户,默认为YES,为了安全我们是不允许配置匿名用户登录的 |
local_enable | YES/NO | vsftpd服务器所在的系统用户可以登录vsftpd |
write_enable | YES/NO | 允许使用所有的FTP write命令 |
local_umask | 0XX | 匿名用户新增加文件的umask值,默认为022 |
anon_upload_enable | YES/NO | 匿名用户上传文件,为了安全我们设置为NO |
anon_mkdir_write_enable | YES/NO | 匿名用户创建文件夹,为了安全设置为NO |
dirmessage_enable | YES/NO | 远程用户在登录目录的时候,显示的信息 |
xferlog_enable | YES/NO | 在上传和下载的时候,是否产生日志,默认为YES |
connect_from_port_20 | YES/NO | 数据通道使用的端口,默认为20 |
xferlog_std_format | YES/NO | 记录日志使用标准的格式 |
chown_uploads | YES/NO | 匿名用户可以上传文件 |
chown_username=whoever | - | 除了root |
idle_session_timeout | 数字 | 不操作的超时时间,默认为600,为60s,登录后,一分钟不操作则60s后断开连接 |
data_connection_timeout | 数字 | 数据传输的超时时间,默认为120s,默认是注释的,没有超时时间 |
ftpd_banner | 字符串 | 登录ftp后的显示信息,比如:welcome |
userlist_enable | YES/NO | 允许userlist_file中文件的用户登录FTP服务器 |
tcp_wrappers | YES/NO | 支持访问控制,主要使用/etc/hosts.allow,/etc/hosts.deny |
chroot_local_user | YES/NO | 所有的 本地用户需要执行chroot,避免单一用户可以随意浏览目录 |
chroot_list_enable | YES/NO | 设置哪些用户需要执行chroot,用户文件在/etc/vsftpd/chroot_list,如果不存在需要创建 |
chroot_list_file | 目录路径 | chroot配置的路径 |
userlist_deny | YES/NO | 控制userlist文件是白名单还是黑名单,默认设置为YES,默认为黑名单 |
3.3 用户配置
- FTP默认的数据路径
/var/ftp/pub
,在浏览器中输入ftp://ipaddress
后,可以看到根目录,具体如下
3.3.1 配置登录用户
相关的配置文件有user_list
和ftpuser
,路径在/etc/vsftpd/
,采用指定用户登录的配置,需要将匿名用户的配置去掉,修改/etc/vsftpd/vsftpd.conf中的anonymous_enable
为NO
。
-
user_list: 如果userlist_enable=YES,则这个文件生效,但是这个文件既可以作为白名单,也可以作为黑名单,这个控制的参数是
userlist_deny=NO,默认值是YES,如果是YES,则这个文件作为黑名单,里面用户是禁止登陆的
。可以将用户填写到这个文件中,则可以登录ftp。 -
ftpuser: 填写到里面的用户受pam规则控制,具体的pam规则见
/etc/pam.d/vsftpd
。 -
chroot_list:采用chroot限制的用户。
添加用户
- 添加用户zhangsan,家目录为/var/ftp/pub/zhangsan,不能登录shell,加入ftp组内,同样权限,创建一个lisi
useradd -d /var/ftp/pub/zhangsan -s /sbin/nologin -g ftp zhangsan
passwd zhangsan
useradd -d /var/ftp/pub/lisi -s /sbin/nologin -g ftp lisi
passwd lisi
# 设置密码
image
登录尝试
image用户隔离
一般FTP服务作为一个通用的应用,如果多个部门使用的事情,需要将不同的部门访问的路径隔离开来,不同用户登录需要限制到对应的文件目录,不能访问其他部门的文件目录,这个可以通过chroot机制进行控制,主要配置
- /etc/vsftpd/vsftpd.conf
chroot_local_user=NO
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
chroot_local_user:是否将所有的用户都限制在主目录中,这个操作影响比较大
chroot_list_enable:这个参数配合chroot_list_file使用,在chroot_list_file对应的文件中的用户才会限制在主目录中
- 将用户名称添加chroot_list文件里面
$ cat /etc/vsftpd/chroot_list
zhangsan
lisi
4. 安全
4.1 防火墙
主动模式下,开放21和20号端口,配置完成后,重启iptables,systemctl restart iptables
-A INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 20 -j ACCEPT
4.2 pam配置
ftp在配置文件vsftp.conf中有一个pam_service_name=vsftpd
,内容如下
[root@zhserver data]# 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
5. 问题处理
5.1 530 Login incorrect
-
问题:现象如下图,遇到这个问题,开始以为是密码正确,后来修改了密码还是存在问题,
-
解决:后来经过排查,是pam的问题,将/etc/pam.d/vsftpd里面的
auth required pam_shells.so
这一行注释掉。
5.2 530 Permission denied
-
问题:ftp登录的时候,输入用户名之后,直接报错
-
解决:检查配置,是否使用了user_list,然后/etc/vsftpd/vsftpd.conf中userlist_deny是否为
NO
。
网友评论