Linux 搭建Sftp服务并进行权限设置

一、最近接到一个项目组的需求搭建文件服务器,需求如下

1、用户:amovs、upload、download

2、组:amovs、dataload、download

3、具体需求是upload和download的家目录都为同一个目录dataload

4、upload能上传也就是能读能写、download用户只能下载

5、amovs因需要进行批量自动化删除日志等操作,所以对于dataload目录权限需要读、写权限

6、并且upload和download只能使用sftp软件上传和下载文件使用,不能作为登录用户


详细规划了一下用户和组的关系如下:

amovs属于dataload组,家目录为/amovs

upload为属于dataload组 /data/dataload

download属于download组 /data/dataload


二、搭建环境如下:

Red Hat Enterprise Linux Server release 6.7 (Santiago)


具体搭建步骤:

1、查看ssh相关版本

[root@iccsdb02 /]# rpm -qa | grep ssh

openssh-clients-5.3p1-111.el6.x86_64

openssh-server-5.3p1-111.el6.x86_64

ksshaskpass-0.5.1-4.1.el6.x86_64

libssh2-1.4.2-1.el6_6.1.x86_64

openssh-5.3p1-111.el6.x86_64


2、创建相关组和用户

[root@iccsdb02 /]# groupadd  -g 601 amovs

[root@iccsdb02 /]# groupadd  -g 602 dataload

[root@iccsdb02 /]# groupadd  -g 603 download

[root@iccsdb02 /]# useradd  -u 601  -g amovs  -G dataload  -d /amovs  amovs

[root@iccsdb02 /]# useradd  -u 602  -s /bin/false  -g dataload  -d  /data/dataload upload

[root@iccsdb02 /]# useradd  -u 603  -s /bin/false  -g download  -d  /data/dataload download


3、编辑/etc/ssh/sshd_config 更为为如下:

#注释掉这行

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


添加如下配置

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


#Match Group  dataload        #如何限制组就改成这样  这里也可以使用用户Match User,用逗号隔开

Match User upload、download   #我这里的需求是控制用户所以就配置成这样

ChrootDirectory /data    #此目录实际上传目录的上级目录,例如这里实际存储文件位置是/data/dataload

#用chroot将指定用户的根目录,chroot的详细含义请参考如下链接:

http://www.ibm.com/developerworks/cn/linux/l-cn-chroot/


ForceCommand internal-sftp    #指定sftp命令

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

AllowTcpForwarding no


注意:

要实现Chroot功能,目录权限的设置非常重要。否则无法登录,给出的错误提示也让人无语。

基本上报错都是这样的

# sftp upload@192.168.56.102

Connecting to 192.168.56.102...

upload@192.168.56.102's password: 

Write failed: Broken pipe

Couldn't read packet: Connection reset by peer

 

目录权限设置这里从网上找到了3条总结测试如下:

1、ChrootDirectory设置的目录权限及其所有的上级文件夹权限,属主和属组必须是root:root

这里我的/data 属组为root:root  而/data/dataload 属组为upload:dataload  ,具体如下

[root@iccsdb02 ~]# ls -ld /data

drwxr-xr-x 3 root root 4096 5月  23 17:27 /data


[root@iccsdb02 data]# ls -ld /data/dataload/

drwxrwxr-x 4 upload dataload 4096 5月  23 18:11 /data/dataload/


2、ChrootDirectory设置的目录权限及其所有的上级文件夹权限,只有属主能拥有写权限,也就是说权限最大设置只能是755

这条没试出来


3、ChrootDirectory %h 如果选择了这种模式,用户的home目录必须是root:root 权限,它的上级目录页必须是root:root,否则就会报错。

[root@iccsdb02 /]# ls -ld /amovs/

drwxr-xr-x 3 amovs amovs 4096 5月  23 16:00 /amovs/

[root@iccsdb02 /]# chown root:root /amovs

[root@iccsdb02 /]# ls -l /amovs/

drwxr-xr-x 3 root root 4096 5月  23 16:39 data


这里设置完了以后还出现了一个问题就是通过sftp软件上传后的文件属性是644的,也就是amovs用户删除不了upload 用户的上传的文件,这说明上传文件的权限并没有走系统用户umask,通过查了一些资料修改PAM值并测试成功了。


一,查看并开启ssh的PAM功能,

运行命令看看 ldd  /usr/sbin/sshd | grep libpam.so支持PAM

[amovs@iccsdb02 20170523]$ ldd /usr/sbin/sshd | grep libpam.so

libpam.so.0 => /lib64/libpam.so.0 (0x00007fce94f79000)

编辑/etc/ssh/sshd_config


UsePAM yes  #这默认是开启的,没有开的话开启了


二,编辑/etc/pam.d/sshd,(具体说明参照PAM),加上umask那一行。


#%PAM-1.0

auth       required     pam_sepermit.so

auth       include      password-auth

account    required     pam_nologin.so

account    include      password-auth

password   include      password-auth

# pam_selinux.so close should be the first session rule

session    required     pam_selinux.so close

session    required     pam_loginuid.so

# pam_selinux.so open should only be followed by sessions to be executed in the user context

session    required     pam_selinux.so open env_params

session    optional     pam_keyinit.so force revoke

session    include      password-auth


session     optional     pam_umask.so umask=0002


重启sshd服务就可以了


测试如下:

Linux 搭建Sftp服务并进行权限设置




本文转自 yuri_cto 51CTO博客,原文链接:http://blog.51cto.com/laobaiv1/1928973,如需转载请自行联系原作者

上一篇:A Neural Probabilistic Language Model


下一篇:PostgreSQL 10.1 手册_部分 II. SQL 语言_第 7 章 查询_7.4. 组合查询