需求:

1.建立三个sftp帐号,admin,test1,test2
2.三个帐号分别在/home/sftp下拥有相应的目录
3.test1和test2只能进入自己的目录,admin可以进入三个目录(chown,chmod和ACL)
4.各自目录所有者和所有者组权限继承
5.test1和test2进入自己目录后可以进行读写操作,但是不能删除;admin进入三个目录都可以进行读写和删除操作(删除权限可以使用chattr +a或者设置sticky bit,但是并不能完全满足需求)

首先要升级OpenSSH的版本。只有4.8p1及以上版本才支持Chroot
1.查验openssh版本
[root@localhost ~]# ssh -V
OpenSSH_6.6.1p1, OpenSSL 1.0.1e-fips 11 Feb 2013

2.建立相应目录
[root@localhost ~]# mkdir /home/sftp
[root@localhost ~]# mkdir /home/sftp/admin
[root@localhost ~]# mkdir /home/sftp/test1
[root@localhost ~]# mkdir /home/sftp/test2

3.创建帐号和组,同时修改密码
[root@localhost ~]# groupadd sftp
[root@localhost ~]# useradd -d /home/sftp/test1 -M -s /sbin/false test1
[root@localhost ~]# useradd -d /home/sftp/test2 -M -s /sbin/nologin test2
[root@localhost ~]# useradd -d /home/sftp/admin -M -s /sbin/nologin -g sftp admin
[root@localhost ~]# usermod -a -G sftp test1
[root@localhost ~]# usermod -a -G sftp test2
[root@localhost ~]# passwd admin
[root@localhost ~]# passwd test1
[root@localhost ~]# passwd test2

-d是把用户目录限制的自定义的目录,-M是不自动创建用户目录,-s是进行登录shell指定(/bin/false和sbin/nologin的区别暂不得知)

4.修改配置文件,同时重启ssh服务让其生效
[root@localhost ~]# vim /etc/ssh/sshd_config
Subsystem sftp internal-sftp
Match User admin,test1,test2
ChrootDirectory /home/sftp
AllowTcpForwarding no
X11Forwarding no
ForceCommand internal-sftp
[root@localhost ~]# systemctl reload sshd.service

5.设置/home/sftp的权限
[root@localhost ~]# chown root:root /home/sftp
[root@localhost ~]# chmod 755 /home/sftp

6.为三个文件夹设置所有者和组,已经设置权限(使得admin可以访问三个文件夹,test1和test2只能访问各自文件夹)
[root@localhost ~]# chown admin:sftp /home/sftp/test1
[root@localhost ~]# chown admin:sftp /home/sftp/test2
[root@localhost ~]# chown admin:sftp /home/sftp/admin
[root@localhost ~]# chmod 770 /home/sftp/test1
[root@localhost ~]# chmod 770 /home/sftp/test2
[root@localhost ~]# chmod 700 /home/sftp/admin

7.可以通过ACL限制权限(test2不能访问test1的文件夹,test1不能访问test2的文件夹)
[root@localhost ~]#setfacl -m u:test2:- /home/sftp/test1
[root@localhost ~]#setfacl -m u:test1:- /home/sftp/test2

8.关于删除权限,不使用脚本的情况下,有以下两种方案,但是仍无法完全满足需求
第一种方案(chattr +a)
chattr +a 文件夹名:只能增加数据,而不能删除
chattr +i 文件夹名:不能被删除、改名、设定连结也无法写入或新增数据

第二种方案(chmod o+t)
chmod o+t 文件夹名:添加sticky-bit,使得这个文件只可以由超级管理员,该目录的所有者,该文件的所有者删除

9.如果需要实现admin可以对三个文件夹进行删除操作,test1和test2不能删除的话,需要使用脚本

a.首先设置文件可执行
chmod a+x test1.sh
chmod a+x test1.sh

b.然后分别设置脚本文件如下
test1.sh
#!/bin/sh
while inotifywait -e create /home/sftp/test1;do
chown -R admin:sftp /home/sftp/test1
chmod -R 1770 /home/sftp/test1
done

test2.sh
#!/bin/sh
while inotifywait -e create /home/sftp/test2;do
chown -R admin:sftp /home/sftp/test2
chmod -R 1770 /home/sftp/test2
done

c.后台运行shell同时忽略shell退出
nohup ./test1.sh &
nohup ./test2.sh &

10.使用inotify的方式,有个很致命的缺陷,无法监控子目录的任何操作,所以后面进行修改为如下脚本(定时执行chmod和chown)

#!/bin/sh
while [ true ]; do
sleep 1
chown -R admin:sftp /home/sftp/test1
chmod -R 1770 /home/sftp/test1
chown -R admin:sftp /home/sftp/test2
chmod -R 1770 /home/sftp/test2
done

