限制SFTP用戶對Linux中特定目錄的訪問

在本指南中,我們將學習如何限制SFTP用戶對Linux系統中特定目錄的訪問。 SFTP,安全文件傳輸協議的縮寫 是通過SSH運行的安全文件傳輸協議。它以更安全的方式提供了舊版FTP協議提供的所有功能。

限制SFTP用戶對Linux中特定目錄的訪問

為了限制SFTP用戶對Linux中特定目錄的訪問,使用了SFTP chroot監獄。 SFTP chroot監獄確保將SFTP用戶登錄系統後,僅限制在特定目錄中,而不能訪問系統中的其他目錄。

默認情況下,OpenSSH附帶對SFTP chroot jails的支持。

安裝OpenSSH服務器

為了能夠為SFTP用戶配置受限目錄訪問,請確保已安裝OpenSSH服務器。

可以通過運行以下命令來安裝OpenSSH Server。

關於CentOS和其他RHEL衍生產品;

yum -y install openssh-server openssh-clients

在Ubuntu和其他Debian衍生產品上;

apt install openssh-server -y

對於其他Linux發行版,請查閱發行指南以了解如何安裝OpenSSH服務器。

創建非特權SFTP用戶帳戶

創建一個組來分配SFTP用戶帳戶。 請注意,這不是必需的,因為您要分配給用戶的目錄可能已經分配了特定的組

groupadd sftpgroup

接下來,為SFTP用戶創建一個特權較低的帳戶。相應地替換用戶名;

useradd -M -g sftpgroup -s /usr/sbin/nologin sftpuser

例如,如果您要限制SFTP用戶訪問該組已擁有的Web服務器目錄(如Nginx和Apache根目錄) nginxapache 要麼 www-data,您只需替換以下內容即可設置用戶的主要組 sftpgroup 與任一 nginxapache 要麼 www-data

useradd -M -g nginx -s /usr/sbin/nologin sftpuser
useradd -M -g apache -s /usr/sbin/nologin sftpuser
useradd -M -g www-data -s /usr/sbin/nologin sftpuser

您也可以使用以下命令更改用戶的主要組 usermod 命令。例如,要更改默認組 sftpuserapache,只需運行;

usermod -g apache sftpuser

請注意,該組必須存在才能使上面的命令成功。

您也可以將sftpuser添加到現有組。

usermod -aG apache sftpuser

為用戶創建密碼以解鎖其帳戶。

passwd sftpuser

驗證用戶所屬的組;

groups sftpuser
sftpuser : www-data

使用Chroot Jail限制SFTP用戶對目錄的訪問

一旦將SFTP用戶的主要組設置為與您要限制訪問的目錄的組相似,就可以使用OpenSSH配置Chroot ja那教。

OpenSSH使您可以指定目錄的路徑名,在使用身份驗證後,用戶將被限制在該目錄中 ChrootDirectory 參數。

打開SSH配置文件進行編輯;

vim /etc/ssh/sshd_config

通過注釋(在開頭添加#)以下行來啟用SSH進程內SFTP服務器…

# override default of no subsystems
Subsystem      sftp    /usr/libexec/openssh/sftp-server

……並按以下方式替換;

Subsystem sftp  internal-sftp

接下來,在上面的行之後添加以下配置選項;

Match User sftpuser
  ChrootDirectory /var/www/html/
  ForceCommand internal-sftp
  AllowTcpForwarding no
  X11Forwarding no

這樣您的配置看起來像;

...
# override default of no subsystems
#Subsystem      sftp    /usr/libexec/openssh/sftp-server
Subsystem sftp  internal-sftp
Match User sftpuser
  ChrootDirectory /var/www/html/
  ForceCommand internal-sftp
  AllowTcpForwarding no
  X11Forwarding no
...

注意分配給的目錄名稱 ChrootDirectory。這指定了用戶指定的目錄,由 Match User 選項具有訪問權限。在這種情況下,目錄為 /var/www/html/kifarunix

ls -alhd /var/www/html/kifarunix/
drwxr-xr-x 5 www-data www-data 4.0K Mar 16 14:59 /var/www/html/kifarunix/

在這種情況下,綁定路徑 /var/www/html,需要完全歸所有者所有 root 以確保SFTP用戶在其chroot監獄之外沒有訪問權限。

ls -alh /var/www/html
total 4.0K
drwxr-xr-x. 4 root   root     34 Mar 16 21:56 .
drwxr-xr-x. 4 root   root     33 Mar 12 15:20 ..
drwxr-xr-x. 5 apache apache 4.0K Mar 16 21:56 kifarunix

有關使用的選項的更多說明,只需諮詢, man sshd_config

如果您需要指定特定的組,只需替換該行, Match User sftpuserMatch User sftpgroup 相應地替換組的名稱。

重新啟動SSH服務;

systemctl restart sshd

要麼

systemctl restart ssh

驗證SFTP用戶受限目錄訪問

請注意,在上述設置中,我們限制了SFTP用戶的訪問權限, sftpuser 到Web服務器的根目錄, /var/www/html/kifarunix

要驗證訪問控制,請以SFTP用戶身份登錄。相應地更改用戶名和server_IP;

sftp [email protected]_IP

如果SSH在非默認端口上運行,則需要指定端口。

sftp -P port [email protected]_IP

登錄後,檢查當前工作目錄;

sftp> pwd
Remote working directory: /
sftp>

列出內容

sftp> ls
kifarunix  
sftp>

注意ChrootDirectory下的子目錄。

sftp> cd ../../
sftp> pwd
Remote working directory: /
sftp> ls
kifarunix  
sftp>

從上面命令的輸出中可以看到,sftpuser在指定目錄之外無權訪問,這就是將SFTP用戶限制為特定目錄的訪問是多麼簡單。

這標誌着我們如何將SFTP用戶訪問限制為Linux中特定目錄的結尾。

Sidebar