博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
给sftp创建新用户、默认打开和限制在某个目录
阅读量:5061 次
发布时间:2019-06-12

本文共 2352 字,大约阅读时间需要 7 分钟。

一、环境:

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-sftpUsePAM yesMatch user sftpuser1ForceCommand internal-sftpChrootDirectory /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-sftpUsePAM yesMatch user sftpuser1ForceCommand internal-sftpChrootDirectory /data/wwwroot/user1/UseDNS noAddressFamily inetPermitRootLogin yesSyslogFacility AUTHPRIVPasswordAuthentication yes

修改后:

UseDNS noAddressFamily inetPermitRootLogin yesSyslogFacility AUTHPRIVPasswordAuthentication yesSubsystem sftp internal-sftpUsePAM yesMatch user sftpuser1ForceCommand internal-sftpChrootDirectory /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/uploadchown -R sftpuser1:root /data/wwwroot/user1/upload

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

转载于:https://www.cnblogs.com/xjnotxj/p/6912471.html

你可能感兴趣的文章
asp.net 用JWT来实现token以此取代Session
查看>>
数据库分区
查看>>
增强学习(一) ----- 基本概念
查看>>
勇气获得机(逆向思维)
查看>>
CodeForces - 1004A-Sonya and Hotels(思维)
查看>>
rsync 服务基础配置讲解
查看>>
并查集 带压缩路径的版本
查看>>
hdu 4686 Arc of Dream (矩阵快速幂)
查看>>
hiho #1326 : 有序01字符串
查看>>
12.列表渲染
查看>>
蓝桥杯校内练习(19.01.12)
查看>>
Bootstrap页面布局6 - BS把已有的固定宽度布局转换成响应式布局
查看>>
Spring 容器的基本用法
查看>>
HUE中Oozie执行Hive脚本
查看>>
【转】php ob_start()、ob_end_flush和ob_end_clean()多级缓冲
查看>>
C#实现程序的开机启动
查看>>
eclipse Target runtime com.genuitec.runtime.generic.jee50 is not defined
查看>>
Amqp与RabbitMQ使用
查看>>
ajax获得后台传来的一个json值,在js中获得其中的属性值
查看>>
QT中QMainWindow、QWidget、QDialog
查看>>