Linux中sftp加权限,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相關版本
[[email?protected] /]# 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、創建相關組和用戶
[[email?protected] /]# groupadd ?-g 601 amovs
[[email?protected] /]# groupadd ?-g 602 dataload
[[email?protected] /]# groupadd ?-g 603 download
[[email?protected] /]# useradd ?-u 601 ?-g amovs ?-G dataload ?-d /amovs ?amovs
[[email?protected] /]# useradd ?-u 602 ?-s /bin/false ?-g dataload ?-d ?/data/dataload upload
[[email?protected] /]# 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的詳細含義請參考如下鏈接:
ForceCommand internal-sftp ? ?#指定sftp命令
X11Forwarding no ? ? ? ? ? ? #這兩行,如果不希望該用戶能使用端口轉發的話就加上,否則刪掉
AllowTcpForwarding no
注意:
要實現Chroot功能,目錄權限的設置非常重要。否則無法登錄,給出的錯誤提示也讓人無語。
基本上報錯都是這樣的
Connecting to 192.168.56.102...
Write failed: Broken pipe
Couldn‘t read packet: Connection reset by peer
目錄權限設置這里從網上找到了3條總結測試如下:
1、ChrootDirectory設置的目錄權限及其所有的上級文件夾權限,屬主和屬組必須是root:root
這里我的/data 屬組為root:root ?而/data/dataload 屬組為upload:dataload ?,具體如下
[[email?protected] ~]# ls -ld /data
drwxr-xr-x 3 root root 4096 5月 ?23 17:27 /data
[[email?protected] 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,否則就會報錯。
[[email?protected] /]# ls -ld /amovs/
drwxr-xr-x 3 amovs amovs 4096 5月 ?23 16:00 /amovs/
[[email?protected] /]# chown root:root /amovs
[[email?protected] /]# 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
[[email?protected] 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服務就可以了
測試如下:
原文:http://laobaiv1.blog.51cto.com/2893832/1928973
總結
以上是生活随笔為你收集整理的Linux中sftp加权限,Linux 搭建Sftp服务并进行权限设置的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux运行 netcore,linu
- 下一篇: linux 查看flash大小,Linu