在linux上搭建ftp服务
这篇文章简单介绍一下在linux服务器上搭建FTP服务
环境:Centos 7.2
1.使用yum安装vsftpd
[root@localhost ~]# yum install vsftpd Installed: vsftpd.x86_64 0:3.0.2-22.el7 Complete!
2.修改vsftpd配置文件
[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf
查看配置文件:
[root@localhost ~]# cat /etc/vsftpd/vsftpd.conf |grep ^[^#]
anonymous_enable=NO #不允许匿名登录
local_enable=YES #vsftpd所在系统的用户可以登录vsftpd
write_enable=YES #允许使用任何可以修改文件系统的FTP的指令
local_umask=022 #匿名用户新增文件的umask数值
dirmessage_enable=YES
xferlog_enable=YES #启用一个日志文件,用于详细记录上传和下载
connect_from_port_20=YES #开启20端口
xferlog_std_format=YES #记录日志使用标准格式
listen=NO #关闭监听
listen_ipv6=YES #监听IPV6地址
pam_service_name=vsftpd #验证文件的名字
userlist_enable=YES #允许由userlist_file指定文件中的用户登录FTP服务器
tcp_wrappers=YES #支持tcp_wrappers,限制访问(/etc/hosts.allow,/etc/hosts.deny)
3.添加ftp用户,设置主目录,不允许使用shell
[root@localhost mail]# useradd -d /data/ftp/huoyan -s /sbin/nologin ftpuser
4.为ftp用户添加密码
[root@localhost mail]# passwd ftpuser
5.配置chroot
在vsftpd服务器的默认设置中,本地用户可以切换到主目录以外的目录进行浏览访问,这样对于服务器来说是不太安全的,因为任何用户可以随时浏览到别的用户的私有信息,于是,我们使用chroot选项来防止这种情况的发生
chroot命令用来在指定的根目录下运行指令。chroot,即 change root directory (更改 root 目录)
在使用 chroot 之后,系统的目录结构将以指定的位置作为根目录(即 “/”)
可以通过如下两种方法来设置chroot,从而杜绝上述不安全的情况发生:
(1)设置所有的本地用户执行chroot,只要将/etc/vsftpd/vsftpd.conf文件中的chroot_local_ user值置为YES,即chroot_local_user=YES。
(2)设置指定的用户执行chroot
我们使用第二种办法:
[root@localhost mail]# vim /etc/vsftpd/vsftpd.conf chroot_local_user=NO chroot_list_enable=YES # (default follows) chroot_list_file=/etc/vsftpd/chroot_list
设置后,只有/etc/vsftpd.chroot_list文件中指定的用户才能够执行chroot命令。
默认/etc/vsftpd/chroot_list不存在,需要手动创建
[root@localhost ftp]# vim /etc/vsftpd/chroot_list ftpuser
6.重启服务,并将服务设置为开机自启
[root@localhost ~]# systemctl start vsftpd.service [root@localhost ~]# systemctl enable vsftpd.service
问题及解决办法:
问题一:
在我们使用其它软件登录ftp时,发生异常 OOPS:priv_sock_get_result
问题原因:由于没有关闭seLinux,导致连接被阻断

解决办法:
1.关闭selinux
临时关闭
setenforce 0
如果需要永久关闭selinux,修改/etc/selinux/config SELINUX选项为disabled,但需要重启才能生效,可配置完成后,临时关闭selinux,等待下一次自然重启即可永久生效
[root@localhost proc]# vim /etc/selinux/config SELINUX=disabled
2.修改设定setsebool值
首先查看ftp setsebool值
[root@localhost mail]# sestatus -b| grep ftp ftp_home_dir off ftpd_anon_write off ftpd_connect_all_unreserved off ftpd_connect_db off ftpd_full_access off 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 sftpd_anon_write off sftpd_enable_homedirs off sftpd_full_access off sftpd_write_ssh_home off tftp_anon_write off tftp_home_dir off
执行如下命令修改
[root@localhost ftp]# setsebool -P allow_ftpd_full_access on [root@localhost ftp]# setsebool -P tftp_home_dir on
修改后结果:
[root@localhost ftp]# sestatus -b| grep ftp ftp_home_dir on 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 sftpd_anon_write off sftpd_enable_homedirs off sftpd_full_access off sftpd_write_ssh_home off tftp_anon_write off tftp_home_dir on
问题二:
发生如下异常 OOPS:vsftpd:refusing to run with writable root inside chroot()
问题原因:该问题由于ftp更新造成的,从2.3.5之后,vsftpd增强了安全检查,如果用户被限定在了其主目录下,则该用户的主目录不能再具有写权限了!如果检查发现还有写权限,就会报该错误。
解决办法:
在vsftpd的配置文件中增加下列两项中的一项:
对于标准的vsftpd build (vsftpd)添加如下配置:
allow_writeable_chroot=YES
对于扩展的vsftpd build (vsftpd-ext)添加如下配置:
allow_writable_chroot=YES
我们这里属于标准的build,所以添加如下配置:
[root@localhost ftp]# vim /etc/vsftpd/vsftpd.conf allow_writeable_chroot=YES
重启vsftpd
[root@localhost ftp]# systemctl restart vsftpd.service
FTP登录成功,问题解决
亲,看完了点个赞呗