最近要建一个ftp服务器,服务器是CentOS7.1的操作系统,ftp软件仔细考虑后,决定采用vsftpd。想法定好后,决定开工。
先安装软件:
yum -y install vsftpd
看看能不能启动:
systemctl start vsftpd.service
很幸运,启动成功了,接下来就是把服务器设置为开机自启动:
systemctl enable vsftpd.service
接下来是防火墙设置,把ftp服务加入防火墙放行:
firewall-cmd --permanent --add-service=ftp
重新加载防火墙配置:
firewall-cmd --reload
注:centos6的iptables应该这样配置:
iptables -I INPUT -m state --state NEW -p tcp --dport 21 -j ACCEPT service iptables save
接下来就是重点了,配置ftp:
vim /etc/vsftpd/vsftpd.conf
配置文件里面需要改变的几项说明:
#是否允许匿名登录,为了安全,一般不允许 anonymous_enable=NO #是否用ASCII模式上传下载 ascii_upload_enable=YES ascii_download_enable=YES #ftp设置欢迎语 ftpd_banner=Welcome to xxxx FTP service. #用户是否允许chroot,yes是不允许,no是允许,这里有点绕 chroot_local_user=YES #是否以IPv4 standalone运行 listen=YES #IPv4和v6只能监听一个,把v6的注释掉或者填写no #listen_ipv6=YES #使用本地时间 use_localtime=YES #是否允许根目录可写 allow_writeable_chroot=YES
我们可以新建下被动模式的端口范围,方便防火墙放行,如果不设定访问,使用任意端口,如果客户端以被动模式连接过来,获取文件列表会有问题。
pasv_min_port=10090 pasv_max_port=10100
放行被动模式还有种方法,通过制定状态来放行,一般防火墙默认已经放行RELATED,ESTABLISHED连接状态,比如在redhat或者centos中,iptables默认放行规则如下:
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
因此,我们可以加载制定的ftp模块来自动放行被动模式所用的端口。
vim /etc/sysconfig/modules/ftp.modules
modprobe nf_conntrack_ftp
设置为可执行:
chmod a+x /etc/sysconfig/modules/ftp.modules
这样,即使不设定被动模式的端口范围,我们也能用被动模式传输数据了。
在CentOS7中,除了上述方法(也有效),我们还可以这样加载模块:
vim /etc/modules-load.d/ftp.conf
nf_conntrack_ftp
直接写入要加载的模块名即可生效了。
新建用户:
useradd -d /mnt/sdb/username -s /sbin/nologin -M username chown -R username:username /mnt/sdb/username chown -R 700 /mnt/sdb/username
需要注意的是,如果不设置allow_writeable_chroot=YES,默认连接ftp会报错:
500 OOPS: vsftpd: refusing to run with writable root inside chroot().
此时需要把根目录的写权限去除才能解决,即chown u-w /mnt/sdb/ftphome/,或者也可以给根目录写的权限,但运行:
echo 'allow_writeable_chroot=YES' >> /etc/vsftpd/vsftpd.conf
ftp默认的目录为/var/ftp/pub/,如果要改变默认目录,可以用local_root=/ftpdir 来设置新的默认的目录。但是,我们一般都会新建用户,指定每个用户自己的目录,所以这样做似乎不是很必要。
很恶心的东西来了,ftp登录后,发现无法创建文件夹,但是我们已经完全设置根目录可写权限了。运行下面这条命令:
setsebool -P ftpd_full_access on
centos6中,对应的selinux 布尔值应该是这样的:
setsebool -P allow_ftpd_full_access 1