FTP(File Transfer Protocol)即文件传输协议,也是属于客户机/服务器(Clinet/Server,即C/S)模型的服务或应用程序,用于Internet上的控制文件的双向传输。同时,也是一个应用程序(Application)。基于不同操作系统又不同的FTP应用程序,而这些应用程序都遵守同一种协议以传输文件。
常用功能:"Download"和"Upload",即下载文件和上传文件等功能。
虚拟系统:CentOS 6
方法步骤
1.查看是否安装FTP服务
# rpm -qa | grep vsftpd
安装FTP客户端
# 32位平台:
# rpm -Uvh http://mirror.centos.org/centos/6/os/i386/Packages/ftp-0.17-54.el6.i686.rpm
# 64位平台:
# rpm -Uvh http://mirror.centos.org/centos/6/os/x86_64/Packages/ftp-0.17-54.el6.x86_64.rpm
pam认证:ldd命令检查生成的vsftpd文件有没有加载/lib/libpam.so.0
# ldd /usr/local/sbin/vsftpd
确认是否安装pam-deve1,如未安装,请执行以下命令安装
# yum install pam-devel
搜索pam相关软件包。PS:遇到PAM问题次数比较多,怀疑过使用x64系统位数的问题,记录下命令
# yum list |grep pam
若想卸载FTP服务执行以下命令
# rpm -e vsftpd
2.安装FTP服务器
# yum -y install vsftpd
3.设置开机自启动
# chkconfig vsftpd on
检查FTP服务是否开机自启动,如下图说明开机启动
# chkconfig --list vsftpd
查看FTP服务状态,以下命令皆可。
# service vsftpd status
# /etc/init.d/vsftpd status
管理FTP服务命令:
启动FTP:# service vsftpd start
关闭FTP:# service vsftpd stop
重启FTP:# service vsftpd restart
4.修改FTP配置文件
配置文件路径:/etc/vsftpd/vsftpd.conf
打开配置文件
# vi /etc/vsftpd/vsftpd.conf
主要配置参数如下:
请根据自己需要配置
参数 | 作用 |
listen=[YES|NO] | 是否以独立运行的方式监听服务 |
listen_address=IP地址 | 设置要监听的IP地址 |
listen_port=21 | 设置FTP服务的监听端口 |
download_enable=[YES|NO] | 是否允许下载文件 |
userlist_enable=[YES|NO] userlist_deny=[YES|NO] | 设置用户列表为“允许”还是“禁止”操作 |
max_clients=0 | 最大客户端连接数,0为不限制 |
max_per_ip=0 | 同一IP地址的最大连接数,0为不限制 |
anonymous_enable=[YES|NO] | 是否允许匿名用户访问 |
anon_upload_enable=[YES|NO] | 是否允许匿名用户上传文件 |
anon_umask=022 | 匿名用户上传文件的umask值 |
anon_root=/ftp | 匿名用户的FTP根目录 |
anon_mkdir_write_enable=[YES|NO] | 是否允许匿名用户创建目录 |
anon_other_write_enable=[YES|NO] | 是否开放匿名用户的其他写入权限(包括重命名、删除等操作权限) |
anon_max_rate=0 | 匿名用户的最大传输速率(字节/秒),0为不限制 |
local_enable=[YES|NO] | 是否允许本地用户登录FTP |
local_umask=022 | 本地用户上传文件的umask值 |
local_root=/ftp | 本地用户的FTP根目录 |
local_max_rate=0 | 本地用户最大传输速率(字节/秒),0为不限制 |
pam_service_name=vsftpd | PAM服务名称,调用/etc/pam.d/vsftpd文件 |
chroot_local_user=[YES|NO] chroot_list_enable=[YES|NO] | 是否将用户权限禁锢在FTP目录,以确保安全 配置chroot_list_file所指定用户权限和访问 |
/etc/vsftpd/目录其他文件介绍:
ftpusers:
ftpusers(黑名单)不受任何配制项的影响,它总是有效,它是一个黑名单!
该文件存放的是一个禁止访问FTP的用户列表,通常为了安全考虑,管理员不希望一些拥有过大权限的帐号(比如root)登入FTP,以免通过该帐号从FTP上传或下载一些危险位置上的文件从而对系统造成损坏。
user_list:
user_list(用户名单)与vsftpd.conf中的userlist_enable和userlist_deny两个配置项紧密相关的,userlist_enable=YES时,它才有效,否则无效。
- userlist_enable和userlist_deny两个选项针对的是:本地全体用户(除去ftpusers中的用户)和出现在user_list文件中的用户以及不在user_list文件中的用户这三类用户集合进行的设置。
- 当且仅当userlist_enable=YES时:userlist_deny项的配置才有效,user_list文件才会被使用;当其为NO时,无论userlist_deny项为何值都是无效的,本地全体用户(除去ftpusers中的用户)都可以登入FTP。
- 当userlist_enable=YES时,userlist_deny=YES时:user_list是一个黑名单,即:所有出现在名单中的用户都会被拒绝登入。
- 当userlist_enable=YES时,userlist_deny=NO时:user_list是一个白名单,即:只有出现在名单中的用户才会被准许登入(user_list之外的用户都被拒绝登入);注意:使用白名单后,匿名用户将无法登入!除非显式在user_list中加入一行:anonymous。
chroot_list:
chroot_list(限定列表)月user_list(用户名单)类似,与vsftpd.conf中的chroot_list_enable和chroot_local_user两个配置项紧密相关的,起到限制或开放指定用户访问目录和权限的作用。
- chroot_local_user=YES chroot_list_enable=YES 1.所有用户被限制在其主目录下 2.chroot_list_file用户列表作为例外用户,不受限制(默认此种模式)
- chroot_local_user=YES chroot_list_enable=NO 1.所有用户被限制在其主目录下 2.chroot_list_file用户列表不使用,没有例外用户
- chroot_local_user=NO chroot_list_enable=YES 1.所有用户不被限制在其主目录下 2.chroot_list_file用户列表作为例外用户,反而受到限制
- chroot_local_user=YES chroot_list_enable=YES 1.所有用户不被限制在其主目录下 2.chroot_list_file用户列表不使用,没有任何例外用户
5.CentOS6配置iptable规则
配置文件路径:/etc/sysconfig/iptables
打开配置文件
# vi /etc/sysconfig/iptables # 打开配置文件
在有 ACCEPT 的规则下面添加一条开放 ss 端口的规则,如果前面使用了 10001 作为端口,那么就添加以下代码,如果有多个端口就添加多行(两种写法,第一种为系统默认写法),保存退出。
-A INPUT -p udp -m state --state NEW -m udp --dport 20 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 20 -j ACCEPT
-A INPUT -p udp -m state --state NEW -m udp --dport 21 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 21 -j ACCEPT
或
-A INPUT -p tcp --dport 20 -j ACCEPT
-A INPUT -p tcp --dport 21 -j ACCEPT
由于这条规则只存储在/etc/sysconfig/iptables 这个配置文件内,并没有添加到内存里,所以需要 reload 一下 iptables:
# service iptables reload
6.重启服务
# service vsftpd restart
7.登录浏览器测试
在浏览器输入: ftp://IP地址
8.调试
如遇到问题可通过日志查看
# tail -f /var/log/secure
也可本地登录试试
# ftp 127.0.0.1
查看SeLinux设置状态
# getsebool -a|grep ftp
使用setsebool命令开启
# setsebool ftpd_disable_trans 1 或者 # setsebool ftp_home_dir 1
其实关于FTP服务问题还有很多,调试方法也有好多种。