一、環(huán)境:
CentOS 6.8
使用 FileZilla 進行 sftp 連接
二、背景
給外包的工作人員提供我司服務(wù)器的某一目錄的訪問(包括讀寫)權(quán)限,方便他們部署代碼文件。
之所以是某一目錄的訪問,是因為 SFTP 的用戶登錄后,默認是能看到整個系統(tǒng)的文件目錄,這樣很不安全。
題外話:如果是針對 ftp 的用戶權(quán)限管理,推薦使用 vsftpd,可通過 yum 直接安裝。
三、正文
1、創(chuàng)建新用戶
adduser sftpuser1
useradd 和 adduser 的區(qū)別
useradd 只會添加一個用戶,并沒有創(chuàng)建它的主目錄,除了添加一個新用戶之外什么都沒有。這個用戶甚至不能登錄,因為沒有密碼。所以這里選擇 adduser。
2、設(shè)置該用戶密碼
passwd sftpuser1
回車后再輸入密碼即可
3、禁止該用戶登錄 SSH
因為我們只想該用戶使用 SFTP,并不需要該用戶能登錄 SSH,威脅安全。
usermod -s /bin/false sftpuser1
將sftpuser1
的 shell 改成 /bin/false。
4、修改該用戶的家目錄
usermod -d /data/wwwroot/user1/ sftpuser1
這樣每次用戶訪問服務(wù)器都會默認打開/data/wwwroot/user1/
,但還是可以跳出這個訪問其它目錄,需要進行下面一步的操作。
5、設(shè)置 sshd_config:
打開sshd_config
文件
vi /etc/ssh/sshd_config
找到 Subsystem sftp 這一行,修改成:
Subsystem sftp internal-sftpUsePAM yesMatch user sftpuser1ForceCommand internal-sftpChrootDirectory /data/wwwroot/user1/
將上面的 sftpuser1
和 /data/wwwroot/user1/
替換成你需要的。
多個用戶請重復(fù)配置這三行:
Match user sftpuser2
ForceCommand internal-sftp
ChrootDirectory /data/wwwroot/user2/
這樣可以為不同的用戶設(shè)置不同的限制目錄。
6、重新啟動 sshd 服務(wù):
/etc/init.d/sshd restart
現(xiàn)在用 SFTP 軟件使用sftpuser1
用戶登錄,就可以發(fā)現(xiàn)目錄已經(jīng)被限定、鎖死在/data/wwwroot/user1/
了。
四、可能遇到的問題
1、修改sshd_config
文件后重啟 sshd,報錯:Directive 'UseDNS' is not allowed within a Match block
語法錯誤,原因未知,只需要把兩段配置的位置互調(diào)就不報錯了。
修改前:
Subsystem sftp internal-sftp UsePAM yesMatch user sftpuser1 ForceCommand internal-sftp ChrootDirectory /data/wwwroot/user1/UseDNS noAddressFamily inet PermitRootLogin yesSyslogFacility AUTHPRIV PasswordAuthentication yes
修改后:
UseDNS noAddressFamily inet PermitRootLogin yesSyslogFacility AUTHPRIV PasswordAuthentication yesSubsystem sftp internal-sftp UsePAM yesMatch user sftpuser1 ForceCommand internal-sftp ChrootDirectory /data/wwwroot/user1/
注:當你出現(xiàn)這個錯誤的時候,sftp 肯定是連不上了。如果你習慣用 FileZilla 去修改配置文件,那么此時你得不情愿的切換到
shell,去用 vi/vim 去修改它了。
2、新用戶通過 sftp 訪問時,權(quán)限不全,只能讀不能寫
我試著用 root 賬號去把該用戶的家目錄權(quán)限改成 777,但是會出現(xiàn)該用戶 sftp 登陸不了的情況。(報錯:Server unexpectedly closed network connection)
google 了原因如下:
給新用戶的家目錄的權(quán)限設(shè)定有兩個要點:
1、由 ChrootDirectory 指定的目錄開始一直往上到系統(tǒng)根目錄為止的目錄擁有者都只能是 root
2、由 ChrootDirectory 指定的目錄開始一直往上到系統(tǒng)根目錄為止都不可以具有群組寫入權(quán)限(最大權(quán)限 755)
如果違反了上面的兩條要求,那么就會出現(xiàn)新用戶訪問不了 sftp
的情況。
所以/data/wwwroot/user1/
及上級的所有目錄屬主一定要是
root,并且組權(quán)限和公共權(quán)限不能有寫入權(quán)限,如果一定需要有寫入權(quán)限,那們可以在/data/wwwroot/user1/
下建立 777 權(quán)限的文件夾。
mkdir /data/wwwroot/user1/upload chown -R sftpuser1:root /data/wwwroot/user1/upload
這樣sftpuser1
用戶就可以在/data/wwwroot/user1/upload
里隨意讀寫文件了。
http://www.cnblogs.com/xjnotxj/p/6912471.html