Ssh

如何創建隔離/監禁的 SFTP 使用者?

  • June 17, 2020

我剛剛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/SSHfriend出門?/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 目錄。

引用自:https://unix.stackexchange.com/questions/561290