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
可详见: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”。
相关指令有(简述):
指令 |
说明 |
/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。
相关指令有(简述):
指令 |
说明 |
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) |
注:更多指令、指令细节可详见《程序员成长笔记(第一部)》。
使用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指令重启) |
相关指令有(简述):
指令 |
说明 |
/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/时,会提示输入账号密码,输入后,就能进去了:
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月上中旬所记,期间参考了一些博客、资料、书籍,甚是遗憾记不住参考了哪些的了。
如若涉及侵权,请及时联系本人。