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服务就可以了


测试如下:

wKioL1klKRPBgxn6AAB3jrxQWUo344.jpg




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

相关文章
|
Java 关系型数据库 MySQL
在Linux操作系统上设置JDK、Tomcat、MySQL以及J2EE后端接口的部署步骤
让我们总结一下,给你的Linux操作系统装备上最强的军队,需要先后装备好JDK的弓箭,布置好Tomcat的阵地,再把MySQL的物资原料准备好,最后部署好J2EE攻城车,那就准备好进军吧,你的Linux军团,无人可挡!
605 18
|
Ubuntu Linux 网络安全
在Linux云服务器上限制特定IP进行SSH远程连接的设置
温馨提示,修改iptables规则时要格外小心,否则可能导致无法远程访问你的服务器。最好在掌握足够技术知识和理解清楚操作含义之后再进行。另外,在已经配置了防火墙的情况下,例如ufw(Ubuntu Firewall)或firewalld,需要按照相应的防火墙的规则来设置。
741 24
|
Linux Shell
在Linux、CentOS7中设置shell脚本开机自启动服务
以上就是在CentOS 7中设置shell脚本开机自启动服务的全部步骤。希望这个指南能帮助你更好地管理你的Linux系统。
2353 25
|
监控 Oracle 关系型数据库
Linux平台Oracle开机自启动设置
【11月更文挑战第8天】在 Linux 平台设置 Oracle 开机自启动有多种方法,本文以 CentOS 为例,介绍了两种常见方法:使用 `rc.local` 文件(较简单但不推荐用于生产环境)和使用 `systemd` 服务(推荐)。具体步骤包括编写启动脚本、赋予执行权限、配置 `rc.local` 或创建 `systemd` 服务单元文件,并设置开机自启动。通过 `systemd` 方式可以更好地与系统启动过程集成,更规范和可靠。
1367 2
|
Oracle Ubuntu 关系型数据库
Linux平台Oracle开机自启动设置
【11月更文挑战第7天】本文介绍了 Linux 系统中服务管理机制,并详细说明了如何在使用 systemd 和 System V 的系统上设置 Oracle 数据库的开机自启动。包括创建服务单元文件、编辑启动脚本、设置开机自启动和启动服务的具体步骤。最后建议重启系统验证设置是否成功。
682 1
|
关系型数据库 MySQL Linux
Linux系统如何设置自启动服务在MySQL数据库启动后执行?
【10月更文挑战第25天】Linux系统如何设置自启动服务在MySQL数据库启动后执行?
1167 3
|
Linux 应用服务中间件 nginx
Linux下权限设置之suid、sgid、sticky
Linux下权限设置之suid、sgid、sticky
|
Ubuntu Linux
Linux实践|设置静态 IP 地址
Linux实践|设置静态 IP 地址
Linux实践|设置静态 IP 地址
|
Linux Shell
10-8|linux date设置时间
10-8|linux date设置时间
|
Unix Linux Python
Cron定时设置在linux和mac中的使用
文章详细说明了如何在Linux和Mac操作系统中使用Cron进行定时任务的设置,并提供了多个Cron表达式的实例。
706 0