zoukankan      html  css  js  c++  java
  • Linux网络安全篇,FTP服务器的架设

    一、FTP简介

    FTP基于TCP协议。而且FTP服务器使用了命令通道数据流通道两个连接。两个连接都会分别进行三次握手。在命令通道中客户端会随机取一个大于1024的端口与FTP服务器的21端口建立连接。连接成功之后,需要数据传输的时候,FTP服务端会主动用20端口与客户端连接。即命令通道===>port21,数据传输通道===>port20。

    二、FTP

    二、将用户分为三个身份

    • 匿名用户(ftp,anonymous)
    • 本地用户
    • 虚拟用户

    1匿名用户

    (1).概述

    可以理解为该账号是共享的,并不是针对某个人或某个身份设定的账号。ftp默认提供的匿名用户有如下

    • ftp
    • anonymous

    (2).启用匿名用户登录权限

    需要在ftp配置文件 /etc/vsftpd/vsftpd.conf 中添加如下语句:

    anonymous_enable=YES

    2本地用户

    (1).概述

    即系统实体账号(可以以正常方式登录FTP服务器的账号)

    (2).启用本地账号登录权限

    需要在ftp配置文件 /etc/vsftpd/vsftpd.conf 中添加如下语句:

    local_enable=YES ===> 开启本地用户登录FTP权限
    
    userlist_enable=YES ===> 启用user_list [/etc/vsftpd/user_list] 文件控管本地账号
    
    userlist_deny=YES ===> 
    如果为yes,user_list文件中的用户将被禁止登录FTP服务器
    如果为no,user_list文件中的用户将被允许登录FTP服务器
    该设置若想生效,则userlist_enable的值必须为YES
    
    userlist_file=/etc/vsftpd/user_list ===> 指定user_list所在位置
    

    3虚拟用户

    (1).概述

    虚拟用户就是没有实际的真实系统用户,而是通过映射到其中一个真实用户以及设置相应的权限来实现访问验证,虚拟用户不能登录Linux系统,从而让系统更加的安全可靠。虚拟用户需用到的软件及认证模块

    (2).启用虚拟用户登录

    ①创建虚拟用户文档文件

    vim/etc/vsftpd/virtual.txt
    
    
    输入以下信息
    
    [用户名]
    [密码]
    [用户名]
    [密码]
    [用户名]
    [密码]
    [用户名]
    [密码]
    ....
    
    
    注意:奇数行账号,偶数行密码

    ②根据文档创建加密的虚拟用户数据库文件

    db_load -T -t hash -f /etc/vsftpd/virtual.txt /etc/vsftpd/virtual.db
    
    
    -T ===> 允许应用程序能够将文本文件转译载入进数据库。
    -t ===> 指定了选项-T,那么一定要追加子选项-t;子选项-t,追加在在-T选项后,用来指定转译载入的数据库类型,hash就是使用hash码加密。
    -f ===> 后面接包含用户名和密码的文本文件,文件的内容是:奇数行用户名、偶数行密码。
    
    该命令的意思是:
    
    利用/etc/vsftpd/virtual.txt中的用户名和密码创建虚拟用户,并将用户文本信息转换为db数据库并使用hash加密。

    ③创建所有虚拟用户需要映射的统一本地账号,并且禁止该本地账号登录系统,但允许登录其他服务例如ftp

    useradd -d /var/virtual -s /sbin/nologin virtual
    
    
    -s表示指定用户所用的shell,此处为/sbin/nologin,表示不允许登录系统,但是可以登录其他服务,例如ftp

    ④设置本地账户(需要虚拟用户映射的本地账号,该系统用户不需要密码,也不需要登录,主要用于虚拟用户映射使用)的主目录权限

    chmod 755 /var/virtual/

    ⑤创建并编辑支持虚拟用户的PAM认证文件

    vim /etc/pam.d/vsftpd.vu
    
    
    编辑文件内容如下:
    
    auth    required  /lib/security/pam_userdb.so  db=/etc/vsftpd/virtual
    account required  /lib/security/pam_userdb.so  db=/etc/vsftpd/virtual
    
    
    注意:
    (1).由db参数绑定虚拟用户数据库文件
    (2).若你的系统为64位系统,则第二项应该改为 /lib64/security/pam_userdb.so
    

    ⑥在/etc/vsftpd/vsftpd.conf中添加如下信息:

    guest_enable=YES
    guest_username=virtual
    pam_service_name=vsftpd.vu
    
    
    解析:
    guest_enable=YES ===> 启用虚拟账号登录FTP
    guest_username ===> 映射虚拟用户至系统用户(后面接的为第三步创建的需要映射虚拟用户的本地账号)
    pam_service_name ===> 虚拟用户启用pam认证(后面接的文件为第五步创建的pam认证文件,因为该文件在/etc/pam.d目录内,vsftpd程序会自动寻找到该目录,故无需指明文件所在路径,仅须指明该文件名称即可)

    注意:因为虚拟用户和本地用户指定的认证文件不同,所以不可以同时开放二者登录,在本博客中

    虚拟用户认证配置 ===> pam_service_name=vsftpd.vu

    本地用户认证配置 ===> pam_service_name=vsftpd

    所以在允许一方登录的时候,另一方便无法登录。

    三、允许(禁止)指定用户登录FTP服务器(针对本地用户)

    1.PAM模块控制

    由 /etc/pam.d/vsftpd文件文件指定禁止访问用户列表文件。该文件中有一个file关键字指定一个文件,记录在那个文件中的用户将会被禁止登录FTP服务器。

    从中我们可以看到记录禁止用户的文件是 /etc/vsftpd/ftpusers 文件,我们查看一下该文件的内容:

    2.由/etc/vsftpd/vsftpd.conf 指定的本地账户禁止登录名单文件

    可以看到本机指定的文件为 /etc/vsftpd/user_list文件.

    注意:该文件是否生效取决于

    userlist_enable=YES

    userlist_deny=YES/NO

    这两行代码。

    四、允许/禁止指定用户跳出用户主目录(针对本地用户)

    默认情况下FTP用户是不具备跳出自己主目录的权限的。因为一旦可以进入到系统目录,将会产生很危险的情况。那么如何调整用户的这个权限呢?可以通过修改/etc/vsftpd/vsftpd.conf文件中的以下键值来配置:

    chroot_local_user=YES/NO
    YES ===> 用户将会被限制在已设定好的主目录之内
    NO ===> 用户可以进入到当前FTP服务器FTP目录的上层目录随意切换
    
    chroot_list_enable=YES/NO
    YES ===> 可以将需要设置的用户写入到指定文件中集体管理他们的chroot功能
    NO ===> 不开启文件集体管理用户功能
    注意:只要该功能开启,chroot_list_file的设置才会生效
    
    chroot_list_file=/etc/vsftpd/chroot_list
    写入到/etc/vsftpd/chroot_list文件中的用户将获得跳出当前FTP用户主目录的权利,而不被记录的用户将不具备跳出FTP用户主目录的权利(前提是chroot_list_enable=YES)

    注意:很多人会发现启用这个功能后,会导致没有出现在 chroot_list 中的用户将无法登录FTP服务器,这时候会报错:

    refusing to run with writable root inside chroot(),意思是不能使用chroot限制可写的根目录.针对这个问题,我们有两个解决方案:

    ①:在/etc/vsftpd/vsftpd.conf配置文件中加入

    allow_writeable_chroot=YES

    ②:去掉FTP用户主目录可写的权限:

    chmod a-w [用户主目录]
    
    eg:
    chmod a-w /home/user1
    chomd u-w /home/user1   ===>   因为用户主目录默认只有自己有读写执行权限

    五、设置FTP用户主目录

    1.默认状态

    默认情况下,

    匿名用户的主目录为 /var/ftp

    本地用户的主目录为 /home/用户名(或者创建用户时由-d指定的用户主目录路径)

    2.集体管理

    我们可以在

    /etc/vsftpd/vsftpd.conf 文件中配置参数统一管理用户主目录,方法如下:

    (1).为所有匿名用户统一配置主目录

    anon_root=[路径]
    

    (2).为所有本地用户统一配置主目录

    local_root=[路径]

    如果我既不想用本地用户的主目录作为FTP用户主目录,又不想给他们指定统一的主目录该怎么办?简单,往下看

    3.为用户分别设置主目录

    在 /etc/vsftpd/vsftpd.conf 文件中加入以下参数

    user_config_dir=[用户配置文件路径]

    然后在 [用户配置文件路径] 下新建每个用户的配置文件(文件名与用户名相同),并且在新建的配置文件中写入:

    local_root=[路径]

    重启服务器之后,每个用户的FTP主目录即为该用户配置文件中指定的用户主目录

    六、错误代码举例

    110 重新启动标记应答。
    120 服务在多久时间内ready。
    125 数据链路端口开启,准备传送。
    150 文件状态正常,开启数据连接端口。
    200 命令执行成功。
    202 命令执行失败。
    211 系统状态或是系统求助响应。
    212 目录的状态。
    213 文件的状态。
    214 求助的讯息。
    215 名称系统类型。
    220 新的联机服务ready。
    221 服务的控制连接端口关闭,可以注销。
    225 数据连结开启,但无传输动作。
    226 关闭数据连接端口,请求的文件操作成功。
    227 进入passive mode。
    230 使用者登入。
    250 请求的文件操作完成。
    257 显示目前的路径名称。
    331 用户名称正确,需要密码。
    332 登入时需要账号信息。
    350 请求的操作需要进一部的命令。
    421 无法提供服务,关闭控制连结。
    425 无法开启数据链路。
    426 关闭联机,终止传输。
    450 请求的操作未执行。
    451 命令终止:有本地的错误。
    452 未执行命令:磁盘空间不足。
    500 格式错误,无法识别命令。
    501 参数语法错误。
    502 命令执行失败。
    503 命令顺序错误。
    504 命令所接的参数不正确。
    530 未登入。
    532 储存文件需要账户登入。
    550 未执行请求的操作。
    551 请求的命令终止,类型未知。
    552 请求的文件终止,储存位溢出。  
    553 未执行请求的的命令,名称不正确。


    七、示列配置文件

    #=====================匿名用汉语====================
    anonymous_enable=YES
    anon_world_readable_only=NO
    anon_other_write_enable=YES
    anon_upload_enable=YES
    anon_mkdir_write_enable=YES
    no_anon_password=YES
    anon_umask=077
    #===================================================
    #
    #=====================本地用户======================
    local_enable=YES
    #pam_service_name=vsftpd
    write_enable=YES
    local_umask=022
    userlist_enable=YES
    userlist_deny=YES
    userlist_file=/etc/vsftpd/user_list
    chroot_local_user=YES
    chroot_list_enable=YES
    chroot_list_file=/etc/vsftpd/chroot_list
    
    #===================================================
    
    #=====================虚拟用户======================
    guest_enable=YES
    guest_username=virtual
    pam_service_name=vsftpd.vu
    #===================================================
    #
    #=====================综合配置======================
    dirmessage_enable=YES
    xferlog_enable=YES
    xferlog_file=/var/log/xferlog
    dual_log_enable=YES
    vsftpd_log_file=/var/log/vsftpd.log
    connect_from_port_20=YES
    xferlog_std_format=YES
    listen=NO
    listen_ipv6=YES
    tcp_wrappers=YES
    #===================================================
    

    八、上传下载权限

    1.匿名用户

    默认情况下,匿名用户所有上传下载,所使用的用户都是ftp用户的权限,若要上传文件,则需要ftp用户有写的权限,若要下载,则需要ftp用户有读的权限。而ftp一般对应着FTP服务器上其他人(other)的权限。

    (1)下载文件

    anon_world_readable_only=[YES|NO]
    
    仅允许匿名用户具有下载可读文件的权限
    
    注意:
    
    有时候我们会觉得不管将它设成YES还是NO,效果都一样,用户依旧能浏览目录和下载文件。但其实是错的,真实情况是:
    
    对于目录来说,如果“其他人”没有可读权限,且anon_world_readable_only=YES,则匿名用户无法浏览该目录下的所有内容(看上去像个空目录)
    对于文件来说,如果“其他人”没有可读权限,且anon_world_readable_only=YES,则匿名用户无法下载该文件。

    (2)上传文件

    anon_upload_enable=[YES|NO]
    
    NO  ===> 不允许匿名用户上传文件
    YES ===> 允许匿名用户上传文件(若想要此设置生效,anon_other_write_enable=YES必须设置)

    2.本地用户、虚拟用户

    关于本地用户,它本来在linux系统上就有设定好的权限。而虚拟用户本质上也会映射到一个本地用户,所以虚拟用户的权限取决于映射到的那个本地用户的权限。

    local_umask=022 ===> 目录权限为755,文件权限为644

  • 相关阅读:
    题解 CF702F 【T-Shirts】
    题解 CF914G 【Sum the Fibonacci】
    CF258D 【Little Elephant and Broken Sorting】
    socket 私有服务端验证方法
    Gateway + Oauth2 + Security认证与授权 [更新中]
    串并转换和并串转换
    序列检测机【转】
    浮点数的定点化
    Verilog实现同步FIFO和异步FIFO
    频率检测计
  • 原文地址:https://www.cnblogs.com/viplanyue/p/12700481.html
Copyright © 2011-2022 走看看