Red Hat Enterprise Linux 7.4配置VSFTP服务器

vsftpd(very secure ftp daemon,很是安全的FTP守护进程)是一款运行在Linux操做系统上的FTP服务程序,不只彻底开源并且免费,此外,还具备很高的安全性、传输速度,以及支持虚拟用户验证等其余FTP服务程序不具有的特色。算法

在配置稳当Yum软件仓库以后,就能够安装vsftpd服务程序了。数据库

[root@localhost ~]# yum install vsftpd


vsftpd服务程序的主配置文件(/etc/vsftpd/vsftpd.conf)内容总长度达到123行,但其中大多数参数在开头都添加了井号(#),从而成为注释信息,你们没有必要在注释信息上花费太多的时间。咱们能够在grep命令后面添加-v参数,过滤并反选出没有包含井号(#)的参数行(即过滤掉全部的注释信息),而后将过滤后的参数行经过输出重定向符写回原始的主配置文件中:vim

[root@localhost ~]# mv /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf_bak
[root@localhost ~]# grep -v "#" /etc/vsftpd/vsftpd.conf_bak > /etc/vsftpd/vsftpd.conf
[root@localhost ~]# cat /etc/vsftpd/vsftpd.conf
anonymous_enable=YES
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


vsftpd做为更加安全的文件传输的服务程序,容许用户以三种认证模式登陆到FTP服务器上。安全

匿名开放模式:是一种最不安全的认证模式,任何人均可以无需密码验证而直接登陆到FTP服务器。服务器

本地用户模式:是经过Linux系统本地的帐户密码信息进行认证的模式,相较于匿名开放模式更安全,并且配置起来也很简单。可是若是被黑客破解了帐户的信息,就能够畅通无阻地登陆FTP服务器,从而彻底控制整台服务器。app

虚拟用户模式:是这三种模式中最安全的一种认证模式,它须要为FTP服务单独创建用户数据库文件,虚拟出用来进行口令验证的帐户信息,而这些帐户信息在服务器系统中其实是不存在的,仅供FTP服务程序进行认证使用。这样,即便黑客破解了帐户信息也没法登陆服务器,从而有效下降了破坏范围和影响。ssh


这里看下 虚拟用户模式 的典型配置tcp

第1步:建立用于进行FTP认证的用户数据库文件,其中奇数行为帐户名,偶数行为密码。例如,咱们分别建立出lightnear用户,密码均为redhatui

[root@localhost ~]# cd /etc/vsftpd
[root@localhost vsftpd]# vim vuser.list
lightnear
redhat

可是,明文信息既不安全,也不符合让vsftpd服务程序直接加载的格式,所以须要使用db_load命令用哈希(hash)算法将原始的明文信息文件转换成数据库文件,而且下降数据库文件的权限(避免其余人看到数据库文件的内容),而后再把原始的明文信息文件删除。spa

[root@localhost vsftpd]# db_load -T -t hash -f vuser.list vuser.db
[root@localhost vsftpd]# file vuser.db
vuser.db: Berkeley DB (Hash, version 9, native byte-order)
[root@localhost vsftpd]# chmod 600 vuser.db
[root@localhost vsftpd]# rm -f vuser.list

第2步:建立vsftpd服务程序用于存储文件的根目录以及虚拟用户映射的系统本地用户。FTP服务用于存储文件的根目录指的是,当虚拟用户登陆后所访问的默认位置。

因为Linux系统中的每个文件都有全部者、所属组属性,例如使用虚拟帐户“张三”新建了一个文件,可是系统中找不到帐户“张三”,就会致使这个文件的权限出现错误。为此,须要再建立一个能够映射到虚拟用户的系统本地用户。简单来讲,就是让虚拟用户默认登陆到与之有映射关系的这个系统本地用户的家目录中,虚拟用户建立的文件的属性也都归属于这个系统本地用户,从而避免Linux系统没法处理虚拟用户所建立文件的属性权限。

为了方便管理FTP服务器上的数据,能够把这个系统本地用户的家目录设置为/var目录(该目录用来存放常常发生改变的数据)。而且为了安全起见,咱们将这个系统本地用户设置为不容许登陆FTP服务器,这不会影响虚拟用户登陆,并且还能够避免黑客经过这个系统本地用户进行登陆。

[root@localhost ~]# useradd -d /var/ftproot -s /sbin/nologin virtual
[root@localhost ~]# ls -ld /var/ftproot/
drwx------. 3 virtual virtual 74 Jul 14 17:50 /var/ftproot/
[root@localhost ~]# chmod -Rf 755 /var/ftproot/

第3步:创建用于支持虚拟用户的PAM文件。

PAM(可插拔认证模块)是一种认证机制,经过一些动态连接库和统一的API把系统提供的服务与认证方式分开,使得系统管理员能够根据需求灵活调整服务程序的不一样认证方式。要想把PAM功能和做用彻底讲透,至少要一个章节的篇幅才能够(对该主题感兴趣的读者敬请关注本书的进阶篇,里面会详细讲解PAM)。

通俗来说,PAM是一组安全机制的模块,系统管理员能够用来轻易地调整服务程序的认证方式,而没必要对应用程序进行任何修改。PAM采起了分层设计(应用程序层、应用接口层、鉴别模块层)的思想。

新建一个用于虚拟用户认证的PAM文件vsftpd.vu,其中PAM文件内的“db=”参数为使用db_load命令生成的帐户密码数据库文件的路径,但不用写数据库文件的后缀:

[root@localhost ~]# vim /etc/pam.d/vsftpd.vu
auth       required     pam_userdb.so db=/etc/vsftpd/vuser
account    required     pam_userdb.so db=/etc/vsftpd/vuser

第4步:在vsftpd服务程序的主配置文件中经过pam_service_name参数将PAM认证文件的名称修改成vsftpd.vu,PAM做为应用程序层与鉴别模块层的链接纽带,可让应用程序根据需求灵活地在自身插入所需的鉴别功能模块。当应用程序须要PAM认证时,则须要在应用程序中定义负责认证的PAM配置文件,实现所需的认证功能。

例如,在vsftpd服务程序的主配置文件中默认就带有参数pam_service_name=vsftpd,表示登陆FTP服务器时是根据/etc/pam.d/vsftpd文件进行安全认证的。如今咱们要作的就是把vsftpd主配置文件中原有的PAM认证文件vsftpd修改成新建的vsftpd.vu文件便可。

[root@localhost vsftpd]# vim /etc/vsftpd/vsftpd.conf

anonymous_enable=YES
local_enable=YES
guest_enable=YES
guest_username=virtual

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.vu
userlist_enable=YES
tcp_wrappers=YES
user_config_dir=/etc/vsftpd/vuser_dir
anon_umask=022

pasv_max_port=21010
pasv_min_port=21001

第5步:为虚拟用户设置不一样的权限。

[root@localhost ~]# mkdir /etc/vsftpd/vuser_dir/
[root@localhost ~]# cd /etc/vsftpd/vuser_dir/
[root@localhost vusers_dir]# touch lightnear
[root@localhost vusers_dir]# vim lightnear
guest_enable=YES
guest_username=virtual
local_root=/var/ftproot
write_enable=yes
pam_service_name=vsftpd.vu
anon_umask=022
anon_world_readable_only=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES

第6步:设置SELinux域容许策略,而后使用虚拟用户模式登陆FTP服务器。相信你们能够猜到,SELinux会继续来捣乱。因此,先按照前面实验中的步骤开启SELinux域的容许策略,以避免再次出现操做失败的状况:

[root@localhost ~]# getsebool -a | 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 ~]# setsebool -P ftpd_full_access=on

补充:解决中文乱码问题[root@localhost ~]# vi /etc/sysconfig/i18nLANG="zh_CN.UTF-8"

相关文章
相关标签/搜索