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)以避免不必要的复杂性。