如何創建隔離/監禁的 SFTP 使用者?
我剛剛
friend
在我的伺服器上創建了一個新使用者,目標是為我的朋友提供 SFTP 訪問權限,以便他可以在那里托管他的網站。我注意到,通過SFTP與使用者連接伺服器時
friend
,預設文件夾是/home/friend/
,但是您可以輕鬆退出/home/friend/
並訪問伺服器上具有讀取權限的所有文件,例如/home/anotheruser/website2/config.php
!我不想要這個。我被告知將此使用者置於“監禁/隔離模式”,因此,在我的預設值結束時
sshd_config
:... Subsystem sftp /usr/lib/openssh/sftp-server
…我添加了這個:
Match User friend ChrootDirectory /home/friend ForceCommand internal-sftp
並做到了
service sshd restart
。然後我根本無法通過 SFTP 與使用者連接伺服器
friend
,哎呀!我也嘗試通過替換Subsystem ...
,Subsystem sftp internal-sftp
但結果是一樣的:friend
無法再通過 SFTP 連接伺服器。問題:
如何隔離使用者,使他無法通過 SFTP/SSH
friend
出門?/home/friend/
注意:我已經閱讀瞭如何使用 chroot Jail 將 SFTP 使用者限制在主目錄中,我如何 chroot 僅 sftp 的 SSH 使用者進入他們的家?, ETC。
工作解決方案
這是受教程How to configure an sftp server with limited chroot users with ssh keys在@HeysusEscobar 的回答中提到的啟發。
執行此操作
root
:useradd friend # NB: this doesn't create a home dir, see https://askubuntu.com/q/374870 passwd friend # set the password groupadd sftpusers mkdir /sftp mkdir /sftp/friend # this is where he'll be chrooted mkdir /sftp/friend/home # his home directory mkdir /sftp/friend/www # for websites usermod -aG sftpusers friend # aG for append group chown friend:sftpusers /sftp/friend/home/ chown friend:sftpusers /sftp/friend/www/ usermod -d /sftp/friend/home friend # set as his home directory
將此添加到
/etc/ssh/sshd_config
:# Subsystem sftp /usr/lib/openssh/sftp-server # you'll probably need to comment this line Subsystem sftp internal-sftp -d /home Match Group sftpusers ChrootDirectory /sftp/%u
並做
service sshd restart
。就這樣!注意:
- 其他使用者仍然可以
ssh
,所以它沒有為其他使用者修改任何內容- 使用者
friend
不能ssh
- 使用者
friend
可以通過連接sftp
PS:如果您想讓
friend
的網站可用於網際網路,您可以將其添加到 Apache 配置中:<VirtualHost *:80> ServerName friend.example.com DocumentRoot /sftp/friend/www php_admin_value "open_basedir" "/sftp/friend" <Directory /> AllowOverride All Require all granted </Directory> </VirtualHost>
站點註釋:即使使用
open_basedir
上述方法,friend
仍然不能使用 PHP 退出他的 chrooted 環境或執行對整個文件系統產生影響的惡意程式碼?連結問題:chrooted/isolated SFTP 使用者仍然可以使用 PHP 訪問整個文件系統舊的(僅半工作)解決方案
根據文件,
ChrootDirectory /home/friend
由幫助替換:ChrootDirectory /home
ChrootDirectory:指定 chroot(2) 身份驗證後的目錄路徑名。路徑名的所有組成部分必須是任何其他使用者或組不可寫的根目錄。
這樣,使用者
friend
可以再次連接到 SFTP;不能出去/home/
;但仍然可以訪問/home/anotheruser/...
,這是不需要的!
不確定您使用的是什麼作業系統,但當我必須配置被監禁的 SFTP 使用者時,我使用下面的連結。這是一個關於如何配置被監禁的 SFTP 使用者的非常好的教程。
https://access.redhat.com/solutions/2399571
然後,我會將任何目錄掛載到您想讓您的朋友訪問的 chroot 目錄。