运营有异地传输文件的需求,但如果通过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. Intel Code Challenge Final Round (Div. 1 + Div. 2, Combined) B. Batch Sort 暴力

    B. Batch Sort 题目连接: http://codeforces.com/contest/724/problem/B Description output standard output Y ...

  2. VIM简单配置(windows)

    set number set history=1000000 set tabstop=4 set shiftwidth=4 set smarttab set nocp filetype plugin ...

  3. 【Go命令教程】3. go install

    命令 go install 用于编译并安装指定的代码包及它们的依赖包.当指定的代码包的依赖包还没有被编译和安装时,该命令会先去处理依赖包.与 go build 命令一样,传给 go install 命 ...

  4. systemtap 安装 总结

    http://blog.soul11201.com/notes/2017/02/22/systemstap-install.html

  5. leetcode第一刷_Unique Binary Search Trees

    这道题事实上跟二叉搜索树没有什么关系,给定n个节点,让你求有多少棵二叉树也是全然一样的做法.思想是什么呢,给定一个节点数x.求f(x),f(x)跟什么有关系呢,当然是跟他的左右子树都有关系.所以能够利 ...

  6. Windows Phone本地数据库(SQLCE):5、[Association]attribute(翻译)(转)

    这是“windows phone mango本地数据库(sqlce)”系列短片文章的第五篇. 为了让你开始在Windows Phone Mango中使用数据库,这一系列短片文章将覆盖所有你需要知道的知 ...

  7. java根据模板HTML动态生成PDF

    原文:https://segmentfault.com/a/1190000009160184 一.需求说明:根据业务需要,需要在服务器端生成可动态配置的PDF文档,方便数据可视化查看. 二.解决方案: ...

  8. kettle 数据提取效率提升

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/xpliruizhi123/article/details/54580850 最近发现KETTLE抽数 ...

  9. Linux网络之设备接口层:发送数据包流程dev_queue_xmit

    转自:http://blog.csdn.net/wdscq1234/article/details/51926808 写在前面 本文主要是分析kernel-3.8的源代码,主要集中在Network的n ...

  10. App.config和Web.config配置文件的配置节点的解析

    前言 在http://www.cnblogs.com/aehyok/p/3558661.html这篇博文中,大致对配置文件有了初步的了解,并且在文中有提到过<appSettings>和&l ...