在某些環境中,系統管理員想要允許極少數使用者在可以傳輸檔案到 Linux 機器中,但是不允許使用 SSH 。要實現這一目的,我們可以使用 SFTP,併為其構建 chroot 環境。
SFTP & chroot 背景:
SFTP 是指 SSH 檔案傳輸協議(SSH File Transfer protocol)或安全檔案傳輸協議(Secure File Transfer Protocol),它提供了可信資料流下的檔案訪問、檔案傳輸以及檔案管理功能。當我們為 SFTP 配置 chroot 環境後,只有被許可的使用者可以訪問,並被限制到他們的家目錄中,換言之:被許可的使用者將處於牢籠環境中,在此環境中它們甚至不能切換它們的目錄。
在本文中,我們將配置 RHEL 6.X 和 CentOS 6.X 中的 SFTP Chroot 環境。我們開啓一個使用者帳號 ‘Jack’,該使用者將被允許在 Linux 機器上傳輸檔案,但沒有 ssh 訪問許可權。
步驟:1 建立組
[root@localhost ~]# groupadd sftp_users
步驟:2 分配附屬組 (sftp_users) 給使用者
如果使用者在系統上不存在,使用以下命令建立(LCTT 譯註:這裏給使用者指定了一個不能登入的 shell,以防止通過 ssh 登入):
[root@localhost ~]# useradd -G sftp_users -s /sbin/nologin jack
[root@localhost ~]# passwd jack
對於已經存在的使用者,使用以下 usermod 命令進行修改:
[root@localhost ~]# usermod –G sftp_users -s /sbin/nologin jack
注意:如果你想要修改使用者的預設家目錄,那麼可以在 useradd 和 usermod 命令中使用 ‘-d’ 選項,並設定合適的許可權。
步驟:3 現在編輯配置檔案 “/etc/ssh/sshd_config”
# vi /etc/ssh/sshd_config
#comment out the below line and add a line like below
#Subsystem sftp /usr/libexec/openssh/sftp-server
Subsystem sftp internal-sftp
# add Below lines at the end of file
Match Group sftp_users
X11Forwarding no
AllowTcpForwarding no
ChrootDirectory %h
ForceCommand internal-sftp
此處:
Match Group sftp_users – 該引數指定以下的行將僅僅匹配 sftp_users 組中的使用者
ChrootDirectory %h – 該引數指定使用者驗證後用於 chroot 環境的路徑(預設的使用者家目錄)。對於使用者 Jack,該路徑就是/home/jack 。
ForceCommand internal-sftp – 該引數強制執行內部 sftp,並忽略任何~/.ssh/rc 檔案中的命令。
重啓 ssh 服務
# service sshd restart
步驟:4 設定許可權:
[root@localhost ~]# chmod 755 /home/jack
[root@localhost ~]# chown root /home/jack
[root@localhost ~]# chgrp -R sftp_users /home/jack
如果你想要允許 jack 使用者上傳檔案,那麼建立一個上傳資料夾,設定許可權如下:
[root@localhost jack]# mkdir /home/jack/upload
[root@localhost jack]# chown jack. /home/jack upload/
步驟:5 現在嘗試訪問系統並進行測試
嘗試通過 ssh 訪問系統
正如下圖所示,使用者 jack 通過 SFTP 登入,而且因為 chroot 環境不能切換目錄。
現在進行上傳和下載測試,如下圖:
正如上圖所示,jack 使用者的上傳下載功能都工作得很好。