在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登录成功,问题解决

亲,看完了点个赞呗

赫墨拉

我是一个喜爱大数据的小菜鸡,这里是我分享我的成长和经历的博客

You may also like...

发表评论

电子邮件地址不会被公开。