一、环境:

CentOS 6.8

使用 FileZilla 进行 sftp 连接

二、背景

给外包的工作人员提供我司服务器的某一目录的访问(包括读写)权限,方便他们部署代码文件。

之所以是某一目录的访问,是因为 SFTP 的用户登录后,默认是能看到整个系统的文件目录,这样很不安全。

题外话:如果是针对 ftp 的用户权限管理,推荐使用 vsftpd,可通过 yum 直接安装。

三、正文

1、创建新用户

adduser sftpuser1

useradd 和 adduser 的区别

useradd 只会添加一个用户,并没有创建它的主目录,除了添加一个新用户之外什么都没有。这个用户甚至不能登录,因为没有密码。所以这里选择 adduser。

2、设置该用户密码

passwd sftpuser1

回车后再输入密码即可

3、禁止该用户登录 SSH

因为我们只想该用户使用 SFTP,并不需要该用户能登录 SSH,威胁安全。

usermod -s /bin/false sftpuser1

sftpuser1的 shell 改成 /bin/false。

4、修改该用户的家目录

usermod -d /data/wwwroot/user1/ sftpuser1

这样每次用户访问服务器都会默认打开/data/wwwroot/user1/,但还是可以跳出这个访问其它目录,需要进行下面一步的操作。

5、设置 sshd_config:

打开sshd_config文件

vi /etc/ssh/sshd_config

找到 Subsystem sftp 这一行,修改成:

Subsystem sftp internal-sftp
UsePAM yes
Match user sftpuser1
ForceCommand internal-sftp
ChrootDirectory /data/wwwroot/user1/

将上面的 sftpuser1/data/wwwroot/user1/ 替换成你需要的。

多个用户请重复配置这三行:

Match user sftpuser2

ForceCommand internal-sftp

ChrootDirectory /data/wwwroot/user2/

这样可以为不同的用户设置不同的限制目录。

6、重新启动 sshd 服务:

/etc/init.d/sshd restart

现在用 SFTP 软件使用sftpuser1用户登录,就可以发现目录已经被限定、锁死在/data/wwwroot/user1/了。


四、可能遇到的问题

1、修改sshd_config文件后重启 sshd,报错:Directive 'UseDNS' is not allowed within a Match block

语法错误,原因未知,只需要把两段配置的位置互调就不报错了。

修改前:

Subsystem sftp internal-sftp
UsePAM yes
Match user sftpuser1
ForceCommand internal-sftp
ChrootDirectory /data/wwwroot/user1/ UseDNS no
AddressFamily inet
PermitRootLogin yes
SyslogFacility AUTHPRIV
PasswordAuthentication yes

修改后:

UseDNS no
AddressFamily inet
PermitRootLogin yes
SyslogFacility AUTHPRIV
PasswordAuthentication yes Subsystem sftp internal-sftp
UsePAM yes
Match user sftpuser1
ForceCommand internal-sftp
ChrootDirectory /data/wwwroot/user1/

注:当你出现这个错误的时候,sftp 肯定是连不上了。如果你习惯用 FileZilla 去修改配置文件,那么此时你得不情愿的切换到

shell,去用 vi/vim 去修改它了。

2、新用户通过 sftp 访问时,权限不全,只能读不能写

我试着用 root 账号去把该用户的家目录权限改成 777,但是会出现该用户 sftp 登陆不了的情况。(报错:Server unexpectedly closed network connection)

google 了原因如下:

给新用户的家目录的权限设定有两个要点:

1、由 ChrootDirectory 指定的目录开始一直往上到系统根目录为止的目录拥有者都只能是 root

2、由 ChrootDirectory 指定的目录开始一直往上到系统根目录为止都不可以具有群组写入权限(最大权限 755)

如果违反了上面的两条要求,那么就会出现新用户访问不了 sftp

的情况。

所以/data/wwwroot/user1/及上级的所有目录属主一定要是

root,并且组权限和公共权限不能有写入权限,如果一定需要有写入权限,那们可以在/data/wwwroot/user1/下建立 777 权限的文件夹

mkdir /data/wwwroot/user1/upload
chown -R sftpuser1:root /data/wwwroot/user1/upload

这样sftpuser1用户就可以在/data/wwwroot/user1/upload里随意读写文件了。

