Linux下搭建FTP示例(本地用户)

P.S.这段时间一直在忙,自己私下里学的一些东西没时间放到CSDN上,这次就一下子放上来吧。


目录

搭建FTP示例(匿名用户)

第一步:安装FTP服务端

第二步:创建本地用户,并设置密码

第三步:不配置 或 选择性配置本地用户相关参数

第四步:设置用户是否允许切换到上级目录(即:设置是都定死主目录)

第五步:启动FTP服务

第六步:开放FTP对应的端口(关闭防火墙也是可以的,但我们一般都不这么做)

第七步:修改selinux

第八步:启动(或重启)FTP服务

第九步:访问测试一下

附录:本文最终的/etc/vsftpd/vsftpd.conf配置文件


环境说明:
         1、CentOS7虚拟机
         2、vsftpd版本:vsftpd-3.0.2-25.el7.x86_64


搭建FTP示例(匿名用户)

第一步:安装FTP服务端

可详见:https://blog.csdn.net/justry_deng/article/details/87966318

第二步:创建本地用户,并设置密码

创建本地用户FTP-User:

注:创建用户后,会在/home下生成一个该用户对应的目录(这里会生成/home/FTP-User/)。

给指定的用户(这里为FTP-User)设置密码:

第三步:不配置 或 选择性配置本地用户相关参数

本人这里只配置了一个local_root=/var/ftp/local/test,其余的使用默认的即可,更多可参考:

本地用户相关设置

local_enable=YES/NO

控制是否允许本地用户登入,YES为允许本地用户登入,NO为不允许。默认值为YES。

local_root=/home/username

当本地用户登入时,将被更换到定义的目录下。默认值为各用户的家目录。

write_enable=YES/NO

是否允许登陆用户有写权限。属于全局设置,默认值为YES。

local_umask=022

本地用户新增档案时的umask值。默认值为022。

file_open_mode=0755

本地用户上传档案后的档案权限,与chmod所使用的数值相同。默认值为0666。

注:要使local_root生效,除了需要进行FTP配置外,还需要保证(用来连接登录FTP的)本地用户有进入使用该目录
       的权限。本人的处理是:使用
chown -R FTP-User /var/ftp指令,将 /var/ftp目录以及其里面的文档子目录的所有
       者均改为FTP-User;使用
chmod -R 764 /var/ftp指令,将 /var/ftp目录以及其里面的文档子目录的权限改为764。
       追注:764分别代表【所有者】的权限为可读、可写、可执行(即:4+2+1);【组】的权限为可读、可
                  写(即:4+2);【其它】的权限为可读(即:4)。一般来讲所有者的权限为7,组和其它可根据实
                  际情况调整。

提示:本人测试时,权限只改到/var/ftp/local/,连接FTP时提示500 OOPS: cannot change directory:/var/ftp/local/test;
           SELinux(下面的步骤中会进行)的配置处理是没问题的,问题就出在权限这一块儿;当我将权限在往上配置到
           /var/ftp/时,就没有问题了。

第四步:设置用户是否允许切换到上级目录(即:设置是都定死主目录)

        本人这里配置了chroot_local_user=YES和chroot_list_enable=NO和allow_writeable_chroot=YES,即:所有的用户均不能切换到其他目录。

说明:vsftpd从2.3.5版本开始,增强了安全检查,如果用户被限定在了其主目录下,则该用户的主目录不能再具有写权限
          了!如果检查发现还有写权限,就会报500 OOPS: vsftpd: refusing to run with writable root inside chroot()错误。
           解决方式不止一种,其中通过配置allow_writeable_chroot=YES的方式最省事、也最正规。

更多可参考:

控制用户是否允许切换到上级目录

注:在默认配置下,本地用户登入FTP后可以使用cd命令切换到其他目录,这样会对系统带来安全隐患。可以通过以下三条配置文件来控制用户切换目录。

chroot_list_enable=YES/NO

设置是否启用chroot_list_file配置项指定的用户列表文件。默认值为NO。

chroot_list_file=/etc/vsftpd.chroot_list

用于指定用户列表文件,该文件用于控制哪些用户可以切换到用户家目录的上级目录。

chroot_local_user=YES/NO

用于指定用户列表文件中的用户是否允许切换到上级目录。默认值为NO。

注:通过搭配能实现以下几种效果:

①当chroot_list_enable=YES,chroot_local_user=YES时,在/etc/vsftpd.chroot_list文件中列出的用户,
    可以切换到其他目录;未在文件中列出的用户,不能切换到其他目录。

②当chroot_list_enable=YES,chroot_local_user=NO时,在/etc/vsftpd.chroot_list文件中列出的用户,
    不能切换到其他目录;未在文件中列出的用户,可以切换到其他目录。

③当chroot_list_enable=NO,chroot_local_user=YES时,所有的用户均不能切换到其他目录。

④当chroot_list_enable=NO,chroot_local_user=NO时,所有的用户均可以切换到其他目录。  

