运营有异地传输文件的需求,但如果通过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. markdown编辑器使用指南

    欢迎使用Markdown编辑器写博客 本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦: Markdown和扩展Markdown简洁的语法 代码块高亮 图片链接 ...

  2. 最短路径:(Dijkstra & Floyd)

    Dijkstra算法 1.定义概览 Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径.主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止.Di ...

  3. bzoj 3673 可持久化并查集

    本质上是维护两个可持久化数组,用可持久化线段树维护. /************************************************************** Problem: ...

  4. Xtreme9.0 - Taco Stand 数学

    Taco Stand 题目连接: https://www.hackerrank.com/contests/ieeextreme-challenges/challenges/taco-stand Des ...

  5. AIM Tech Round 3 (Div. 1) B. Recover the String 构造

    B. Recover the String 题目连接: http://www.codeforces.com/contest/708/problem/B Description For each str ...

  6. UVALive 6909 Kevin's Problem 数学排列组合

    Kevin's Problem 题目连接: https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid ...

  7. 关于curl: (2) Failed Initialization

    一開始是由于curl无法訪问https网上说,要又一次编译安装curl 我就下载.. ./configure make make install 结果出现 curl: (2) Failed Initi ...

  8. AngularJS使用ngMessages进行表单验证

    名称为"ngMessages"的module,通过npm install angular-messages进行安装.在没有使用ngMessages之前,我们可能这样写验证: < ...

  9. CATransition 实践

    时间差不够,导致闪屏 CATransition *animation = [CATransition animation]; animation.delegate = self; animation. ...

  10. Java File.separator

    在Windows下的路径分隔符和Linux下的路径分隔符是不一样的,当直接使用绝对路径时,跨平台会暴出“No such file or diretory”的异常. 比如说要在temp目录下建立一个te ...