CentOS SFTP權限設置技巧
為提升管理效率,建議創建專門的SFTP用戶組(如sftpusers),并將用戶添加至該組。創建用戶時,需指定主目錄并設置不可登錄shell(/sbin/nologin),防止用戶通過SSH登錄系統:
groupadd sftpusers # 創建SFTP用戶組
useradd -m -g sftpusers -s /sbin/nologin sftpuser # 創建用戶并加入組
passwd sftpuser # 設置用戶密碼
編輯/etc/ssh/sshd_config文件,通過Match指令針對SFTP用戶組進行限制。關鍵配置包括:
ForceCommand internal-sftp);ChrootDirectory %h,%h代表用戶主目錄);Subsystem sftp internal-sftp # 啟用內部SFTP
Match Group sftpusers # 匹配sftpusers組
ChrootDirectory %h # 限制根目錄為用戶主目錄
ForceCommand internal-sftp # 強制使用SFTP
AllowTcpForwarding no # 禁用TCP轉發
X11Forwarding no # 禁用X11轉發
ChrootDirectory指定的主目錄(如/home/sftpuser)必須屬主為root,權限為755(用戶可讀/寫/執行,組和其他用戶僅可讀/執行),避免用戶修改目錄結構逃逸chroot環境:chown root:root /home/sftpuser # 主目錄屬主為root
chmod 755 /home/sftpuser # 主目錄權限755
uploads),屬主為用戶自身,組為sftpusers,權限為755(或775若需組內用戶寫入):mkdir /home/sftpuser/uploads # 創建上傳目錄
chown sftpuser:sftpusers /home/sftpuser/uploads # 屬主為用戶,組為sftpusers
chmod 755 /home/sftpuser/uploads # 目錄權限755
為避免用戶在上傳目錄中創建的文件繼承用戶自身組(而非sftpusers組),可設置SGID位。這樣,目錄內新文件和子目錄將自動繼承父目錄的組所有權:
chown root:sftpusers /home/sftpuser # 主目錄屬組改為sftpusers
chmod 2775 /home/sftpuser # 設置SGID位(2表示SGID)
若SELinux處于Enforcing模式,需調整上傳目錄的安全上下文,允許SFTP訪問。使用semanage和restorecon命令:
semanage fcontext -a -t ssh_home_t "/home/sftpuser/uploads(/.*)?" # 添加上下文規則
restorecon -Rv /home/sftpuser/uploads # 恢復目錄上下文
完成所有配置后,重啟SSH服務使更改生效:
systemctl restart sshd # 重啟SSH服務
systemctl enable sshd # 設置開機自啟
使用SFTP客戶端(如FileZilla或命令行)連接服務器,驗證權限設置:
sftp sftpuser@your_server_ip # 輸入密碼登錄
ls .. # 嘗試訪問上級目錄,應提示"Permission denied"
put local_file.txt # 上傳文件至uploads目錄,應成功
替換密碼認證為SSH密鑰認證,提升賬戶安全性。生成密鑰對并將公鑰上傳至用戶家目錄的.ssh文件夾:
ssh-keygen -t rsa # 客戶端生成密鑰對
ssh-copy-id sftpuser@your_server_ip # 復制公鑰至服務器
修改/etc/ssh/sshd_config啟用密鑰認證:
PubkeyAuthentication yes # 啟用公鑰認證
PasswordAuthentication no # 禁用密碼認證