centos v7.0配置sftp的更多相关文章

  1. Linux(CentOS)上配置 SFTP(附解决Write failed: Broken pipe Couldn't read packet: Connection reset by peer)

    #创建sftp组: groupadd sftp #创建一个用户sftpuser: useradd -g sftp -s /bin/false sftpuser #提示: /etc/group 文件包含 ...

  2. centos v7.0解决乱码

    [root@localhost ~]# ll 鎬荤敤閲4-rw-------. 1 root root 1045 8鏈 24 21:17 anaconda-ks.cfg [root@localhost ...

  3. CentOS 7.0 配置防火墙

    停用了 iptables. systemctl stop iptables.service 然后来启动 firewalld 吧 systemctl start firewalld.service 给我 ...

  4. CentOS 7 配置SFTP

    目前越来越多的FTP客户端软件开始支持SSH协议上传和下载文件,这种协议方式就是SFTP. SFTP的优势主要有两点,一是不需要再配置个FTP服务端:二是SSH协议是安全传输,上传和下载是经过加密的. ...

  5. asp.net core 简单部署之FTP配置(CentOS 7.0安装配置Vsftp服务器)

    配置过程原文地址:http://www.osyunwei.com/archives/9006.html 坑和结果 正确的跟着这个内容走,是靠谱的. 我自己给自己踩了个坑,请参照文章的朋友注意第七条:七 ...

  6. CentOS 7.0系统安装配置步骤详解

    CentOS 7.0系统是一个很新的版本哦,很多朋友都不知道CentOS 7.0系统是怎么去安装配置的哦,因为centos7.0与以前版本是有很大的改进哦. 说明: 截止目前CentOS 7.x最新版 ...

  7. CentOS 7.0安装配置Vsftp服务器

    一.配置防火墙,开启FTP服务器需要的端口 CentOS 7.0默认使用的是firewall作为防火墙,这里改为iptables防火墙. 1.关闭firewall: systemctl stop fi ...

  8. CentOS 7.0 安装配置LAMP服务器方法(Apache+PHP+MariaDB)

    一.配置防火墙,开启80端口.3306端口 CentOS 7.0默认使用的是firewall作为防火墙,这里改为iptables防火墙. 1.关闭firewall: #停止firewall服务 sys ...

  9. CentOS 7.0下配置MariaDB数据库

    刚刚配置了下CentOS 7.0版本的服务器,配置数据库时发现# mysql_secure_installation命令用不了,之后网上查了一下发现CentOS 7.0版本用MariaDB替换了mys ...

随机推荐

  1. HDU - 6396 Swordsman (单调性+贪心)

    题意:有n个怪物和k种属性,当且仅当你的每种属性都大于等于怪物的属性才可以击杀它,且击杀怪物可以提升你一定的属性值.求可击杀怪物的最大数量以最终的属性值. 这不就是银行家算法里的安全性检验么? 本题的 ...

  2. JavaWEB开发05_Bootstrap

    上次课内容:什么JQ : write less do more 写更少的代码,做更多的事情 javascript函数库 基本选择器: ​ ID选择器: #ID名称 ​ 类选择器: .类名 ​ 元素选择 ...

  3. K8S概念

    1.master master是集群的网关和中枢,负责诸如为用户和客户端暴露api.跟踪其他服务器的健康状态.以最优方式调度工作负载,以及编排其他组件之间的通信等服务,它是用户或客户端与集群之间的核心 ...

  4. Web API接口规范与测试方法

    目录 1.Web API接口 1.1接口的四大特点 1.2接口文档的编写:YApi 1.3接口测试工具:Postman 2.接口规范(restful) 2.1URL设计 2.1.1 数据的安全保障(h ...

  5. 【C#-枚举】枚举的使用

    枚举是用户定义的整数类型. namespace ConsoleApplication1 { /// <summary> /// 在枚举中使用一个整数值,来表示一天的阶段 /// 如:Tim ...

  6. VM删除快照失败,磁盘空间不足,只是删除了快照名字(全网唯一解决办法)

    原创: 删除之前的快照,发现只是把名字删除了, 看着这么多文件也不知道怎么删,一顿百度google也是没找到答案 于是就自己琢磨 因为删除快照的时候,是先把快照删除,然后删除无效的文件 所以先让这个盘 ...

  7. “不是一个有效的Win32应用程序”

    造冰箱的大熊猫@cnblogs 2018/10/23 今天在Windows计算机上安装一个应用程序时遇到“不是一个有效的Win32应用程序”错误.原以为是应用程序与操作系统版本兼容问题,或者是应用程序 ...

  8. javascript中的原型和原型链(二)

    原型(prototype) 函数的 prototype 属性(图) 每个函数都有一个prototype属性,它默认指向一个Object空对象(即称为:原型对象) 原型对象中有一个属性construct ...

  9. Misplaced alignment tab character &

    范例: 期望的标题效果:Literature review & Research set-up 在Latex里写的标题:\section{Literature Review & Res ...

  10. javaScrpit插件学习制作

    最近一直在学习javaScrpit插件制作,前几天学习制作了一个插件但存在严重缺陷. javaScrpit插件写法多种多样通过这几天的学习终于找到了适合自己的方法.前几天的缺陷也得到了解决.下面我们用 ...