运营有异地传输文件的需求,但如果通过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. JAVA初学练手项目,学生管理系统

    github地址:https://github.com/qscqesze/StudentManager 简单描述一下: UI层面用于接受用户的处理信息,然后移交给StudentDao去处理数据. 其中 ...

  2. Windows系列之(一):Windows10 上运行Ubuntu Bash

    1. 前言 2016年4月6日,Windows 10 Insider Preview 发布的版本 14316,添加了Ubuntu Bash,在Windows上提供一个Linux环境,可以直接执行Lin ...

  3. 飘逸的python - 中文编码长度有趣的现象

    最近在做验证用户姓名的功能时发现这样一个现象.   >>len(u'打怪者') #unicode 3 >>len(u'打怪者'.encode('gbk')) #gbk 6 &g ...

  4. delphi 隐藏标题栏

      1.隐藏窗体的标题栏在Delphi中隐藏窗体的标题栏,相信大家都会说是一个件十分容易的事情,只需要设置BorderStyle的属性为bsNone就可以了,不过这种设置方法不但去掉了窗体的标题栏,而 ...

  5. vs断点未能绑定

    原文链接:http://blog.csdn.net/pc0de/article/details/41790063 突然发现所有的c++项目在调试的时候加断点都会报错:”不能设置下面的断点.....断点 ...

  6. 交叉编译gdb和gdbserver

    从http://ftp.gnu.org/gnu/gdb/下载最新的gdb,我下载的是gdb-8.0. 编译aarch32(>armv5): #!/bin/bash export CC=arm-n ...

  7. 使用SQL Database Migration Wizard把SQL Server 2008迁移到Windows Azure SQL Database

    本篇体验使用SQL Database Migration Wizard(SQLAzureMW)将SQL Server 2008数据库迁移到 Azure SQL Database.当然,SQLAzure ...

  8. 对ORM的支持 之 8.4 集成JPA ——跟我学spring3

    8.4  集成JPA JPA全称为Java持久性API(Java Persistence API),JPA是Java EE 5标准之一,是一个ORM规范,由厂商来实现该规范,目前有Hibernate. ...

  9. <fmt:formatNumber>标签

    <fmt:formatNumber>标签用于格式化数字,百分比,货币. 属性 <fmt:formatNumber>标签有如下属性: 属性 描述 是否必要 默认值 value 要 ...

  10. JavaScript 判断输入是否为中文的函数

    //---------------------------------------------------------- // 功能:判断输入是否为中文的函数 // 参数: // s // 返回值: ...