注:假设FTP用户对应的local_root为Linux上的/home/user_a(即:登录进入FTP就相当于进入了/home/user_a)。当
        没有设置不能再往上级切时,此时用户就可以通过ftp客户端跳出/home/user_a的范围,访问其他的目录文件,
        影响安全性,此时用户刚进FTP时pwd的结果是“/home/user_a”;当设置了不能再往上级切时,此时用户通过
        ftp客户端浏览的最大范围就是/home/user_a,只能访问这个目录下的东西,此时用户刚进FTP时pwd的结果
        是“/”,而不是“/home/user_a”。

第五步:启动FTP服务

相关指令有(简述):

指令

说明

/bin/systemctl status vsftpd.service

查看FTP服务的状态

/bin/systemctl start vsftpd.service

启动FTP

/bin/systemctl enable vsftpd.service

设置FTP开机自动启动

注:最好设置为开机自动启动。

注:更多指令、指令细节可详见https://blog.csdn.net/justry_deng/article/details/87966318

第六步:开放FTP对应的端口(关闭防火墙也是可以的,但我们一般都不这么做)

相关指令有(简述):

指令

说明

firewall-cmd --zone=public --list-ports

查看所有开放的端口

firewall-cmd --zone=public --add-port=xxx/tcp --permanent

开放端口xxx

firewall-cmd --reload

重新加载防火墙

systemctl stop firewalld.service

关闭firewall防火墙

systemctl disable firewalld.service

禁止firewall防火墙开机启动

firewall-cmd --state

查看默认防火墙状态(关闭后显示not running,开启后显示running)

注:更多指令、指令细节可详见《程序员成长笔记(第一部)》。

第七步:修改selinux

使用getsebool -a | grep ftp指令查看selinux对ftp的权限管理:

发现最关键的ftpd_full_access项和tftp_home_dir项是关闭了的,这时我们需要使用setsebool -P allow_ftpd_full_access on指令和setsebool -P tftp_home_dir on指令来分别开启ftpd_full_access和tftp_home_dir,开启后再查看如图所示:

注:其它的选项可根据实际情况来进行设置。

注:上述指令是永久有效的(即:关机重启后仍然有效),如果只是想临时改一下(重启后会失效),那么只需要将上述
        指令去掉-P参数即可,如:

提示:如果想关闭,只需要将指令中对应的on改为off即可。

与selinux的相关的指令还有:

指令

说明

getsebool -a | grep ftp

查看selinux对ftp的权限管理

setsebool -P allow_ftpd_full_access on

永久开启ftpd_full_access

注:重启后仍然有效

setsebool -P tftp_home_dir on

永久开启tftp_home_dir

注:重启后仍然有效

setsebool allow_ftpd_full_access on

临时开启ftpd_full_access

注:重启后失效

setsebool tftp_home_dir on

临时开启tftp_home_dir

注:重启后失效

SELinux的打开与关闭

getenforce

查看SELinux的状态

注:Permissive说明SELinux是关闭了的,Enforcing说明SELinux是开启了的

setenforce 0

临时关闭SELinux

注:重启后失效

setenforce 1

临时打开SELinux

注:重启后失效

vim /etc/sysconfig/selinux,将SELINUX=enforcing改为SELINUX=disabled

永久关闭SELinux

注:重启系统后生效(手动重启或使用reboot指令重启)

vim /etc/sysconfig/selinux,将SELINUX=disabled改为SELINUX=enforcing

永久开启SELinux

注:重启系统后生效(手动重启或使用reboot指令重启)

第八步:启动(或重启)FTP服务

相关指令有(简述):

指令

说明

/bin/systemctl start vsftpd.service

启动FTP

/bin/systemctl restart vsftpd.service

重启FTP

/bin/systemctl status vsftpd.service

查看FTP服务的状态

注:更多指令、指令细节可详见https://blog.csdn.net/justry_deng/article/details/87966318

第九步:访问测试一下

本人的在/var/ftp/local/test目录下放置了一个文件“深入理解Java虚拟机(第二版).pdf”:

浏览器访问ftp://192.168.2.103/时,会提示输入账号密码,输入后,就能进去了:

附录:本文最终的/etc/vsftpd/vsftpd.conf配置文件:

anonymous_enable=NO
local_enable=YES
local_root=/var/ftp/local/test
chroot_local_user=YES
chroot_list_enable=NO
allow_writeable_chroot=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES

声明一:此文为学习笔记。

声明二:此笔记是本人2019年2月上中旬所记,期间参考了一些博客、资料、书籍,甚是遗憾记不住参考了哪些的了。
               如若涉及侵权,请及时联系本人。

^_^ 如有不当之处,欢迎指正

^_^ 本文已经被收录进《程序员成长笔记(四)》,笔者JustryDeng

猜你喜欢

转载自blog.csdn.net/justry_deng/article/details/87967861