如何设置Linux系统默认Shell为rssh受限模式增强身份验证安全性?

2026-05-07 12:541阅读0评论SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计742个文字,预计阅读时间需要3分钟。

如何设置Linux系统默认Shell为rssh受限模式增强身份验证安全性?

将用户默认配置为+SSH是一种成熟、轻量且有效的身份验证手段——它不阻止登录,但明确限制用户只能使用SCP/SFTP等安全协议传输文件,完全禁用交互式命令行访问,从而最大程度缩小攻击面。

确认 rssh 已安装并合法注册

rssh 不是系统默认 shell,必须先安装并写入 /etc/shells,否则 chshusermod 会拒绝设置:

  • Debian/Ubuntu:sudo apt install rssh
  • RHEL/CentOS/Fedora:sudo yum install rsshsudo dnf install rssh
  • 安装后检查路径(通常为 /usr/bin/rssh/usr/local/bin/rssh),再将其追加到 /etc/shells 中:
    echo "/usr/bin/rssh" | sudo tee -a /etc/shells

为指定用户启用 rssh 作为登录 Shell

推荐使用 usermod(需 root 权限),避免手动编辑 /etc/passwd 出错:

  • 直接切换用户 shell:sudo usermod -s /usr/bin/rssh backupuser
  • 若需批量配置,可配合 for 循环:
    for u in user1 user2 backup; do sudo usermod -s /usr/bin/rssh "$u"; done
  • 验证是否生效:getent passwd backupuser | cut -d: -f7 应返回 /usr/bin/rssh

精细化控制协议权限(通过 /etc/rssh.conf)

rssh 的核心优势在于可按需放开协议,而非“全有或全无”。编辑 /etc/rssh.conf(默认已注释示例):

  • 只允许 SCP:
    取消注释 allowsftpallowscp 对应行,并确保其余如 allowrsyncallowcvs 保持注释状态
  • 禁用所有协议(仅允许登录失败提示):
    保留全部协议选项为注释,rssh 将拒绝任何操作
  • 启用 chroot(需额外配置目录结构):
    设置 chrootpath = /var/chroot/backupuser,并确保该路径满足 chroot 环境最小依赖(如含 /bin/bash/usr/lib/openssh/sftp-server 等)

测试与安全加固要点

配置完成后务必实测,同时关闭潜在绕过路径:

  • 用目标用户 SSH 登录:ssh backupuser@localhost,预期返回类似 This account is restricted by rssh. 并立即退出
  • 尝试 SCP 上传:scp file.txt backupuser@localhost:/upload/,应成功;若失败,检查服务端 /upload/ 目录权限及 SELinux 上下文(如启用)
  • 禁止该用户使用 sudo 或拥有 /bin/bash 等其他合法 shell 路径,防止降级绕过
  • 确保 /etc/passwd 中该用户 home 目录存在且可写(SCP 需要落点),但不要赋予执行权限(如 chmod 755 ~backupuser 即可)

本文共计742个文字,预计阅读时间需要3分钟。

如何设置Linux系统默认Shell为rssh受限模式增强身份验证安全性?

将用户默认配置为+SSH是一种成熟、轻量且有效的身份验证手段——它不阻止登录,但明确限制用户只能使用SCP/SFTP等安全协议传输文件,完全禁用交互式命令行访问,从而最大程度缩小攻击面。

确认 rssh 已安装并合法注册

rssh 不是系统默认 shell,必须先安装并写入 /etc/shells,否则 chshusermod 会拒绝设置:

  • Debian/Ubuntu:sudo apt install rssh
  • RHEL/CentOS/Fedora:sudo yum install rsshsudo dnf install rssh
  • 安装后检查路径(通常为 /usr/bin/rssh/usr/local/bin/rssh),再将其追加到 /etc/shells 中:
    echo "/usr/bin/rssh" | sudo tee -a /etc/shells

为指定用户启用 rssh 作为登录 Shell

推荐使用 usermod(需 root 权限),避免手动编辑 /etc/passwd 出错:

  • 直接切换用户 shell:sudo usermod -s /usr/bin/rssh backupuser
  • 若需批量配置,可配合 for 循环:
    for u in user1 user2 backup; do sudo usermod -s /usr/bin/rssh "$u"; done
  • 验证是否生效:getent passwd backupuser | cut -d: -f7 应返回 /usr/bin/rssh

精细化控制协议权限(通过 /etc/rssh.conf)

rssh 的核心优势在于可按需放开协议,而非“全有或全无”。编辑 /etc/rssh.conf(默认已注释示例):

  • 只允许 SCP:
    取消注释 allowsftpallowscp 对应行,并确保其余如 allowrsyncallowcvs 保持注释状态
  • 禁用所有协议(仅允许登录失败提示):
    保留全部协议选项为注释,rssh 将拒绝任何操作
  • 启用 chroot(需额外配置目录结构):
    设置 chrootpath = /var/chroot/backupuser,并确保该路径满足 chroot 环境最小依赖(如含 /bin/bash/usr/lib/openssh/sftp-server 等)

测试与安全加固要点

配置完成后务必实测,同时关闭潜在绕过路径:

  • 用目标用户 SSH 登录:ssh backupuser@localhost,预期返回类似 This account is restricted by rssh. 并立即退出
  • 尝试 SCP 上传:scp file.txt backupuser@localhost:/upload/,应成功;若失败,检查服务端 /upload/ 目录权限及 SELinux 上下文(如启用)
  • 禁止该用户使用 sudo 或拥有 /bin/bash 等其他合法 shell 路径,防止降级绕过
  • 确保 /etc/passwd 中该用户 home 目录存在且可写(SCP 需要落点),但不要赋予执行权限(如 chmod 755 ~backupuser 即可)