centos7 搭建sftp服務,並指定訪問特定權限的特定目錄
-
場景模擬:
user1用戶:
對/home/sftp/user1/files 目錄有讀寫權限,並只能通過sftp登錄服務器,不可以ssh登錄, 且只能在user1目錄下操作user2用戶:
對/home/sftp/user2/files 目錄有讀寫權限,並只能通過sftp登錄服務器,不可以ssh登錄,且只能在user2目錄下操作user2-r用戶:
對/home/sftp/user2/files 目錄只有只讀(下載)權限,並只能通過sftp登錄服務器,不可以ssh登錄,且只能在user2目錄下操做 -
創建sftpuser組,新增sftp登錄用戶user1、user2、user2-r,限制用戶不可以ssh登錄服務器
# groupadd sftpuser # user1dd -g sftpuser -s /bin/false user1 && echo "user1@123"|passwd user1 --stdin # user1dd -g sftpuser -s /bin/false user2 && echo "user2@123"|passwd user2 --stdin # user1dd -g sftpuser -s /bin/false user2-r && echo "user2-r@123"|passwd user2-r --stdin
-
創建兩個用戶的登錄目錄,並設定目錄權限
mkdir -p /home/sftp/{user1,user2}/files # chown root:root /home/sftp/ # chown root:sftpuser /home/sftp/{user1,user2}/ # chown user1:sftpuser /home/sftp/user1/files # chown user2:sftpuser /home/sftp/user2/files # chmod 755 /home/sftp/{user1,user2}
-
修改配置文件sshd_config,指定不同用戶登錄不同目錄
# vi /etc/ssh/sshd_config
-
修改sshd_config文件,指定不同用戶登錄不同目錄
# vi /etc/ssh/sshd_config 註釋掉下面一行 #Subsystem sftp /usr/libexec/openssh/sftp-server 添加以下內容 Subsystem sftp internal-sftp Match User user2-r ChrootDirectory /home/sftp/user2 ForceCommand internal-sftp AllowTcpForwarding no X11Forwarding no Match Group sftpuser ChrootDirectory /home/sftp/%u ForceCommand internal-sftp AllowTcpForwarding no X11Forwarding no
-
目錄權限設置要點: ChrootDirectory參數指定的目錄,其權限及其所有的上級文件夾權限,屬主必須是root,且只有屬主能擁有寫權限,即權限最大設置只能是755。上面之所以要創建files目錄,是因爲無論user1還是user2對自己的登錄目錄user1和user2都只有只讀權限,而通過上面第3步的權限設置,我們可以讓這兩個用戶對自己目錄下的files擁有讀寫權限,而使得user2-r對files目錄只有只讀權限,從而達到不同用戶擁有不同的權限設定需求。 上面配置中,user2-r的配置必須在sftpuser組配置之前,以後添加新的用戶也是如此,否則會因爲參數“/home/sftp/%u”優先匹配/home/sftp/user2-r目錄,而實際中user2-r目錄是不存在,造成登錄失敗。
-
重啓sshd服務:
#service sshd restart #systemctl restart sshd