• FTP虚拟账户


    部署一个内网FTP服务器

    为了解决公司员工文件存储和下载的需求。要求部署内部FTP服务器,员工可以通过自己的账号的权限对FTP进行操作。

    1)公司公共文件可以通过匿名下载

    2)公司财务部、商务部、行政部、技术部分别拥有自己的部门文件夹,彼此之间相互隔离

    3)部门之间只有主管才能拥有上传权限,普通员工只能下载

    4)禁止用户查看家目录以外的数据

    5)确保ftp账号安全


    一、案例分析

    1)FTP需要开启匿名下载 默认FTP支持匿名下载

    2)分析针对不同部分实现目录隔离 有两种方法 1.同部门共用本地账号 2.虚拟账号

    3)部门内部员工权限不同 实现方法 虚拟账号

    4)禁止用户切出 chroot

    5)防止本地账号泄露 虚拟账号

    整合细节分析,基本思路清晰:部署一个基于虚拟账号登陆的FTP服务器。

    二、部署流程

    a、关闭Firewall、selinux

    b、安装vsftp服务

    c、部署基于虚拟账号的FTP

    d、测试

    2.1)关闭主动安全

    a、禁止防火墙开机启动
    [root@baism ~]# systemctl disable firewalld
    Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
    Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.

    关闭当前防火墙
    [root@baism ~]# systemctl stop firewalld.service


    验证关闭成功
    [root@baism ~]# systemctl status firewalld.service
    ● firewalld.service - firewalld - dynamic firewall daemon          
      Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
      Active: inactive (dead)
        Docs: man:firewalld(1)

    3月 01 10:49:46 baism.ayitula.com systemd[1]: Starting firewalld - dynamic firewall daemon...
    3月 01 10:49:47 baism.ayitula.com systemd[1]: Started firewalld - dynamic firewall daemon.
    3月 01 10:53:52 baism.ayitula.com systemd[1]: Stopping firewalld - dynamic firewall daemon...
    3月 01 10:53:53 baism.ayitula.com systemd[1]: Stopped firewalld - dynamic firewall daemon.

    b、关闭selinux,重启生效
    selinux从开启状态的enforcing、permissive切换到关闭状态disabled,或者相反切换都需要重启计算机才能。
    [root@baism ~]# sed -r -i '/^SELINUX=/cSELINUX=disabled' /etc/selinux/config
    [root@baism ~]# init 6


    c、本步骤验证
    [root@baism ~]# getenforce
    Disabled

    [root@baism ~]# systemctl is-active firewalld.service
    unknown

    看状态操作成功,我们继续下一步骤吧

    2.2)安装vsftp服务 服务器baism.ayitula.com 192.168.11.16

    安装vsftp服务
    a、安装服务
    [root@baism ~]# yum -y install vsftpd

    b、设置开机启动
    [root@baism ~]# systemctl enable vsftpd
    Created symlink from /etc/systemd/system/multi-user.target.wants/vsftpd.service to
    /usr/lib/systemd/system/vsftpd.service.

    c、启动服务
    [root@baism ~]# systemctl start vsftpd

    d、验证启动
    [root@baism ~]# systemctl is-active vsftpd
    active

    三、根据需求部署FTP

    a、创建虚拟用户映射的本地账号
    [root@baism ~]# useradd -s /sbin/nologin -d /var/tmp/vuser_ftp ayitula


    b、设置不同部门之间的根文件夹,给予700权限
    [root@baism ~]# mkdir /var/tmp/vuser_ftp/shichang
    [root@baism ~]# mkdir /var/tmp/vuser_ftp/caiwu
    [root@baism ~]# mkdir /var/tmp/vuser_ftp/xingzheng
    [root@baism ~]# mkdir /var/tmp/vuser_ftp/jishu
    [root@baism ~]# chmod 700 /var/tmp/vuser_ftp/*

    修改部门共享文件夹的所有者和属组为ayitula
    [root@baism ~]# chown ayitula.ayitula /var/tmp/vuser_ftp -R


    c、配置文件
    [root@baism ~]# 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_file=/var/log/xferlog
    xferlog_std_format=YES
    idle_session_timeout=600
    data_connection_timeout=120
    chroot_local_user=YES
    chroot_list_enable=YES
    chroot_list_file=/etc/vsftpd/chroot_list
    ls_recurse_enable=YES
    listen=YES
    listen_ipv6=NO

    pam_service_name=vsftpd
    userlist_enable=YES
    tcp_wrappers=YES

    allow_writeable_chroot=YES
    #允许虚拟用户功能 YES的话则本地用户登录家目录会受影响
    guest_enable=YES
    guest_username=ayitula
    #允许虚拟用户和本地用户权限一致
    virtual_use_local_privs=NO
    #如果虚拟用户和本地用户权限不同,可以通过以下的指令来设置指令,配置文件和登陆名同步即可
    #文件名需和用户名一致 如果没有定义则默认只能登陆而没有权限
    user_config_dir=/etc/vsftpd/vconf.d/



    d、建立虚拟用户账号密码文件
    [root@baism ~]# cat /etc/vsftpd/vuser
    sc_01
    123
    xz_01
    123
    js_01
    123
    cw_01
    123
    sc_02
    222
    xz_02
    222
    js_02
    222
    cw_02
    222

    生成账号密码数据库文件
    [root@baism ~]# db_load -T -t hash -f /etc/vsftpd/vuser /etc/vsftpd/vuser.db
    [root@baism ~]# chmod 600 /etc/vsftpd/vuser.db

    e、pam虚拟用户登录验证
    [root@baism ~]# cat /etc/pam.d/vsftpd
    #注意要添加到开头
    auth sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/vuser
    account sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/vuser
    #%PAM-1.0
    session   optional     pam_keyinit.so   force revoke
    auth       required   pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed
    auth       required   pam_shells.so
    auth       include   password-auth
    account   include   password-auth
    session   required     pam_loginuid.so
    session   include   password-auth


    f、定义哪些用户不能切出家目录
    [root@baism ~]# cat /etc/vsftpd/chroot_list
    sc_01
    xz_01
    js_01
    cw_01
    sc_02
    xz_02
    js_02
    cw_02

    g、建立部门员工子配置文件,用于定义权限
    [root@baism ~]# mkdir /etc/vsftpd/vconf.d/
    在改目录下以虚拟用户的名字命名文件,对应虚拟用户

    我这里为了方便以后添加用户,自定义了模板文件
    定义虚拟用户权限
    部门主管有管理权限
    ======================================
    主管模板文件
    [root@baism ~]# cat /etc/vsftpd/vconf.d/01_temp
    #指定家目录
    local_root=/var/tmp/vuser_ftp/XXX
    #允许新建文件或目录权限
    anon_umask=077
    #开放下载权限
    anon_world_readable_only=NO
    #开放上传权限
    anon_upload_enable=YES
    #开放创建目录的权限
    anon_mkdir_write_enable=YES
    #开放删除和重命名目录的权限
    anon_other_write_enable=YES


    部门员工只有下载权限
    部门员工模板文件
    [root@baism ~]# cat /etc/vsftpd/vconf.d/02_temp
    local_root=/var/tmp/vuser_ftp/XXX
    anon_world_readable_only=NO
    ======================================

    以财务主管为例
    [root@baism ~]# cat /etc/vsftpd/vconf.d/cw_01
    local_root=/var/tmp/vuser_ftp/caiwu
    anon_umask=077
    anon_world_readable_only=NO
    anon_upload_enable=YES
    anon_mkdir_write_enable=YES
    anon_other_write_enable=YES


    以财务部门员工为例
    [root@baism ~]# cat /etc/vsftpd/vconf.d/cw_02
    local_root=/var/tmp/vuser_ftp/caiwu
    anon_world_readable_only=NO



    h、重启服务生效
    [root@baism ~]# systemctl restart vsftpd

    四、测试 slave.ayitula.com 192.168.11.116

    测试匿名用户登录
    [root@slave ~]# ftp 192.168.11.16
    Connected to 192.168.11.16 (192.168.11.16).
    220 (vsFTPd 3.0.2)
    Name (192.168.11.16:root): ftp
    331 Please specify the password.
    Password:
    230 Login successful.
    Remote system type is UNIX.
    Using binary mode to transfer files.
    ftp> ls
    227 Entering Passive Mode (192,168,11,16,93,88).
    150 Here comes the directory listing.
    drwxr-xr-x    2 0        0               6 Oct 30 19:45 pub
    226 Directory send OK.
    ftp> bye
    221 Goodbye.


    测试主管用户读写权限
    [root@slave ~]# ftp 192.168.11.16
    Connected to 192.168.11.16 (192.168.11.16).
    220 (vsFTPd 3.0.2)
    Name (192.168.11.16:root): cw_01
    331 Please specify the password.
    Password:
    230 Login successful.
    Remote system type is UNIX.
    Using binary mode to transfer files.
    ftp> mkdir cw111
    257 "/cw111" created
    ftp> ls
    227 Entering Passive Mode (192,168,11,16,101,12).
    150 Here comes the directory listing.
    drwx------    2 1000     1000            6 Mar 01 06:33 cw111
    226 Directory send OK.
    ftp> lcd /etc
    Local directory now /etc
    ftp> put passwd
    local: passwd remote: passwd
    227 Entering Passive Mode (192,168,11,16,215,74).
    150 Ok to send data.
    226 Transfer complete.
    2237 bytes sent in 0.000128 secs (17476.56 Kbytes/sec)
    ftp> ls
    227 Entering Passive Mode (192,168,11,16,241,220).
    150 Here comes the directory listing.
    drwx------    2 1000     1000            6 Mar 01 06:33 cw111
    -rw-------    1 1000     1000         2237 Mar 01 06:33 passwd
    226 Directory send OK.
    ftp> bye
    221 Goodbye.



    测试部门员工
    [root@slave ~]# ftp 192.168.11.16
    Connected to 192.168.11.16 (192.168.11.16).
    220 (vsFTPd 3.0.2)
    Name (192.168.11.16:root): cw_02
    331 Please specify the password.
    Password:
    230 Login successful.
    Remote system type is UNIX.
    Using binary mode to transfer files.

    测试列出目录内容 查看权限
    ftp> ls
    227 Entering Passive Mode (192,168,11,16,94,29).
    150 Here comes the directory listing.
    drwx------    2 1000     1000            6 Mar 01 06:33 cw111
    -rw-------    1 1000     1000         2237 Mar 01 06:33 passwd
    226 Directory send OK.

    测试下载权限
    ftp> get passwd
    local: passwd remote: passwd
    227 Entering Passive Mode (192,168,11,16,230,234).
    150 Opening BINARY mode data connection for passwd (2237 bytes).
    226 Transfer complete.
    2237 bytes received in 3.1e-05 secs (72161.29 Kbytes/sec)

    测试是否有其他权限
    ftp> mkdir aaa
    550 Permission denied.
    ftp> lcd /etc
    Local directory now /etc
    ftp> put group
    local: group remote: group
    227 Entering Passive Mode (192,168,11,16,224,17).
    550 Permission denied.
    ftp> bye
    221 Goodbye.

    拓展指令

    anon_world_readable_only参数的用途

    默认情况下,匿名用户所有上传下载,所使用的用户都是ftp用户的权限,若要上传文件,则需要ftp用户有写的权限,若要下载,则需要ftp用户有读的权限,也就是说一般情况下,ftp用户对文件有读权限就对文件有下载权限了

    文件有三种权限,文件所有人,文件所有组,文件的其他人,这个anon_world_readable_only参数意思是,当他为YES时候,文件的其他人必须有读的权限才允许下载,单单所有人为ftp且有读权限是无法下载的,必须其他人也有读权限,才允许下载,这是为安全性的一方面考虑,若为NO则只要ftp用户对文件有读权限即可下载。所以我们在部门员工模板文件中设置为NO

  • 相关阅读:
    [git 学习篇] git commit原理 --实践体会
    [git 学习篇]工作区和暂存区
    [git 学习篇] git文件版本回退再学习
    [git 学习篇]版本回退
    [git 学习篇] 修改文件
    [git 学习篇] 提交文件
    [git 学习篇] --创建git创库
    [测试框架学习] 测试框架的结构包含
    [python测试框架] http接口测试框架
    向SharePoint页面添加后台代码
  • 原文地址:https://www.cnblogs.com/cshaptx4869/p/12031950.html
Copyright © 2020-2023  润新知