FTP工作模式简介
FTP工作会启动两个通道:控制通道和数据通道。
控制通道一般由客户端发起,数据连接分两种:port(主动)和pasv(被动)。
PORT模式: 在客户端需要接收数据时,ftp_client(大于1024的随机端口)-PORT命令->ftp_server(21) 发送PORT命令,这个PORT命令包含了客户端是用什么端口来接收数据(大于1024的随机端口,在传送数据时,ftp_server将通过自己的TCP 20 端口和PORT中包含的端口建立新的连接来传送数据。
PASV模式: 传送数据时,ftp_client--PASV命令-->ftp_server(21) 发送PASV命令时,ftp_server自动打开一个1024--5000之间的随机端口并且通知ftp_client在这个端口上传送数据,然后客户端向指定的端口发出请求连接,建立一条数据链路进行数据传输。
安装FTP软件包
代码语言:javascript复制#rpm -qa vsftpd //查看是否已经安装
#yum install -y vsftpd //安装FTP
#rpm -ql vsftpd //列出安装文件如下
/etc/logrotate.d/vsftpd. vsftpd的日志文件
/etc/pam.d/vsftpd PAM认证文件
/etc/rc.d/init.d/vsftpd 启动脚本
/etc/vsftpd vsftpd的配置文件存放的目录
/etc/vsftpd/ftpusers 禁止使用vsftpd的用户列表文件
/etc/vsftpd/user_list 禁止或允许使用vsftpd的用户列表文件
/etc/vsftpd/vsftpd.conf 主配置文件
/etc/vsftpd/vsftpd_conf_migrate.sh vsftpd操作的一些变量和设置
/usr/sbin/vsftpd vsftpd的主程序
FTP安全设置
1.为了安全应该禁止匿名用户的登录:将配置文件的anonymous_enable参数设为NO,屏蔽匿名用户上传,创建,删除的功能
代码语言:javascript复制#vi /etc/vsftpd/vsftpd.conf
anonymous_enable=NO
#anon_upload_enable=YES 上传
#anon_mkdir_write_enable=YES 创建
#anon_other_write_enable=YES 删除
#service vsftpd restart //重启FTP服务器
2.为加强安全设置:限制系统用户锁定在家目录:
代码语言:javascript复制#vi /etc/vsftpd/vsftpd.conf
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list //把需要限制的用户加入/etc/vsftpd/chroot_list即可
3.限制其他系统用户不能登录ftp:
代码语言:javascript复制#cat /etc/vsftpd/ftpusers //ftpusers是禁止使用FTP用户列表。
#echo "uuu" >>/etc/vsftpd/ftpusers 此时viong不能登录ftp //这样uuu用户将不能使用FTP
4.使用FTP的配置文件/etc/vsftpd/user_list来控制只有那些用户可以登录FTP:
代码语言:javascript复制/etc/vsftpd/user_list 用于存放哪些用户才能登录系统:
#vi /etc/vsftpd/vsftpd.conf
#在userlist_enable=YES 的后面添加
userlist_deny=NO
userlist_file=/etc/vsftpd/user_list
5.搭建支持SSL加密传输的vsftpd:
首先检查vsftpd软件是否支持SSL:
代码语言:javascript复制#ldd /usr/sbin/vsftpd |grep libssl
libssl.so.6 => /lib/libssl.so.6 (0xf7f27000) ==说明此版本支持
#openssl req -x509 -nodes -days 365 -newkey rsa:1024 -keyout /etc/vsftpd/vsftpd.pem -out /etc/vsftpd/vsftpd.pem //生成vsftpd.pem证书
#vi /etc/vsftpd/vsftpd.conf //设置主配置文件参数
ssl_enable=YES //是否启用 SSL,默认为no
allow_anon_ssl=NO //是否允许匿名用户使用SSL,默认为no
force_local_data_ssl=YES //非匿名用户传输数据时是否加密,默认为yes
force_local_logins_ssl=YES //非匿名用户登陆时是否加密,默认为yes
ssl_tlsv1=YES //是否激活tls v1加密,默认yes
ssl_sslv2=YES //是否激活sslv2加密,默认no
ssl_sslv3=YES //是否激活sslv3加密,默认no
rsa_cert_file=/etc/vsftpd/vsftpd.pem //rsa证书的位置