Ubuntu Server如何配置SFTP(創建用戶監獄)

SSH File Transfer Protocol是一個比普通FTP更爲安全的文件傳輸協議。(參考資料:http://en.wikipedia.org/wiki/SSH_File_Transfer_Protocol)它工做在Secure Shell(SSH)上,確保文件被加密傳輸。html

 

由於工做須要,我研究了一下如何在Ubuntu Server上配置SFTP,記錄以下。linux

 

需求:在服務器上開通SFTP文件服務,容許某些用戶上傳及下載文件。可是這些用戶只能使用SFTP傳輸文件,不能使用SSH終端訪問服務器,而且SFTP不能訪問系統文件(即所謂的「Jail(監獄)」)。系統管理員則既能使用SFTP傳輸文件,也能使用SSH遠程管理服務器。shell

 

爲了便於討論,我假設我將容許sftp-users用戶組內的用戶使用SFTP,但不容許使用SSH Shell,且該組用戶將被"監獄"(修改系統根目錄)。我將在sftp-users組內建立一個用戶「alice」。而我將容許ssh-users使用SFTP以及SSH。系統管理員的帳戶名爲admin。ubuntu

 

第01步,若是尚未安裝OpenSSH服務器,先安裝它。安全

sudo apt-get install openssh-server

第02步,爲SFTP訪問建立用戶組,便於管理權限。服務器

sudo addgroup sftp-users

第03步,建立SFTP用戶,並配置相應權限。這裏第二行的意思是將alice從全部其餘用戶組中移除並加入到sftp-users組,而且關閉其Shell訪問。若是想深刻了解usermod命令,可使用如下"man usermod"命令查看幫助文檔。ssh

sudo adduser alice
sudo usermod -G sftp-users -s /bin/false alice

第04步,建立SSH用戶組,並把管理員加入到該組(注意usermod中的-a參數的意思是不從其餘用戶組用移除)。post

sudo addgroup ssh-users
sudo usermod -a -G ssh-users admin

第05步,準備「監獄」的根目錄及共享目錄。這裏解釋一下,「監獄」的根目錄必須知足如下要求:全部者爲root,其餘任何用戶都不能擁有寫入權限。所以,爲了讓SFTP用戶可以上傳文件,還必須在「監獄」根目錄下再建立一個普通用戶可以寫入的共享文件目錄。爲了便於管理員經過SFTP管理上傳的文件,我把這個共享文件目錄配置爲:由admin全部,容許sftp-users讀寫。這樣,管理員和SFTP用戶組成員就都能讀寫這個目錄了。加密

sudo mkdir /home/sftp_root
sudo mkdir /home/sftp_root/shared
sudo chown admin:sftp-users /home/sftp_root/shared
sudo chmod 770 /home/sftp_root/shared

第06步,修改SSH配置文件。spa

sudo nano /etc/ssh/sshd_config

在sshd_config文件的最後,添加如下內容:

AllowGroups ssh-users sftp-users

Match Group sftp-users

ChrootDirectory /home/sftp_root

AllowTcpForwarding no

X11Forwarding no

ForceCommand internal-sftp

 

這些內容的意思是:

只容許ssh-uers及sftp-users經過SSH訪問系統;

針對sftp-users用戶,額外增長一些設置:將「/home/sftp_root」設置爲該組用戶的系統根目錄(所以它們將不能訪問該目錄以外的其餘系統文件);禁止TCP Forwarding和X11 Forwarding;強制該組用戶僅僅使用SFTP。

 

若是須要進一步瞭解細節,可使用「man sshd_config」命令。這樣設置以後,SSH用戶組能夠訪問SSH,而且不受其餘限制;而SFTP用戶組僅能使用SFTP進行訪問,並且被關進監獄目錄。

 

第07步,重啓系統以便使新配置生效。

sudo reboot now

 

完成啦!

 

進一步的討論:SSH用戶組將能遠程訪問全部系統文件,也許不是全部狀況下都適用。某些狀況下,也許想一樣把SSH用戶也關監獄。這時候,須要做跟SFTP相似的配置(除了不用usermod -s /bin/false),並且須要把容許SSH用戶訪問的系統文件複製到監獄根目錄下相應的位置。具體信息能夠在網上查找,我本身沒有實踐驗證,因此就不誤導你們了。(上面這個教程,是我從網上不少似是而非的資料中經過本身的實驗整理出來的,在Ubuntu Server 12.04 LTS 64-bit系統上驗證經過。很是痛恨那些好像能用但實際錯漏不少的教程!)

 

參考:

http://yhf8377.blog.163.com/blog/static/176860177201210217219800/

http://ihacklog.com/post/how-to-enable-secure-shell-in-ubuntu.html

http://blog.csdn.net/xiaosu_521/article/details/2157011http://www.linuxidc.com/Linux/2011-01/31022.htm

相關文章
相關標籤/搜索