基于 ssh 的 sftp 服务相比 ftp 有更好的安全性(非明文帐号密码传输)和方便的权限管理(限制用户的活动目录)。

1、开通 sftp 帐号,使用户只能 sftp 操作文件, 而不能 ssh 到服务器

2、限定用户的活动目录,使用户只能在指定的目录下活动,使用 sftp 的 ChrootDirectory 配置

确定版本

#确保 ssh 的版本高于 4.8p1 否则升级一下 一般都高于这个版本
ssh -V

新建用户和用户组

#添加用户组 sftp
groupadd sftp
#添加用户 指定家目录 指定用户组 不允许shell登录
useradd -d /home/sftp -m -g sftp -s /bin/false sftp
#设置用户密码
passwd sftp

活动目录

#设定你想要限定的活动目录
mkdir -p /var/www/sftp
#配置权限 注意此目录如果用于后续的 chroot 的活动目录 目录所有者必须是 root 必须是!!!
chown root.sftp /var/www/sftp

基本的 ssh 配置

# ssh 服务的配置文件
vi /etc/ssh/sshd_config #基本的ssh远程登录配置
#开启验证
PasswordAuthentication yes
#禁止空密码登录
PermitEmptyPasswords no
#开启远程登录
PermitRootLogin yes

至此你就可以使用 ssh 远程登录服务器了

配置 sftp

#这里我们使用系统自带的 internal-sftp 服务即可满足需求
#Subsystem sftp /usr/libexec/openssh/sftp-server
Subsystem sftp internal-sftp

Subsystem

Subsystem 是说 ssh 的子模块 这里启用的即为 sftp 模块,我们使用系统自带的 internal-sftp 来提供此服务,其实配置到这你即可以使用帐号 ssh 登录,也可以使用 ftp 客户端 sftp 登录。

如果你希望用户只能 sftp 而不能 ssh 登录到服务器,而且要限定用户的活动目录,继续看下面的配置

#对登录用户的限定
Match Group sftp
ChrootDirectory /var/www/sftp # 还可以用 %h代表用户家目录 %u代表用户名
ForceCommand internal-sftp # 强制使用系统自带的 internal-sftp 服务 这样用户只能使用ftp模式登录
AllowTcpForwarding no
X11Forwarding no

Match [User|Group] userName|groupName

Match [User|Group] sftp    这里是对登录用户的权限限定配置 Match 会对匹配到的用户或用户组起作用 且高于 ssh 的通项配置

ChrootDirectory    用户的可活动目录 可以用 %h 标识用户家目录 %u 代表用户名 当 Match 匹配的用户登录后 会话的根目录会切换至此目录 这里要尤其注意两个问题

1、 chroot 路径上的所有目录,所有者必须是 root,权限最大为 0755,这一点必须要注意而且符合 所以如果以非 root 用户登录时,我们需要在 chroot 下新建一个登录用户有权限操作的目录

2、chroot 一旦设定 则相应的用户登录时会话的根目录 "/" 切换为此目录,如果你此时使用 ssh 而非 sftp 协议登录,则很有可能会被提示:

/bin/bash: No such file or directory

这则提示非常的正确,对于此时登录的用户,会话中的根目录 "/" 已经切换为你所设置的 chroot 目录,除非你的 chroot 就是系统的 "/" 目录,否则此时的 chroot/bin 下是不会有 bash 命令的,这就类似添加用户时设定的 -s /bin/false 参数,shell 的初始命令式 /bin/false 自然就无法远程 ssh 登录了

ForceCommand    强制用户登录会话时使用的初始命令 如果如上配置了此项 则 Match 到的用户只能使用 sftp 协议登录,而无法使用 ssh 登录 会被提示

This service allows sftp connections only.

配置完成 重启 sshd 服务

service sshd restart

注意:

1、chroot 可能带来的问题,因为 chroot 会将会话的根目录切换至此,所以 ssh 登录很可能会提示 /bin/bash: No such file or directory 的错误,因为此会话的路径会为 chroot/bin/bash

2、ForceCommand 为会话开始时的初始命令 如果指定了比如 internal-sftp,则会提示 This service allows sftp connections only. 这就如同 usermod -s /bin/false 命令一样,用户登录会话时无法调用 /bin/bash 命令,自然无法 ssh 登录服务器

