运营有异地传输文件的需求,但如果通过QQ等即时通讯软件,不利于文件的集中管理,不方便。而我们办公室的内网机器无法提供外网访问方法,且传输的内容不合适放到公共的网盘或者是云存储上,所以只能用线上负载较低的服务器来承担此项任务。

从技术角度来分析,几个要求
1、ftp不安全,只能使用sftp
2、线上服务器提供在线服务,对用户需要控制,只能让用户在自己的home目录下活动
3、用户只能使用sftp,不能ssh到机器进行操作
3、服务器磁盘有限,需要对用户磁盘进行配额

提供sftp服务,可以用系统自带的internal-sftp,也可以使用vsftpd,这里需求不多,直接选用internal-sftp。

限制用户在自己的home目录下活动,这里需要使用到chroot,openssh 4.8p1以后都支持chroot,我这里是CentOS 6,自带的openssh已经是5.3p1,足够了。

可以

  1. ssh -V

来查看openssh的版本,如果低于4.8p1,需要自行升级安装,不在这里具体介绍了。

假设,有一个名为sftp的组,,这个组中的用户只能使用sftp,不能使用ssh,且sftp登录后只能在自己的home目录下活动

1、创建sftp组

  1. groupadd sftp

2、创建一个测试用户,名为testuser

  1. useradd -g sftp -s /bin/false testuser
  2. passwd testuser

3、sftp组的用户的home目录统一指定到/opt/sftp下,按用户名区分,这里先新建一个testuser目录,然后指定testuser的home为/opt/sftp/testuser

  1. mkdir /opt/sftp
  2. cd /opt/sftp
  3. mkdir testuser
  4. usermod -d /opt/sftp/testuser testuser

4、配置sshd_config
编辑 /etc/ssh/sshd_config

  1. vim /etc/ssh/sshd_config

找到如下这行,并注释掉

  1. Subsystem      sftp    /usr/libexec/openssh/sftp-server

添加如下几行

  1. Subsystem       sftp    internal-sftp
  2. Match Group sftp
  3. ChrootDirectory /opt/sftp/%u
  4. ForceCommand    internal-sftp
  5. AllowTcpForwarding no
  6. X11Forwarding no

解释一下添加的几行的意思

  1. Subsystem       sftp    internal-sftp

这行指定使用sftp服务使用系统自带的internal-sftp

  1. Match Group sftp

这行用来匹配sftp组的用户,如果要匹配多个组,多个组之间用逗号分割
也可以匹配用户

  1. Match User testuser

这样就可以匹配用户了,多个用户名之间也是用逗号分割,但我们这里按组匹配更灵活和方便

  1. ChrootDirectory /opt/sftp/%u

用chroot将用户的根目录指定到/opt/sftp/%u,%u代表用户名,这样用户就只能在/opt/sftp/%u下活动,chroot的含义,可以参加这里:http://www.ibm.com/developerworks/cn/linux/l-cn-chroot/

  1. ForceCommand    internal-sftp

指定sftp命令

  1. AllowTcpForwarding no
  2. X11Forwarding no

这两行,如果不希望该用户能使用端口转发的话就加上,否则删掉

5、设定Chroot目录权限

  1. chown root:sftp /opt/sftp/testuser
  2. chmod 755 /opt/sftp/testuser

错误的目录权限设定会导致在log中出现”fatal: bad ownership or modes for chroot directory XXXXXX” 的内容

目录的权限设定有两个要点:
1、由ChrootDirectory指定的目录开始一直往上到系统根目录为止的目录拥有者都只能是root
2、由ChrootDirectory指定的目录开始一直往上到系统根目录为止都不可以具有群组写入权限

所以遵循以上两个原则
1、我们将/opt/sftp/testuser的所有者设置为了root,所有组设置为sftp
2、我们讲/opt/sftp/testuser的权限设置为755,所有者root有写入权限,而所有组sftp无写入权限

6、建立SFTP用户登入后可写入的目录
照上面设置后,在重启sshd服务后,testuser已经可以登录,但使用chroot指定根目录后,根是无法写入的,所以要新建一个目录供testuser上传文件。这个目录所有者为testuser,所有组为sftp,所有者有写入权限,而所有组无写入权限

  1. mkdir /opt/sftp/testuser/upload
  2. chown uplus:sftp /opt/sftp/testuser/upload
  3. chmod 755 /opt/sftp/testuser/upload

7、重启sshd服务

  1. service sshd restart

到这里,testuser已经可以通过sftp客户端登录并可以上传文件到upload目录。也就是说,文章前面提到的从技术角度来看的几个要求,前三个已经OK,第四点,关于磁盘配额配置的部分,是一个相对独立的过程,在下一篇再进行介绍

