一、環(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