原文链接:https://my.oschina.net/sallency/blog/784022

linux下ssh/sftp配置和权限设置的更多相关文章

  1. CentOS下ssh sftp配置及权限设置

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

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

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

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

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

  4. Linux下mysql新建账号及权限设置各种方式总结

    来自:http://justcoding.iteye.com/blog/1941116 1.权限赋予 说明:mysql部署在服务器A上,内网上主机B通过客户端工具连接服务器A以进行数据库操作,需要服务 ...

  5. Linux下mysql新建账号及权限设置

    http://www.cnblogs.com/eczhou/archive/2012/07/12/2588187.html 1.权限赋予 说明:mysql部署在服务器A上,内网上主机B通过客户端工具连 ...

  6. linux下通过acl配置灵活目录文件权限(可用于ftp,web服务器的用户权限控制)

    linux下通过acl配置灵活目录文件权限(可用于ftp,web服务器的用户权限控制) 发表于2012//07由feng linux 本身的ugo rwx的权限,对于精确的权限控制很是力不从心的,ac ...

  7. Linux下git安装配置

    一.Linux下git安装配置 2013-07-28 20:32:10|  分类: 默认分类 |  标签:linux  git  server  |举报|字号 订阅     http://abomby ...

  8. Linux下安装和配置JDK与Tomcat(升级版)

    在这个版本 Linux下安装和配置JDK与Tomcat(入门版) 的基础上优化升级 1.下载相关软件 apache-tomcat-6.0.37.tar.gz jdk-6u25-linux-i586-r ...

  9. Linux下Redis服务器安装配置

    说明:操作系统:CentOS1.安装编译工具yum install wget  make gcc gcc-c++ zlib-devel openssl openssl-devel pcre-devel ...

随机推荐

  1. 用ECMAscript5中的forEach函数遍历数组

    1 var a = [1,2,3]; 2 a.forEach(function(value,index,arr){ 3 arr[index] = value + index; 4 }) 5 conso ...

  2. 6、Angular Route 路由

    1.没有嵌套路由 类似 ui-route 上述的html用红字标记的是必须导入的.这是因为:路由并不在ng2中,需要我们额外引入,另外我们需要设置base href,这是个什么东西呢?相当于我们后续所 ...

  3. JavaScript对象 原型

    javascript对象就是一组数据和功能的集合,除原始类型(string.number.boolean.null.undefined)之外,其余都是对象. 可以通过对象直接量(字面量).new.和O ...

  4. 浅谈------location

    今天在上班的时候碰到了要根据不同的页面随机添加栏目的问题,很简单的问题,想到了判断页面url是否含有某字符串来进行随机添加栏目...这就需要了解location对象. location 属性名 属性说 ...

  5. python学习(五)--打印错误信息

    from urllib import request #打印错误信息 except Exceptionlist = [ "http://www.baidu11.com/", &qu ...

  6. [SQL SERVER系列]工作经常使用的SQL整理,实战篇(一)[原创]

    工作经常使用的SQL整理,实战篇,地址一览: 工作经常使用的SQL整理,实战篇(一) 工作经常使用的SQL整理,实战篇(二) 工作经常使用的SQL整理,实战篇(三) 目录概览: 1.数据库 2.表 3 ...

  7. PAT 1064 Complete Binary Search Tree

    #include <iostream> #include <cstdio> #include <cstdlib> #include <vector> # ...

  8. 给HTML拍个照(如何将html元素转成图片)

    本文主要介绍一款好用的库,如何将HTML生成图片. 1.简述 最近在做的项目中,需要将界面转换成模板保存下来,本来想使用自适应布局完成,但是页面较复杂,模板较多,生成的模板使用过多的HTML标签,于是 ...

  9. 【Android】5.0 第一个工程学习——应用名称和图标修改、增加Buton控件、Toast信息提示

    1.0 搞了很多天,eclipse只能开发Android6.0以前的版本,可能是因为谷歌不再针对eclipse更新了,在虚拟机Android6.0以上版本都无法构建,所以转到Android Studi ...

  10. 如何在web.config文件中配置Session变量的生命周期

    实例说明:在网上购物商城中,为了维护在线购物环境,一般只有注册会员才可以购买商品.实现购物功能时,先通过Session变量记录会员的登录名,然后在购买商品页面通过判断会员是否登录确定其能否购买商品. ...