P.S.这段时间一直在忙,自己私下里学的一些东西没时间放到CSDN上,这次就一下子放上来吧。
目录
环境说明:
1、CentOS7虚拟机
2、vsftpd版本:vsftpd-3.0.2-25.el7.x86_64
搭建FTP示例(虚拟用户)
第一步:安装FTP服务端
可详见:https://blog.csdn.net/justry_deng/article/details/87966318。
第二步:安装PAM
说明:虚拟用户使用PAM认证方式进行认证,所以要先确保安装有PAM。
相关指令有(简述):
指令 |
说明 |
rpm -qa | grep pam |
检查是否安装有pam |
yum install pam* libdb-utils libdb* -y |
安装pam |
第三步:创建虚拟用户,并配置相关PAM
第一小步:新建一个.txt文件,里面写要创建的 虚拟用户的用户名 以及 该用户的密码。
注:内容格式为:单行为用户名,双行为对应用户的密码。这里用户即为“JustryDeng”,密码即为“dengshuai”。
第二小步:使用db_load -T -t hash -f xxxA.txt xxxB.db指令,生成.db数据库文件,如:
第三小步:使用指令chmod 700 /etc/vsftpd/virtual_users.db修改xxxB.db文件权限(保证所有者可读、
可写、可执行),如:
注:700代表:百位代表所有者的权限;十位代表组的权限,各位代表其他人的权限。其中可读r对应的值为4,
可写w对应的值为2,可执行x对应的值为1。用法如:读+写+执行=4+2+1=7。
第四小步:修改/etc/pam.d/vsftpd的内容为(原文不要删,注释掉即可):
auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/xxx
account required /lib64/security/pam_userdb.so db=/etc/vsftpd/xxx
注:其中xxx为本大步中第二小步生成的.db文件的文件名(不含后缀)。
如:
注:/etc/pam.d/vsftpd文件中原来的内容别删(如果有备份的话,删除掉也没事),先注释掉即可。虚拟用户、匿名用
户连接FTP时不需要原来的内容,但是本地用户连接FTP时,就会用到原来的内容,所以需要保证原来的内容
能被追回,以备不时之需。
第五小步:使用指令useradd -s /sbin/nologin xxx创建一个xxx用户,用来映射虚拟用户。
如:
注:这里创建了一个不允许登录,但是可以用来使用FTP服务的名为ftpuser的用户。
更多设置:
虚拟用户设置 |
|
注:虚拟用户使用PAM认证方式。 |
|
pam_service_name=vsftpd |
设置PAM使用的名称,默认值为vsftpd,对应/etc/pam.d/vsftpd文件。 |
guest_enable=YES/NO |
启用虚拟用户。默认值为NO。 |
guest_username=ftp |
这里用来映射虚拟用户。默认值为ftp。 |
virtual_use_local_privs=YES/NO |
当该参数激活(YES)时,虚拟用户使用与本地用户相同的权限。当此参数关闭(NO)时,虚拟用户使用与匿名用户相同的权限。默认情况下此参数是关闭的(NO)。 |
第四步:编写配置文件
第一小步:编写核心通用配置文件/etc/vsftpd/vsftpd.conf
anonymous_enable=NO
local_enable=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
guest_enable=YES
guest_username=ftpuser
virtual_use_local_privs=YES
user_config_dir=/etc/vsftpd/virtual_users_conf
chroot_local_user=YES
chroot_list_enable=NO
allow_writeable_chroot=YES
注:FTP配置文件中只配置了读、写,没配置删除、重命名等其它选项,更多配置可详
见https://blog.csdn.net/justry_deng/article/details/87966877。
注:其中guest_username即为指定虚拟用户的本地用户映射对象是ftpuser,更多配置可详
见https://blog.csdn.net/justry_deng/article/details/87966877。
注:虚拟账户其实也是映射的本地账户,所以对本地账户的一些必要配置也不能少。
注:由于可能会有多个虚拟账户,所以这里我们采用个性化配置的方式。如:用户abc登录FTP,那么除了加
载/etc/vsftpd/vsftpd.conf核心配置文件外,还会加载user_config_dir指向的目录下的名为abc的文件(此文
件无后缀名)作为额外的配置文件;进而达到个性化配置的目的。
注:【chroot_local_user=YES】、【chroot_list_enable=NO】、【allow_writeable_chroot=YES】此三条选项,作用
是:将用户定死在其对应的文件夹目录下,使其不能切换至上级目录、其他位置保证安全性;需要注意的是:这
三个配置只能写在/etc/vsftpd/vsftpd.conf中,不能写进个性化配置文件中,否者无效。
追注:访问控制本身就提供了一套完善的个性化措施(可详见
https://blog.csdn.net/justry_deng/article/details/87966877。),其核心的几个配置必须放在FTP的主配
置文件/etc/vsftpd/vsftpd.conf中。更多配置
第二小步:编写个性化配置文件
如:user_config_dir指向的目录为/etc/vsftpd/virtual_users_conf,前面创建的虚拟用户的用户名为JustryDeng,那么个性化配置文件的全路径名为/etc/vsftpd/virtual_users_conf/JustryDeng,如下图黄色框内所示。
注:如果个性化文件里面有涉及到了其他的文件夹,那么需要保证该文件夹存在,无则创建,
如:mkdir -p /var/ftpusers/justry_deng_root。
追注:-p的作用是,如果有必要的话会创建相关的文件夹。
第三小步:保证虚拟用户有相应目录的权限
说明:本例中,虚拟用户映射的本地用户是ftpuser,所以只需要保证ftpuser有相关文件夹目录的权限即可。这里设置:
1、目录(及里面的内容)的所有者:chown -R ftpuser /var/ftpusers
2、目录(及里面的内容)的操作权限:chmod -R 764 /var/ftpusers
注:此处与上一篇博客本地用户对应位置的权限配置一个道理,可详见
https://blog.csdn.net/justry_deng/article/details/87967861对应位置处的说明。
第五步:开放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/ftpusers/justry_deng_root/目录下放置了一个文件“Kafka权威指南.pdf”:
浏览器访问ftp://ip地址/时,会提示输入账号密码,输入后,就能进去了:
声明一:此文为学习笔记。
声明二:此笔记是本人2019年2月上中旬所记,期间参考了一些博客、资料、书籍,甚是遗憾记不住参考了哪些的了。
如若涉及侵权,请及时联系本人。