在Linux中為非SSH用戶配置SFTP環境
在某些環境中,系統管理員想要允許極少數用戶在可以傳輸文件到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用戶的上傳下載功能都工作得很好。
via: http://www.linuxtechi.com/configure-chroot-sftp-in-linux/
作者:Pradeep Kumar 譯者:GOLinux 校對:wxy