限制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根目錄) nginx
, apache
要麼 www-data
,您只需替換以下內容即可設置用戶的主要組 sftpgroup
與任一 nginx
, apache
要麼 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
命令。例如,要更改默認組 sftpuser
至 apache
,只需運行;
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 sftpuser
與 Match 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中特定目錄的結尾。
。