Linux下搭建FTP示例(虚拟用户)

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


目录

搭建FTP示例(虚拟用户)

第一步:安装FTP服务端

第二步:安装PAM

第三步:创建虚拟用户,并配置相关PAM

第四步:编写配置文件

第五步:开放FTP对应的端口

第六步:修改selinux

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

第八步:访问测试一下


环境说明:
        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月上中旬所记,期间参考了一些博客、资料、书籍,甚是遗憾记不住参考了哪些的了。
               如若涉及侵权,请及时联系本人。

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

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

猜你喜欢

转载自blog.csdn.net/justry_deng/article/details/87969795
今日推荐