部署一个内网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=/c\SELINUX=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

FTP虚拟账户的更多相关文章

  1. centos6.5安装vsftp服务并配置虚拟账户ftp

      当我们的用户量越来越大时,继续创建更多的系统用户是不明智的,这时就需要为vsftpd创建虚拟账户,但vsftpd虚拟账户的数据库要保存在Berkeley DB格式的数据文件中,所以需要安装db4- ...

  2. ftp虚拟账号登陆

    配置使用虚拟用户登录的FTP服务器,可以避免使用操作系统帐号作为FTP用户带来的一些安全问题,也便于通过数据库或其它程序来进行管理.废话不多说,这里记录下ftp虚拟账号登陆的部署过程及其中遇到的问题: ...

  3. Linux下FTP虚拟账号环境部署总结

    vsftp的用户有三种类型:匿名用户.系统用户.虚拟用户.1)匿名登录:在登录FTP时使用默认的用户名,一般是ftp或anonymous.2)本地用户登录:使用系统用户登录,在/etc/passwd中 ...

  4. Linux下FTP虚拟账号环境部署简述

    vsftp的用户有三种类型:匿名用户.系统用户.虚拟用户.1)匿名登录:在登录FTP时使用默认的用户名,一般是ftp或anonymous.2)本地用户登录:使用系统用户登录,在/etc/passwd中 ...

  5. 007.FTP虚拟用户访问

    一 虚拟用户优点 可对每个用户进行单独设定权限. 每个用户单独配置文件,单独指定主目录,而不能访问系统的其它资源. 注意:虚拟用户目录和本地用户访问目录不冲突. 二 配置虚拟用户步骤 添加虚拟用户口令 ...

  6. Linux 下 FTP虚拟用户的使用配置

    Linux下FTP虚拟用户的使用配置 Linux的FTP服务支持3种用户: 1.匿名帐户 2.本地帐户 3.虚拟用户 为什么要使用虚拟用户: 匿名帐户可以很好的保证FTP服务器的安全性,但是,对匿名用 ...

  7. ftp的自动部署以及添加虚拟账户的脚本

    #!/bin/bash #本脚本为自动化安装vsftp,使用虚拟用户认证登录ftp上传下载文件 echo =============================================== ...

  8. [vsftp服务]——ftp虚拟用户、权限设置等的实验

    搭建ftp服务器,满足以下要求: 1.允许匿名用户登录服务器并下载文件,下载速度设置为最高2MB/s 2.不允许本地用户登录ftp服务器 3.在服务器添加虚拟用户vuser01.vuser02.vus ...

  9. RHEL7 -- Linux搭建FTP虚拟用户

    安装vsftpd软件包[root@localhost ~]# yum install vsftpd -y [root@localhost ~]# yum install db4 db4-utils 建 ...

随机推荐

  1. mysql中的文件排序(filesort)

    在MySQL中的ORDER BY有两种排序实现方式: 1. 利用有序索引获取有序数据 2. 文件排序 在explain中分析查询的时候,利用有序索引获取有序数据显示Using index ,文件排序显 ...

  2. Java日期时间API系列13-----Jdk8中java.time包中的新的日期时间API类,时间类转换,Date转LocalDateTime,LocalDateTime转Date等

    从前面的系列博客中可以看出Jdk8中java.time包中的新的日期时间API类设计的很好,但Date由于使用仍非常广泛,这就涉及到Date转LocalDateTime,LocalDateTime转D ...

  3. 各种颜色空间之间的转换算法(XYZ → Standard-RGB ,Standard-RGB → XYZ)

    http://www.easyrgb.com/en/convert.php#Result http://www.easyrgb.com/en/math.php

  4. Bugku-CTF加密篇之凯撒部长的奖励(就在8月,超师傅出色地完成了上级的特遣任务,凯撒部长准备给超师傅一份特殊的奖励.......)

    凯撒部长的奖励 就在8月,超师傅出色地完成了上级的特遣任务,凯撒部长准备给超师傅一份特殊的奖励,兴高采烈的超师傅却只收到一长串莫名的密文,超师傅看到英语字串便满脸黑线,帮他拿到这份价值不菲的奖励吧. ...

  5. 201771010135 杨蓉庆AND张燕 《面对对象程序设计(java)》第十一周学习总结

    1.实验目的与要求 (1) 掌握Vetor.Stack.Hashtable三个类的用途及常用API: (2) 了解java集合框架体系组成: (3) 掌握ArrayList.LinkList两个类的用 ...

  6. jdk 9 10 11 12 13 新特性

    jdk 9 新特性 1.集合加强 jdk9 为所有集合(List/Set/Map)都增加了 of 和 copyOf 方法,用来创建不可变集合,即一旦创建就无法再执行添加.删除.替换.排序等操作,否则将 ...

  7. BZOJ - 1257 余数之和(数学)

    题目链接:余数之和 题意:给定正整数$n$和$k$,计算$k\%1+k\%2+\dots+k\%n$的值 思路:因为$k\%i=k-\left \lfloor \frac{k}{i} \right \ ...

  8. [CISCN2019 华北赛区 Day1 Web1]Dropbox

    0x01 前言 通常我们在利用反序列化漏洞的时候,只能将序列化后的字符串传入unserialize(),随着代码安全性越来越高,利用难度也越来越大.但在不久前的Black Hat上,安全研究员Sam ...

  9. HYStockChart, 股票图(包括K线图、趋势图、成交量、滚动、放大缩小等)

    HYStockChart, 股票图(包括K线图.趋势图.成交量.滚动.放大缩小等) https://www.helplib.com/GitHub/article_127980git 地址 http:/ ...

  10. springweb 详解。

    spring web架构图 从图中可以看出, 如果要对输出的内容进行重构,不需要视图的话,在handlerMethodReturnValueHandler里进行操作,可以重构这个对象,以达到自定义输出 ...