1. 程式人生 > >CentOS的ssh sftp配置及權限設置[轉載-驗證可用]

CentOS的ssh sftp配置及權限設置[轉載-驗證可用]

用戶 客戶 mod ner allow 兩個 http sel 重啟

從技術角度來分析,幾個要求:
1、從安全方面看,sftp會更安全一點
2、線上服務器提供在線服務,對用戶需要控制,只能讓用戶在自己的home目錄下活動
3、用戶只能使用sftp,不能ssh到機器進行操作

提供sftp服務,可以用系統自帶的internal-sftp,也可以使用vsftpd,這裏需求不多,直接選用internal-sftp。

限制用戶只能在自己的home目錄下活動,這裏需要使用到chroot,openssh 4.8p1以後都支持chroot,我現在用的是CentOS 6.3,自帶的openssh已經是5.3p1,足夠了。

可以輸入:
# ssh -V
來查看openssh的版本,如果低於4.8p1,需要自行升級安裝,不在這裏具體介紹了。

假設,有一個名為sftp的組,這個組中的用戶只能使用sftp,不能使用ssh,且sftp登錄後只能在自己的home目錄下活動

1、創建sftp組
# groupadd sftp

2、創建一個sftp用戶,名為mysftp
# useradd -g sftp -s /bin/false mysftp
# passwd mysftp

3、sftp組的用戶的home目錄統一指定到/data/sftp下,按用戶名區分,這裏先新建一個mysftp目錄,然後指定mysftp的home為/data/sftp/mysftp

# mkdir -p /data/sftp/mysftp
# usermod -d /data/sftp/mysftp mysftp

4、配置sshd_config
編輯 /etc/ssh/sshd_config

# vim +132 /etc/ssh/sshd_config
找到如下這行,並註釋掉
Subsystem sftp /usr/libexec/openssh/sftp-server

添加如下幾行
Subsystem sftp internal-sftp
Match Group sftp
ChrootDirectory /data/sftp/%u
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no

解釋一下添加的幾行的意思

Subsystem sftp internal-sftp
這行指定使用sftp服務使用系統自帶的internal-sftp

Match Group sftp
這行用來匹配sftp組的用戶,如果要匹配多個組,多個組之間用逗號分割

當然,也可以匹配用戶
Match User mysftp
這樣就可以匹配用戶了,多個用戶名之間也是用逗號分割,但我們這裏按組匹配更靈活和方便

ChrootDirectory /data/sftp/%u
用chroot將用戶的根目錄指定到/data/sftp/%u,%u代表用戶名,這樣用戶就只能在/data/sftp/%u下活動,chroot的含義,可以參考這裏:http://www.ibm.com/developerworks/cn/linux/l-cn-chroot/

ForceCommand internal-sftp
指定sftp命令

AllowTcpForwarding no
X11Forwarding no
這兩行,如果不希望該用戶能使用端口轉發的話就加上,否則刪掉

5、設定Chroot目錄權限
# chown root:sftp /data/sftp/mysftp
# chmod 755 /data/sftp/mysftp

錯誤的目錄權限設定會導致在log中出現”fatal: bad ownership or modes for chroot directory XXXXXX”的內容

目錄的權限設定有兩個要點:
1、由ChrootDirectory指定的目錄開始一直往上到系統根目錄為止的目錄擁有者都只能是root
2、由ChrootDirectory指定的目錄開始一直往上到系統根目錄為止都不可以具有群組寫入權限

所以遵循以上兩個原則
1)我們將/data/sftp/mysftp的所有者設置為了root,所有組設置為sftp
2)我們將/data/sftp/mysftp的權限設置為755,所有者root有寫入權限,而所有組sftp無寫入權限

6、建立SFTP用戶登入後可寫入的目錄
照上面設置後,在重啟sshd服務後,用戶mysftp已經可以登錄,但使用chroot指定根目錄後,根應該是無法寫入的,所以要新建一個目錄供mysftp上傳文件。這個目錄所有者為mysftp,所有組為sftp,所有者有寫入權限,而所有組無寫入權限

# mkdir /data/sftp/mysftp/upload
# chown mysftp:sftp /data/sftp/mysftp/upload
# chmod 755 /data/sftp/mysftp/upload

7、重啟sshd服務

# service sshd restart

到這裏,mysftp已經可以通過sftp客戶端登錄並可以上傳文件到upload目錄。
如果還是不能在此目錄下上傳文件,提示沒有權限,檢查SElinux是否關閉,可以使用如下指令關閉SElinux
修改/etc/selinux/config文件中的SELINUX="" 為 disabled ,然後重啟。或者
# setenforce 0

一開始,我以為是權限問題導致的無法上傳文件,即使給777權限給文件夾也不行. 然後幹脆關閉了SElinux,終於可以上傳了。

CentOS的ssh sftp配置及權限設置[轉載-驗證可用]