给sftp创建新用户、默认打开和限制在某个目录的更多相关文章

  1. Ubuntu创建新用户并增加管理员权限

    1.Ubuntu中的root帐号默认是被禁用了的,所以登陆的时候没有这个账号 打开终端开启root账户 sudo passwd -u root sudo passwd root 设置root密码,输入 ...

  2. mysql5.6创建新用户并给授权指定的数据库权限

    一.环境: CentOS 6.8 mysql 5.6 二.背景 给外包的工作人员提供我司某台服务器的 mysql 中某个数据库的访问权限. 之所以要做限制,是防止他们对我司其他的数据库非法进行操作. ...

  3. ubuntu创建新用户

    ubuntu和windows一样,可以任意创建或者删除新的用户,windows下比较简单,ubuntu下需要使用命令,不过操作起来不是很繁琐,所以我尽量写的详细一些.  如何创建ubuntu新用户? ...

  4. Ubuntu创建新用户并设置权限

    打开终端开启root账户 sudo passwd -u root 设置root密码,输入两次 sudo passwd root 切换root账号 su - 或 su root 退出root账户使用ex ...

  5. Ubuntu创建新用户并增加管理员权限(授权有问题)

    转自:Ubuntu创建新用户并增加管理员权限 $是普通管员,#是系统管理员,在Ubuntu下,root用户默认是没有密码的,因此也就无法使用(据说是为了安全).想用root的话,得给root用户设置一 ...

  6. Linux下如何创建新用户

    Linux下如何创建新用户 Linux系统中,只有root用户有创建其他用户的权限.创建过程如下:   useradd -d /home/newuser newuser(设定了该用户的主目录和用户名) ...

  7. linux私有ftp搭建与创建新用户

    一.私有ftp搭建 以后补充 1. 搭建 2.修改配置文件 二.创建新用户 在linux搭建好私有ftp后,默认存放目录是 /var/ftp/ 我们有时候需要给外部公司之类的用,但又不想让他们直接在  ...

  8. TestCase--网站创建新用户管理模块

    对于web测试,用户权限管理模块是必测的一个点,所以今天就来总结一下创建新用户管理模块的测试用例 参考图如下: 测试用例设计如下: 一.功能测试 1.  什么都不输入,单击“立即提交”,页面是否有提示 ...

  9. [转帖]postgres 创建新用户并授权-- 非常好的

    postgres 创建新用户并授权 https://blog.csdn.net/XuHang666/article/details/81506297 原作者总结的挺好的 可以用来学习一下. grant ...

随机推荐

  1. sencha touch 总结

    Ext.define("CM.product.MainviewListModel", { extend: "Ext.data.Model", config: { ...

  2. ## Python中的Package和Jupyter中import包问题

    前言 关于python包的一些知识 Java中的package概念 我们知道在java中的import package概念, java中的包就是一个目录,里面包含着子目录,子目录套着子目录,当需要引入 ...

  3. win10 如何配置 java jdk1.8环境变量(2017.2.24)

    win10 如何配置 java jdk 环境变量 这里的win10 为全新安装的系统 一.安装 下载 jdk 64位 windows 版本安装(默认安装) 默认安装的路径: C:\Program Fi ...

  4. 使用Maven构建SSH

    本人自己进行的SSH整合,中间遇到不少问题,特此做些总结,仅供参考. 项目环境: struts-2.3.31 + spring-4.3.7 + hibernate-4.2.21 + maven-3.3 ...

  5. Java排序算法之希尔(Shell)排序

    基本思想: 希尔排序就是对直接插入排序的一个优化.现在有一个array,希尔排序就是设定一个增量incrementNum(0<incrementNum<array.length).先从ar ...

  6. LinkCode 整数排序II

    http://www.lintcode.com/zh-cn/problem/sort-integers-ii/ 题目 给一组整数,按照升序排序.使用归并排序,快速排序,堆排序或者任何其他 O(n lo ...

  7. cmapx 保存绘制好的图层

    研究了两天,如何保存一绘制好的图层,大致意思都说要使用mapInfo表,然后确定了可定和.TAB表有关.然而网上说的全是垃圾,也不能说全是垃圾,好歹我从中得到了一点点有用的信息,使用mapManage ...

  8. Java多线程的几个常用关键字

    一.同步(synchronized)和异步(asynchronized) 1.同步(synchronized)简单说可以理解为共享的意思,如果资源不是共享的,就没必要进行同步.设置共享资源为同步的话, ...

  9. JVM 方法调用之动态分派

    1. 动态分派 一个体现是重写(override).下面的代码,运行结果很明显. public class App { public static void main(String[] args) { ...

  10. sql关键字之null

    在数据库中使用一种特殊的值表示未知的值--NULL,我们称之为空值但并不是空的字符串,而是特殊的值.