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

本文涉及的产品
运维安全中心(堡垒机),企业双擎版|50资产|一周时长
运维安全中心(堡垒机),免费版 6个月
简介:

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

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,如需转载请自行联系原作者

相关文章
|
17天前
|
监控 Oracle 关系型数据库
Linux平台Oracle开机自启动设置
【11月更文挑战第8天】在 Linux 平台设置 Oracle 开机自启动有多种方法,本文以 CentOS 为例,介绍了两种常见方法:使用 `rc.local` 文件(较简单但不推荐用于生产环境)和使用 `systemd` 服务(推荐)。具体步骤包括编写启动脚本、赋予执行权限、配置 `rc.local` 或创建 `systemd` 服务单元文件,并设置开机自启动。通过 `systemd` 方式可以更好地与系统启动过程集成,更规范和可靠。
|
23天前
|
Linux 应用服务中间件 Shell
linux系统服务二!
本文详细介绍了Linux系统的启动流程,包括CentOS 7的具体启动步骤,从BIOS自检到加载内核、启动systemd程序等。同时,文章还对比了CentOS 6和CentOS 7的启动流程,分析了启动过程中的耗时情况。接着,文章讲解了Linux的运行级别及其管理命令,systemd的基本概念、优势及常用命令,并提供了自定义systemd启动文件的示例。最后,文章介绍了单用户模式和救援模式的使用方法,包括如何找回忘记的密码和修复启动故障。
42 5
linux系统服务二!
|
23天前
|
Linux 应用服务中间件 Shell
linux系统服务!!!
本文详细介绍了Linux系统(以CentOS7为例)的启动流程,包括BIOS自检、读取MBR信息、加载Grub菜单、加载内核及驱动程序、启动systemd程序加载必要文件等五个主要步骤。同时,文章还对比了CentOS6和CentOS7的启动流程图,并分析了启动流程的耗时。此外,文中还讲解了Linux的运行级别、systemd的基本概念及其优势,以及如何使用systemd管理服务。最后,文章提供了单用户模式和救援模式的实战案例,帮助读者理解如何在系统启动出现问题时进行修复。
42 3
linux系统服务!!!
|
23天前
|
Linux 数据安全/隐私保护
linux特殊权限!!
本文介绍了Linux系统中的特殊权限,包括suid、sgid和sbit。suid使普通用户在执行特定命令时获得root权限;sgid使用户在创建文件时继承目录的用户组权限;sbit确保用户只能删除自己在共享目录中创建的文件。此外,文章还讲解了chattr和lsattr命令,用于更改和查看文件的扩展属性,以及umask的概念和计算方法,帮助理解文件和目录的默认权限。
36 1
linux特殊权限!!
|
18天前
|
Oracle Ubuntu 关系型数据库
Linux平台Oracle开机自启动设置
【11月更文挑战第7天】本文介绍了 Linux 系统中服务管理机制,并详细说明了如何在使用 systemd 和 System V 的系统上设置 Oracle 数据库的开机自启动。包括创建服务单元文件、编辑启动脚本、设置开机自启动和启动服务的具体步骤。最后建议重启系统验证设置是否成功。
|
28天前
|
Linux 数据库
Linux服务如何实现服务器重启后的服务延迟自启动?
【10月更文挑战第25天】Linux服务如何实现服务器重启后的服务延迟自启动?
141 3
|
28天前
|
关系型数据库 MySQL Linux
Linux系统如何设置自启动服务在MySQL数据库启动后执行?
【10月更文挑战第25天】Linux系统如何设置自启动服务在MySQL数据库启动后执行?
72 3
|
7月前
|
Linux
linux中服务管理
在Linux服务管理中,从传统的System V init到Upstart,再到广泛采用的systemd,管理方式不断发展。systemd以其强大的功能和依赖解决成为现代Linux的核心。`systemctl`是管理服务的关键命令,如启动(`start`)、停止(`stop`)、重启(`restart`)服务及设置开机启动(`enable`)或取消(`disable`)。了解和服务管理,特别是systemd和`systemctl`的使用,对系统管理员至关重要。其他如xinetd用于控制网络服务,而特定环境下有OpenRC等工具。
58 2
|
安全 Ubuntu 网络协议
Linux中的服务管理
Linux系统可以同时运行数百个任务。其中大多数都属于操作系统环境的组成部分,不过可能也会有那么一两个你不需要的**守护进程**。有3种可用于启动守护进程和服务的工具,Linux发行版支持其中任意一种。传统的SysV系统使用/etc/init.d中的脚本。较新的systemd守护进程除了使用/etc/init.d之外,还用到了systemctl调用。还有些发行版使用的是upstart,配置脚本保存在/etc/init中。systemd如今已经取代了SysVinit系统。upstart是由Ubuntu开发并采用的,但是在14.04版中,已经改成了systemd。
153 3
|
Ubuntu 关系型数据库 MySQL
【Linux进阶篇】启动流程和服务管理
【Linux进阶篇】启动流程和服务管理
216 0