• vsftp搭建


    vsftp搭建

    vsftpd(very secure ftp
    daemon,非常安全的FTP守护进程)是一款运行在Linux操作系统上的FTP服务程序,不仅完全开源而且免费,此外,还具有很高的安全性、传输速度,以及支持虚拟用户验证等其他FTP服务程序不具备的特点。

    安装

    [root@linuxprobe ~]# yum install vsftpd
    

    查看vsftp配置

    # 备份配置文件
    [root@linuxprobe ~]# mv /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf_bak
    [root@linuxprobe ~]# grep -v "#" /etc/vsftpd/vsftpd.conf_bak > /etc/vsftpd/vsftpd.conf
    # 查看配置
    [root@linuxprobe ~]# cat /etc/vsftpd/vsftpd.conf
    

    常用参数

    参数 作用
    listen=[YES|NO] 是否以独立运行的方式监听服务
    listen_address=IP地址 设置要监听的IP地址
    listen_port=21 设置FTP服务的监听端口
    download_enable=[YES|NO] 是否允许下载文件
    userlist_enable=[YES|NO] userlist_deny=[YES|NO] 设置用户列表为“允许”还是“禁止”操作
    max_clients=0 最大客户端连接数,0为不限制
    max_per_ip=0 同一IP地址的最大连接数,0为不限制
    anonymous_enable=[YES|NO] 是否允许匿名用户访问
    anon_upload_enable=[YES|NO] 是否允许匿名用户上传文件
    anon_umask=022 匿名用户上传文件的umask值
    anon_root=/var/ftp 匿名用户的FTP根目录
    anon_mkdir_write_enable=[YES|NO] 是否允许匿名用户创建目录
    anon_other_write_enable=[YES|NO] 是否开放匿名用户的其他写入权限(包括重命名、删除等操作权限)
    anon_max_rate=0 匿名用户的最大传输速率(字节/秒),0为不限制
    local_enable=[YES|NO] 是否允许本地用户登录FTP
    local_umask=022 本地用户上传文件的umask值
    local_root=/var/ftp 本地用户的FTP根目录
    chroot_local_user=[YES|NO] 是否将用户权限禁锢在FTP目录,以确保安全
    local_max_rate=0 本地用户最大传输速率(字节/秒),0为不限制

    三种模式的配置

    匿名模式

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

    常用参数

    参数 作用
    anonymous_enable=YES 允许匿名访问模式
    anon_umask=022 匿名用户上传文件的umask值
    anon_upload_enable=YES 允许匿名用户上传文件
    anon_mkdir_write_enable=YES 允许匿名用户创建目录
    anon_other_write_enable=YES 允许匿名用户修改目录名称或删除目录

    配置文件

    [root@localhost vsftpd]# cat vsftpd.conf
    # 匿名模式
    anonymous_enable=YES
    anon_umask=022
    anon_upload_enable=YES
    anon_mkdir_write_enable=YES
    anon_other_write_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
    

    本地用户模式

    相较于匿名开放模式,本地用户模式要更安全,而且配置起来也很简单。

    常用参数

    参数 作用
    anonymous_enable=NO 禁止匿名访问模式
    local_enable=YES 允许本地用户模式
    write_enable=YES 设置可写权限
    local_umask=022 本地用户模式创建文件的umask值
    userlist_enable=YES 启用“禁止用户名单”,名单文件为ftpusers和user_list
    userlist_deny=YES 开启用户作用名单文件功能

    配置文件

    [root@localhost vsftpd]# cat 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
    

    虚拟用户模式

    虚拟用户模式是这三种模式中最安全的一种认证模式

    第1步:创建ftp认证的用户数据库文件,奇数行为账户名,偶数行为密码。

    # zhangsan和lisi密码都是redhat
    [root@linuxprobe ~]# cd /etc/vsftpd/
    [root@linuxprobe vsftpd]# vim vuser.list
    zhangsan
    redhat
    lisi
    redhat
    

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

    [root@linuxprobe vsftpd]# db_load -T -t hash -f vuser.list vuser.db
    # 查看文件类型
    [root@linuxprobe vsftpd]# file vuser.db
    vuser.db: Berkeley DB (Hash, version 9, native byte-order)
    # 修改权限为user的权限为rw
    [root@linuxprobe vsftpd]# chmod 600 vuser.db
    # 删除明文信息
    [root@linuxprobe vsftpd]# rm -f vuser.list
    

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

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

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

    # 设置用户nologin登陆,家目录为/var/ftproot
    [root@linuxprobe ~]# useradd -d /var/ftproot -s /sbin/nologin virtual
    [root@linuxprobe ~]# ls -ld /var/ftproot/
    drwx------. 3 virtual virtual 74 Jul 14 17:50 /var/ftproot/
    # 修改权限为755
    [root@linuxprobe ~]# chmod -Rf 755 /var/ftproot/
    

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

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

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

    1563625821758

    图11-2 PAM的分层设计结构

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

    [root@linuxprobe ~]# 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文件即可。

    常用参数:

    参数 作用
    anonymous_enable=NO 禁止匿名开放模式
    local_enable=YES 允许本地用户模式
    guest_enable=YES 开启虚拟用户模式
    guest_username=virtual 指定虚拟用户账户
    pam_service_name=vsftpd.vu 指定PAM文件
    allow_writeable_chroot=YES 允许对禁锢的FTP根目录执行写入操作,而且不拒绝用户的登录请求

    配置文件

    [root@localhost vsftpd]# cat 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认证文件为刚才设置的数据库
    pam_service_name=vsftpd.vu
    userlist_enable=YES
    tcp_wrappers=YES
    

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

    [root@linuxprobe ~]# mkdir /etc/vsftpd/vusers_dir/
    [root@linuxprobe ~]# cd /etc/vsftpd/vusers_dir/
    # lisi只有默认查看权限
    [root@linuxprobe vusers_dir]# touch lisi
    # 设置zhangsan可以上传文件,创建文件夹和写文件
    [root@linuxprobe vusers_dir]# vim zhangsan
    anon_upload_enable=YES
    anon_mkdir_write_enable=YES
    anon_other_write_enable=YES
    
    

    配置文件

    [root@localhost vsftpd]# cat 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认证文件为刚才设置的数据库
    pam_service_name=vsftpd.vu
    # 添加虚拟用户权限文件
    user_config_dir=/etc/vsftpd/vusers_dir
    
    userlist_enable=YES
    tcp_wrappers=YES
    

    出现的问题

    vsftpd:500 OOPS: vsftpd: refusing to run with writable root inside chroot 错误解决方法

    原因

    从2.3.5之后,vsftpd增强了安全检查,如果用户被限定在了其主目录下,则该用户的主目录不能再具有写权限了!如果检查发现还有写权限,就会报该错误。

    解决方法

    第一种解决方法

    将用户主目录去除写权限。
    chmod a-w /home/XX/
    但是这样用户就不能进行写操作了。

    第二种解决方法

    在vsftpd.conf中新增allow_writeable_chroot=YES配置
    配置文件路径:/etc/vsftpd/vsftpd.conf
    新增如下:

    allow_writeable_chroot=YES  #允许用户具有主目录写权限
    

    这样用户被限定在了主目录中,并且具有写权限了。

  • 相关阅读:
    [工具分享]JetBrains ReSharper 9.0 正式版和注册码
    JAVA数据库连接池的革命 -- 从BoneCP到HikariCP
    【C#教程10】C# 判断
    【C#教程09】C# 运算符
    【C#教程07】C# 变量
    【C#教程06】C# 类型转换
    【C# 教程05】C# 数据类型
    【C# 教程04】C# 基本语法
    【C# 教程03】C# 程序结构
    【C#教程02】C# 环境
  • 原文地址:https://www.cnblogs.com/akiz/p/11219162.html
Copyright © 2020-2023  润新知