温馨提示×

centos sftp权限设置技巧

小樊
43
2025-10-26 00:50:28
栏目: 智能运维

CentOS SFTP权限设置技巧

1. 创建专用SFTP用户组与用户

为提升管理效率,建议创建专门的SFTP用户组(如sftpusers),并将用户添加至该组。创建用户时,需指定主目录并设置不可登录shell(/sbin/nologin),防止用户通过SSH登录系统:

groupadd sftpusers  # 创建SFTP用户组
useradd -m -g sftpusers -s /sbin/nologin sftpuser  # 创建用户并加入组
passwd sftpuser  # 设置用户密码

2. 配置SSH限制SFTP访问

编辑/etc/ssh/sshd_config文件,通过Match指令针对SFTP用户组进行限制。关键配置包括:

  • 启用内部SFTP子系统(ForceCommand internal-sftp);
  • 限制用户根目录(ChrootDirectory %h%h代表用户主目录);
  • 禁用TCP转发和X11转发(增强安全性)。
    示例配置:
Subsystem sftp internal-sftp  # 启用内部SFTP
Match Group sftpusers  # 匹配sftpusers组
    ChrootDirectory %h  # 限制根目录为用户主目录
    ForceCommand internal-sftp  # 强制使用SFTP
    AllowTcpForwarding no  # 禁用TCP转发
    X11Forwarding no  # 禁用X11转发

3. 正确设置目录权限

  • 主目录权限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
    

4. 使用SGID位保持组一致性

为避免用户在上传目录中创建的文件继承用户自身组(而非sftpusers组),可设置SGID位。这样,目录内新文件和子目录将自动继承父目录的组所有权:

chown root:sftpusers /home/sftpuser  # 主目录属组改为sftpusers
chmod 2775 /home/sftpuser  # 设置SGID位(2表示SGID)

5. 处理SELinux上下文(若启用SELinux)

若SELinux处于Enforcing模式,需调整上传目录的安全上下文,允许SFTP访问。使用semanagerestorecon命令:

semanage fcontext -a -t ssh_home_t "/home/sftpuser/uploads(/.*)?"  # 添加上下文规则
restorecon -Rv /home/sftpuser/uploads  # 恢复目录上下文

6. 重启SSH服务应用配置

完成所有配置后,重启SSH服务使更改生效:

systemctl restart sshd  # 重启SSH服务
systemctl enable sshd  # 设置开机自启

7. 测试SFTP连接

使用SFTP客户端(如FileZilla或命令行)连接服务器,验证权限设置:

sftp sftpuser@your_server_ip  # 输入密码登录
ls ..  # 尝试访问上级目录,应提示"Permission denied"
put local_file.txt  # 上传文件至uploads目录,应成功

8. 可选:使用密钥认证增强安全性

替换密码认证为SSH密钥认证,提升账户安全性。生成密钥对并将公钥上传至用户家目录的.ssh文件夹:

ssh-keygen -t rsa  # 客户端生成密钥对
ssh-copy-id sftpuser@your_server_ip  # 复制公钥至服务器

修改/etc/ssh/sshd_config启用密钥认证:

PubkeyAuthentication yes  # 启用公钥认证
PasswordAuthentication no  # 禁用密码认证

0