zoukankan      html  css  js  c++  java
  • Vsftpd服务

    Vsftpd服务

    1.匿名开放模式:

    是一种最不安全的认证模式,任何人都可以无需密码验证而直接登录到FTP服务器。

    搭建过程:

    yum install vsftpd* ftp  -y

    iptables -F

    service iptables save

     

    mv /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf_bak

    grep -v "#" /etc/vsftpd/vsftpd.conf_bak > /etc/vsftpd/vsftpd.conf

     

    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

     

    1步:修改主配置文件:vim /etc/vsftpd/vsftpd.conf

    添加下5注意空格,删除译文

    anonymous_enable=YES(默认开启)#是否允许匿名用户访问

    anon_umask=022     #匿名用户上传文件的umask

    anon_upload_enable=YES #是否允许匿名用户上传文件

    anon_mkdir_write_enable=YES #是否允许匿名用户创建目录

    anon_other_write_enable=YES #是否允许匿名用户修改、删除 创建目录

     

    #2行,默认不添加

    anon_max_rate=0 #匿名用户的最大传输速率(字节/秒),0为不限制

    anon_root=/var/ftp/pub #指定匿名用户的FTP根目录

     

     

    2步:重启服务,并设置开机启动

    systemctl restart vsftpd

    systemctl enable vsftpd

     

     

    3步:测试

    报错1

    [root@gyt~]# ftp 192.168.1.109

    Connected to 192.168.1.109 (192.168.1.109).

    220 (vsFTPd 3.0.2)

    Name (192.168.1.109:root): ftp

    331 Please specify the password.

    Password:此处敲击回车即可

    230 Login successful.

    Remote system type is UNIX.

    Using binary mode to transfer files.

    ftp> cd pub  #切换匿名用户根目录/var/ftp/pub

    250 Directory successfully changed.

    ftp> mkdir files    #创建目录文件

    550 Permission denied.  #系统提示“权限拒绝”(Permission denied

    vsftpd服务程序的匿名开放认证模式下,默认访问的是/var/ftp目录。查看该目录的权限得知,只有root管理员才有写入权限。下面将目录的所有者身份改成系统账户ftp即可(该账户在系统中已经存在),这样应该可以了吧:

     

    解决报错1

     

    1)查看目录权限:

    [root@gyt ~]# ls -ld /var/ftp/pub

    drwxr-xr-x. 3 root root 16 Jul 13 14:38 /var/ftp/pub

    (2)修改属主

    [root@gyt ~]# chown -Rf ftp /var/ftp/pub

    [root@gyt ~]# ls -ld /var/ftp/pub

    drwxr-xr-x. 3 ftp root 16 Jul 13 14:38 /var/ftp/pub

     

     

    报错2

    [root@linuxprobe ~]# ftp 192.168.1.109

    Connected to 192.168.1.109 (192.168.1.109).

    220 (vsFTPd 3.0.2)

    Name (192.168.1.109:root): ftp

    331 Please specify the password.

    Password:此处敲击回车即可

    230 Login successful.

    Remote system type is UNIX.

    Using binary mode to transfer files.

    ftp> cd pub

    250 Directory successfully changed.

    ftp> mkdir files

    550 Create directory operation failed.   

    #系统提示“创建目录的操作失败”(Create directory operation failed

     

    想必各位读者也应该意识到是SELinux服务在“捣乱”

    下面使用getsebool命令查看与FTP相关的SELinux域策略都有哪些:

     

    [root@gyt ~]# 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

     

    解决报错2

    根据经验(需要长期培养,别无它法)和策略的名称判断出ftpd_full_access--> off策略规则导致了操作失败。接下来修改该策略规则,并且在设置时使用-P参数让修改过的策略永久生效,确保在服务器重启后依然能够顺利写入文件。

     

    [root@gyt ~]# setsebool -P ftpd_full_access=on

     

    再次测试:

    [root@gyt ~]# ftp 192.168.1.109

    Connected to 192.168.1.109 (192.168.1.109).

    220 (vsFTPd 3.0.2)

    Name (192.168.1.109:root): ftp

    331 Please specify the password.

    Password:此处敲击回车即可

    230 Login successful.

    Remote system type is UNIX.

    Using binary mode to transfer files.

    ftp> cd pub

    250 Directory successfully changed.

    ftp> mkdir files

    257 "/pub/files" created

    ftp> rename files database

    350 Ready for RNTO.

    250 Rename successful.

    ftp> rmdir database

    250 Remove directory operation successful.

    ftp> exit

    221 Goodbye.

     

     

     

     

     

    2.本地用户模式:

    是通过Linux系统本地的账户密码信息进行认证的模式,相较于匿名开放模式更安全,而且配置起来也很简单。但是如果被黑客破解了账户的信息,就可以畅通无阻地登录FTP服务器,从而完全控制整台服务器。

     

    搭建过程:

    yum install vsftpd* ftp  -y

    iptables -F

    service iptables save

     

    mv /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf_bak

    grep -v "#" /etc/vsftpd/vsftpd.conf_bak > /etc/vsftpd/vsftpd.conf

     

    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

     

    1步:修改配置文件:

    [root@gyt ~]# vim /etc/vsftpd/vsftpd.conf

    anonymous_enable=NO #禁止匿名访问模式

    local_enable=YES #允许本地用户模式

    write_enable=YES #设置可写权限

    local_umask=022 #本地用户模式创建文件的umask

    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

     

     

    默认不配置下行:

    userlist_deny=YES #启用“禁止用户名单”,名单文件为ftpusersuser_list

     

    2步:重启服务

    [root@gyt ~]# systemctl restart vsftpd

    [root@gyt ~]# systemctl enable vsftpd

     

    3步:测试

    #按理来讲,现在已经完全可以本地用户的身份登录FTP服务器了。但是在使用root管理员登录后,系统提示如下的错误信息:

    报错1

    [root@gyt ~]# ftp 192.168.1.109

    Connected to 192.168.1.109 (192.168.1.109).

    220 (vsFTPd 3.0.2)

    Name (192.168.1.109:root): root

    530 Permission denied.

    Login failed.    #登录失败

    ftp>

    #原因:ftpusersuser_list这两个文件里的系统用户禁止登录。

    解决方法1:删除这2个文件里的系统用户如下:

    解决办法2:重新创建新系统用户,保证这2个文件里没有用户名。

    [root@gyt ~]# cat /etc/vsftpd/user_list

    1 # vsftpd userlist

    2 # If userlist_deny=NO, only allow users in this file

    3 # If userlist_deny=YES (default), never allow users in this file, and

    4 # do not even prompt for a password.

    5 # Note that the default vsftpd pam config also check/etc/vsftpd/ftpusers

    6 # for users that are denied.

    7 root #删除root

    8 bin

    9 daemon

    .....

    [root@gyt ~]# cat /etc/vsftpd/ftpusers 

    # Users that are not allowed to login via ftp

    1 root    #删除root

    2 bin

    3 daemon

    .....

    果然如此!vsftpd服务程序为了保证服务器的安全性而默认禁止了root管理员和大多数系统用户的登录行为,这样可以有效地避免黑客通过FTP服务对root管理员密码进行暴力破解。如果您确认在生产环境中使用root管理员不会对系统安全产生影响,只需按照上面的提示删除掉root用户名即可。我们也可以选择ftpusersuser_list文件中没有的一个普通用户尝试登录FTP服务器:

     

    #在采用本地用户模式登录FTP服务器后,默认访问的是该用户的家目录,也就是说,访问的是/home/gyt目录。而且该目录的默认所有者、所属组都是该用户自己,因此不存在写入权限不足的情况。但是当前的操作仍然被拒绝,是因为我们刚才将虚拟机系统还原到最初的状态了。为此,需要再次开启SELinux域中对FTP服务的允许策略:

     

    设置SELinux域允许策略,然后使用本地用户模式登录FTP服务器。

    [root@gyt ~]# getsebool -a | grep ftp

    [root@gyt ~]# setsebool -P ftpd_full_access=on

    #在实验课程和生产环境中设置SELinux域策略时,一定记得添加-P参数,否则服务器在重启后就会按照原有的策略进行控制,从而导致配置过的服务无法使用。

     

     

    [root@gyt ~]# ftp 192.168.1.109

    Connected to 192.168.1.109 (192.168.1.109).

    220 (vsFTPd 3.0.2)

    Name (192.168.1.109:root): root

    331 Please specify the password.

    Password:此处输入该用户的密码

    230 Login successful.

    Remote system type is UNIX.

    Using binary mode to transfer files.

    ftp> mkdir files

    257 "/home/gyt/files" created

    ftp> rename files database

    350 Ready for RNTO.

    250 Rename successful.

    ftp> rmdir database

    250 Remove directory operation successful.

    ftp> exit

    221 Goodbye.

     

     

     

     

    3.虚拟用户模式:

    虚拟用户模式是这三种模式中最安全的一种认证模式,当然,因为安全性较之于前面两种模式有了提升,所以配置流程也会稍微复杂一些。

     

    搭建过程

    yum -y install lrzsz*  (远程连接rz上传 sz 文件名 下载软件)

    yum install vsftpd* ftp  -y

    iptables -F

    service iptables save

     

    mv /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf_bak

     

    grep -v "#" /etc/vsftpd/vsftpd.conf_bak > /etc/vsftpd/vsftpd.conf

    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

     

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

    [root@gyt ~]# cd /etc/vsftpd/

    [root@gyt vsftpd]# vim vuser.list

    gyt

    123.com

    penglang

    123456

    xiaowang

    123456

     

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

     

    [root@gyt vsftpd]# db_load -T -t hash -f vuser.list vuser.db #转换成数据库文件

    [root@gyt vsftpd]# file vuser.db  

    vuser.db: Berkeley DB (Hash, version 9, native byte-order)

    [root@gyt vsftpd]# chmod 600 vuser.db

    [root@gyt vsftpd]# rm -f vuser.list

     

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

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

    [root@gyt ~]# useradd -d /var/ftproot -s /sbin/nologin virtual

    [root@gyt ~]# ls -ld /var/ftproot/

    drwx------. 3 virtual virtual 74 Jul 14 17:50 /var/ftproot/

    [root@gyt ~]# chmod -Rf 755 /var/ftproot/

     

    3步:建立用于支持虚拟用户的PAM文件vsftpd.vu

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

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

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

     

    [root@gyt ~]# 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.vuPAM作为应用程序层与鉴别模块层的连接纽带,可以让应用程序根据需求灵活地在自身插入所需的鉴别功能模块。当应用程序需要PAM认证时,则需要在应用程序中定义负责认证的PAM配置文件,实现所需的认证功能。

     

    [root@gyt ~]# vim /etc/vsftpd/vsftpd.conf

    anonymous_enable=NO   #禁止匿名开放模式

    local_enable=YES #允许本地用户模式

    guest_enable=YES #开启虚拟用户模式

    guest_username=virtual #指定虚拟用户账户

    allow_writeable_chroot=YES #允许对禁锢的FTP根目录执行写入操作

    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#指定PAM文件

    userlist_enable=YES

    tcp_wrappers=YES

     

    5步:为虚拟用户设置不同的权限。虽然账户gytpenglang都是用于vsftpd服务程序认证的虚拟账户,但是我们依然想对这两人进行区别对待。比如,允许gyt上传、创建、修改、查看、删除文件,只允许penglang查看文件。这可以通过vsftpd服务程序来实现。只需新建一个目录,在里面分别创建两个以gyt和pemglang命名的文件,其中在名为gyt的文件中写入允许的相关权限(使用匿名用户的参数):

     

    [root@gyt ~]# mkdir /etc/vsftpd/vusers_dir/

    [root@gyt ~]# cd /etc/vsftpd/vusers_dir/

    创建3个用户文件写入权限:

    [root@gyt vusers_dir]# vim gyt 

    复制时请注意删除译文;

    anon_upload_enable=YES #是否允许匿名用户下载文件

    anon_mkdir_write_enable=YES #是否允许匿名用户创建目录

    anon_other_write_enable=YES #是否允许匿名用户修改、删除 创建目录

     

    其他用户配置如下:

    [root@gyt vusers_dir]# vim penglang    #查看、下载 创建目录(不能删除)

    anon_upload_enable=YES

    anon_mkdir_write_enable=YES

    [root@gyt vusers_dir]# vim xiaowang #查看、下载文件

    anon_upload_enable=YES

     

     

     

    6步:然后再次修改vsftpd主配置文件,通过添加user_config_dir参数来定义这两个虚拟用户不同权限的配置文件所存放的路径。为了让修改后的参数立即生效,需要重启vsftpd服务程序并将该服务添加到开机启动项中:

    [root@gyt ~]# vim /etc/vsftpd/vsftpd.conf

    #完整配置:

    anonymous_enable=NO

    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/vusers_dir

    7步:重启服务,设置开机启动,设置SELinux域允许策略

    [root@gyt ~]# systemctl restart vsftpd

    [root@gyt ~]# systemctl enable vsftpd

     

    设置SELinux域允许策略,然后使用虚拟用户模式登录FTP服务器。

    [root@gyt ~]# getsebool -a | grep ftp

    [root@gyt ~]# setsebool -P ftpd_full_access=on

    8步:测试

    #此时,不但可以使用虚拟用户模式成功登录到FTP服务器,还可以分别使用账户gyt和pemglang来检验他们的权限。当然,读者在生产环境中一定要根据真实需求来灵活配置参数,不要照搬这里的实验操作。

    [root@gyt ~]# ftp 192.168.1.109

    Connected to 192.168.1.109 (192.168.1.109).

    220 (vsFTPd 3.0.2)

    Name (192.168.1.109:root): xiaowang  #虚拟用户xiaowang登录

    331 Please specify the password.

    Password:此处输入虚拟用户的密码

    230 Login successful.

    Remote system type is UNIX.

    Using binary mode to transfer files.

    ftp> mkdir files     

    550 Permission denied.     #系统提示“权限拒绝”(Permission denied

    ftp> exit

    221 Goodbye.

     

    [root@gyt ~]# ftp 192.168.1.109

    Connected to 192.168.1.109 (192.168.1.109).

    220 (vsFTPd 3.0.2)

    Name (192.168.1.109:root): gyt    #虚拟用户gyt登录

    331 Please specify the password.

    Password:此处输入虚拟用户的密码

    230 Login successful.

    Remote system type is UNIX.

    Using binary mode to transfer files.

    ftp> mkdir files #默认创建的文件根文件目录在/var/ftproot

    257 "/files" created

    ftp> rename files database #重命名文件数据库

    350 Ready for RNTO. #准备好了

    250 Rename successful. #改名成功

    ftp> rmdir database #rmdir数据库

    250 Remove directory operation successful. #删除目录操作成功

    ftp> exit

    221 Goodbye.   

     

    重启服务器时。注意防火墙设置iptables -F 清除

    注意上传文件的属主属组以及权限需要改为644可以下载。

  • 相关阅读:
    prev()方法使用的注意点
    JS 获取图片的高度
    渐变色
    JS获取时间
    监听鼠标上下滚动事件
    几种常见的边框样式
    左侧导航背景颜色随机变化
    apache开启gzip压缩
    dedecms在linux上安装提示没权限解决办法
    阿里云centos7.3安装lamp环境
  • 原文地址:https://www.cnblogs.com/gytbolg/p/11013391.html
Copyright © 2011-2022 走看看