博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
CentOS的ssh sftp配置及权限设置整理
阅读量:6594 次
发布时间:2019-06-24

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

hot3.png

从技术角度来分析,几个要求:

1、从安全方面看,sftp会更安全一点

2、线上服务器提供在线服务,对用户需要控制,只能让用户在自己的home目录下活动

3、用户只能使用sftp,不能ssh到机器进行操作

提供sftp服务,可以用系统自带的internal-sftp,也可以使用vsftpd,这里需求不多,直接选用internal-sftp。

限制用户只能在自己的home目录下活动,这里需要使用到chroot,openssh 4.8p1以后都支持chroot,我现在用的是CentOS 6.3,自带的openssh已经是5.3p1,足够了。

可以输入:

# ssh -V  

来查看openssh的版本,如果低于4.8p1,需要自行升级安装,不在这里具体介绍了。

假设,有一个名为sftp的组,这个组中的用户只能使用sftp,不能使用ssh,且sftp登录后只能在自己的home目录下活动

 

1、创建sftp组

# groupadd sftp  

2、创建一个sftp用户,名为mysftp

# useradd -g sftp -s /bin/false mysftp

# passwd mysftp

3、sftp组的用户的home目录统一指定到/data/sftp下,按用户名区分,这里先新建一个mysftp目录,然后指定mysftp的home为/data/sftp/mysftp

# mkdir -p /data/sftp/mysftp

# usermod -d /data/sftp/mysftp mysftp

4、配置sshd_config

编辑 /etc/ssh/sshd_config

# vim  /etc/ssh/sshd_config  

找到如下这行,并注释掉

Subsystem      sftp    /usr/libexec/openssh/sftp-server  

添加如下几行

Subsystem       sftp    internal-sftp  

Match Group sftp  

ChrootDirectory /data/sftp/%u  

ForceCommand    internal-sftp  

AllowTcpForwarding no  

X11Forwarding no  

解释一下添加的几行的意思

Subsystem       sftp    internal-sftp  

这行指定使用sftp服务使用系统自带的internal-sftp

Match Group sftp  

这行用来匹配sftp组的用户,如果要匹配多个组,多个组之间用逗号分割

当然,也可以匹配用户

Match User mysftp

这样就可以匹配用户了,多个用户名之间也是用逗号分割,但我们这里按组匹配更灵活和方便

ChrootDirectory /data/sftp/%u  

用chroot将用户的根目录指定到/data/sftp/%u,%u代表用户名,这样用户就只能在/data/sftp/%u下活动,chroot的含义,可以参考这里:http://www.ibm.com/developerworks/cn/linux/l-cn-chroot/

ForceCommand    internal-sftp  

指定sftp命令

AllowTcpForwarding no  

X11Forwarding no  

这两行,如果不希望该用户能使用端口转发的话就加上,否则删掉

5、设定Chroot目录权限

# chown root:sftp /data/sftp/mysftp

# chmod 755 /data/sftp/mysftp

错误的目录权限设定会导致在log中出现”fatal: bad ownership or modes for chroot directory XXXXXX”的内容

目录的权限设定有两个要点:

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

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

所以遵循以上两个原则

1)我们将/data/sftp/mysftp的所有者设置为了root,所有组设置为sftp

2)我们将/data/sftp/mysftp的权限设置为755,所有者root有写入权限,而所有组sftp无写入权限

6、建立SFTP用户登入后可写入的目录

照上面设置后,在重启sshd服务后,用户mysftp已经可以登录,但使用chroot指定根目录后,根应该是无法写入的,所以要新建一个目录供mysftp上传文件。这个目录所有者为mysftp,所有组为sftp,所有者有写入权限,而所有组无写入权限

# mkdir /data/sftp/mysftp/upload  

# chown mysftp:sftp /data/sftp/mysftp/upload  

# chmod 755 /data/sftp/mysftp/upload  

7、重启sshd服务

# service sshd restart  

到这里,mysftp已经可以通过sftp客户端登录并可以上传文件到upload目录。

如果还是不能在此目录下上传文件,提示没有权限,检查SElinux是否关闭,可以使用如下指令关闭SElinux

修改/etc/selinux/config文件中的SELINUX="" 为 disabled ,然后重启。或者

# setenforce 0

*PS

一开始,我以为是权限问题导致的无法上传文件,即使给777权限给文件夹也不行. 然后干脆关闭了SElinux,终于可以上传了。

转载于:https://my.oschina.net/u/2447574/blog/698278

你可能感兴趣的文章
后台统计
查看>>
React组件: 提取图片颜色
查看>>
3D应用开发中的欧拉角和旋转矩阵
查看>>
爬虫必备技能xpath的用法和实战
查看>>
RxJava2.0的初学者必备教程(九)
查看>>
记一次omi的项目之旅
查看>>
Android API级别、代号、发布时间及平台亮点整理
查看>>
安装配置nagios
查看>>
QQ第三方授权登录(带详细源码)
查看>>
LLDP(链路层发现协议)
查看>>
Ubuntu14 添加程序启动
查看>>
我的友情链接
查看>>
windows网络安全以及常见网络***方式
查看>>
警告 初始化默认驱动器时出错“找不到运行 Active Directory Web 服务的默认服务器。”...
查看>>
JS字符串转换数字
查看>>
centos7-修改主机名
查看>>
面试宝典系列-mysql面试基础题
查看>>
spring data for mongo
查看>>
开启 URL 重写
查看>>
Journey源码分析二:整体启动流程
查看>>