Debian系統與SELinux的關系
Debian默認不啟用SELinux(其原生安全框架為AppArmor),因此配置SFTP時通常無需處理SELinux策略。若因特殊需求手動啟用了SELinux,需針對SFTP服務的訪問控制調整SELinux上下文和布爾值。
首先檢查SELinux是否啟用及當前模式(Enforcing/Permissive):
getenforce
Disabled
,則SELinux未啟用,無需進一步配置;Enforcing
,需調整策略以允許SFTP訪問。SELinux的ssh_sysadm_login
布爾值控制是否允許SSH用戶使用SFTP。啟用該布爾值(永久生效):
sudo setsebool -P ssh_sysadm_login on
此設置允許SFTP用戶通過SSH通道傳輸文件。
SFTP用戶的家目錄需具備正確的SELinux上下文(user_home_dir_t
),否則可能導致訪問被拒絕。檢查當前上下文:
ls -Z /home/username
若上下文不是user_home_dir_t
,臨時修改(重啟后失效):
sudo chcon -t user_home_dir_t /home/username
永久修改需使用semanage fcontext
(需安裝policycoreutils-python
):
sudo apt install policycoreutils-python # Debian需安裝此包
sudo semanage fcontext -a -t user_home_dir_t "/home/username(/.*)?"
sudo restorecon -Rv /home/username
此操作確保SELinux允許SFTP用戶訪問其家目錄。
若SFTP用戶需訪問特定目錄(如/var/sftp/upload
),需為其設置合適的上下文:
sudo chcon -t public_content_rw_t /var/sftp/upload
sudo semanage fcontext -a -t public_content_rw_t "/var/sftp/upload(/.*)?"
sudo restorecon -Rv /var/sftp/upload
public_content_rw_t
允許SFTP用戶讀寫該目錄。
修改配置后,重啟SSH服務并測試SFTP連接:
sudo systemctl restart ssh
sftp username@localhost
若仍遇到權限問題,查看SELinux日志定位具體原因:
sudo ausearch -m avc -ts recent
sudo aureport -m avc
根據日志提示調整上下文或布爾值。
注意:Debian原生使用AppArmor,若同時啟用SELinux,可能導致安全策略沖突。建議優先使用AppArmor管理SFTP權限,或完全禁用SELinux(sudo setenforce 0
)以避免不必要的復雜性。