zoukankan      html  css  js  c++  java
  • 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参数,过滤并反选出没有包含井号(#)的参数行(即过滤掉所有的注释信息),然后将过滤后的参数行通过输出重定向符写回原始的主配置文件中:

    复制代码
    [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服务器,从而完全控制整台服务器。

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

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

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

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

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

    [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/i18n
    LANG="zh_CN.UTF-8"

  • 相关阅读:
    POJ3164 Command Network
    UVa11401 Triangle Counting
    UVa11174 Stand in a Line
    UVa11806 Cheerleaders
    Uva11538 Chess Queen
    Bzoj3130 [Sdoi2013]费用流
    Bzoj3262 陌上花开
    模拟25A 题解
    模拟24 题解
    模拟23 题解
  • 原文地址:https://www.cnblogs.com/ihuangjianxin/p/9400488.html
Copyright © 2011-2022 走看看