CentOS下ssh sftp配置及权限设置的更多相关文章

  1. CentOS的ssh sftp配置及权限设置(流程相当完整)(关闭了SElinux才能上传了)

    从技术角度来分析,几个要求: 1.从安全方面看,sftp会更安全一点 2.线上服务器提供在线服务,对用户需要控制,只能让用户在自己的home目录下活动 3.用户只能使用sftp,不能ssh到机器进行操 ...

  2. CentOS的ssh sftp配置及权限设置[转载-验证可用]

    从技术角度来分析,几个要求:1.从安全方面看,sftp会更安全一点2.线上服务器提供在线服务,对用户需要控制,只能让用户在自己的home目录下活动3.用户只能使用sftp,不能ssh到机器进行操作 提 ...

  3. linux下ssh/sftp配置和权限设置

    基于 ssh 的 sftp 服务相比 ftp 有更好的安全性(非明文帐号密码传输)和方便的权限管理(限制用户的活动目录). 1.开通 sftp 帐号,使用户只能 sftp 操作文件, 而不能 ssh ...

  4. CentOS 下SSH无密码登录的配置

    CentOS 下SSH无密码登录的配置 最近学习Hadoop.它要求各节点之间通过SSH无密码登录,配置SSH的时候费了一番功夫,记录下来,以备忘. 配置SSH无密码登录需要3步: 1.生成公钥和私钥 ...

  5. centOS下yum安装配置samba

     centOS下yum安装配置samba 2010-03-29 15:46:00 标签:samba yum centOS 安装 休闲 注意:本文的原则是只将文件共享应用于内网服务器,并让将要被共享的目 ...

  6. sftp配置多用户权限

    sftp配置多用户权限   工作需要,用户上传文件到目录下,用ftp不太安全,选择sftp.让用户在自己的home目录下活动,不能ssh到机器进行操作.   下面开始干活. 查看ssh版本 ssh - ...

  7. [转帖]CentOS下iRedMail安装配置

    CentOS下iRedMail安装配置 中文名为艾瑞得邮件,由 rhms 项目更名而来.是针对 Linux 设计的邮件服务器解决方案,是在操作系统安装好后使用的一套 shell 脚本,用于快速部署一套 ...

  8. CentOS下OpenVPN客户端配置

    CentOS下OpenVPN客户端配置 http://liumissyou.blog.51cto.com/4828343/1762683 1,安装 yum install openvpn -y mkd ...

  9. CentOS下Redisserver安装配置

    1.CentOS 6.6下Redis安装配置记录 2.CentOS下Redisserver安装配置

随机推荐

  1. hdu 1507 记录路径的二分匹配 **

    题意:N*M的矩形,向其中填充1*2的小块矩形,黑色的部分不能填充,问最多可以填充多少块.链接:点我 黑白棋最大匹配 将棋盘中i+j为奇数的做A集合,偶数的做B集合,相邻的则建立联系.于是便转换成寻找 ...

  2. Lvs+Keepalived+Mysql

    环境 [root@node1 ~]# cat /etc/redhat-release CentOS Linux release (Core) [root@node1 ~]# uname -a Linu ...

  3. 【转载】EmptyWorkingSet 程序运行内存整清理

    网络上找了很多关于内存整理的文章,不外乎都是使用EmptyWorkingSet来实现.就如下面这段代码. #include "stdafx.h"#include <windo ...

  4. 【转载】C语言 构建参数个数不固定函数

    深入浅出可变参数函数的使用技巧本文主要介绍可变参数的函数使用,然后分析它的原理,程序员自己如何对它们实现和封装,最后是可能会出现的问题和避免措施. VA函数(variable argument fun ...

  5. HDU 5744 Keep On Movin 贪心

    Keep On Movin 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5744 Description Professor Zhang has k ...

  6. SLAM(一)----学习资料整理

    转自:http://www.cnblogs.com/wenhust/ 书籍: 1.必读经典 Thrun S, Burgard W, Fox D. <Probabilistic robotics& ...

  7. sql 计算两个经纬度点之间的距离

    这里用到的算法和地球半径等数据均来自网络,此文只作整理记录. 地球半径值采用赤道半径 6378137.0米,这是1980年的国际标准数据. //存储过程 CREATE FUNCTION [f_GetD ...

  8. doc文件中的cer附件保存到本地

    在word文档中有一个cer附件,可以双击直接安装证书. 我想把它保存到本地文件系统中,直接选中复制下来的cer文件,使用时,系统提示是无效证书.怎么才能正确 保存到本地文件系统?方法如下: 1.双击 ...

  9. FireDAC 下的 Sqlite [2] - 第一个例子

    为了方便测试, 我把官方提供的 C:\Users\Public\Documents\Embarcadero\Studio\14.0\Samples\data\FDDemo.sdb 复制了一份到 C:\ ...

  10. spring data jpa在使用PostgreSQL表名大小写的问题解决

    国内的文章看了一遍,其实没找到根本问题解决方法,下面将列举这一系列的问题解决方法: 1.在配置文件增加如下配置: spring.jpa.hibernate.naming.physical-strate ...