[转]linux系统创建SFTP用户及设置其chroot权限

转载自: https://blog.csdn.net/akeyile2010/article/details/50751834

前言:
开发项目客户要求与三方通过sftp交互文件,我方系统部署sftp服务器。考虑安全,计划对提供给三方的用户实现chroot控制

提供sftp本次选用的是系统自带的internal-sftp。
限制用户只能在home目录下活动,需要使用chroot。openssl4.8p1以后都支持chroot,当前操作系统是rehl6.6 X64,自带openssl版本足够。

查看openssl版本命令:
# ssh -V

开始正题,因为接入三方很多,现计划创建sftpusers用户组,各三方的sftp用户都属于此组以便统一管理。用户HOME目录统一指定到/chroot目录下。

创建用户组
# groupadd sftpusers

配置chroot目录

# mkdir /chroot 
# chown root:root /chroot # 因root创建,此步可省 
# chown 755 /chroot

创建新用户
# useradd -d /chroot/DF999999 -s /bin/false -g sftpusers DF999999
注意:
-d意为指定home目录
-g意为用户DF999999主属组为sftpusers。若此处为-G,则会自动创建DF999999组为用户的主属组。

为用户初始化密码
# passwd DF999999

配置用户home目录权限,用于chroot控制

# chown root:root /chroot/DF999999 
# chmod 755 /chroot/DF99999

配置sshd_config
编辑 /etc/ssh/sshd_config,line132左右

 # 找到如下行,并注释掉
 Subsystem      sftp    /usr/libexec/openssh/sftp-server
 # 添加如下几行
 Subsystem       sftp    internal-sftp  
 Match Group sftpusers
 ChrootDirectory %h  
 ForceCommand    internal-sftp  

如上记录说明:

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

Match Group sftpusers
这行用来匹配sftpusers组的用户,如果要匹配多个组,多个组之间用逗号分割;
当然,也可以匹配用户
Match User DF999999
这样就可以匹配用户了,多个用户名之间也是用逗号分割,但我们这里按组匹配更灵活和方便.

ChrootDirectory %h
用chroot将用户的根目录指定到%h,%h代表用户home目录,这样用户 就只能在用户目录下活动。也可用%u,%u代表用户名。

ForceCommand internal-sftp
指定sftp命令
6. 重启sshd服务
# service sshd restart

重启完毕后用户DF999999就可以正常通过sftp客户端登录了。
但是因为/chroot以及/chroot/DF999999都属于root用户组,所以无读写权限。进行如下处理:

于/chroot/DF999999目录下创建上传目录
# mkdir /chroot/DF999999/send

上传目录权限控制

# chown DF999999:sftpusers /chroot/DF999999/send 
# chmod 777 /chroot/DF999999/send

至此,用户可以sftp登录,并上传文件到send目录下。

重要说明:
1.如果目录下不能上传文件,提示没有权限,检查SElinux是否关闭,可以使用如下指令关闭SElinux。修改/etc/selinux/config文件中的SELINUX=”” 为 disabled ,然后重启。
或:
# setenforce 0
2.chroot设置需要遵循两个原则

由ChrootDirectory指定的目录开始一直往上到系统根目录为止的目录拥有者都只能是root
由ChrootDirectory指定的目录开始一直往上到系统根目录为止都不可以具有群组写入权限
遵循如上两个原则,我将/chroot以及/chroot/DF999999目录设置拥有者全部为root用户,且权限全部为755(群组无写入权限)

猜你喜欢

转载自blog.csdn.net/u014451076/article/details/81635397