Linux 安全加固:nologin 命令详解|禁止用户交互式登录完整教程 1. 命令简介nologin 是一个特殊的系统命令其主要功能是礼貌地拒绝用户登录系统。当某个用户的登录 Shell 被设置为 /sbin/nologin 或 /usr/sbin/nologin 时该用户尝试登录系统如通过 SSH、本地终端等时系统会显示一条预设的拒绝信息例如 “This account is currently not available”并在系统日志中记录此次登录尝试。此机制通常用于为系统服务创建专用的运行账户这些账户仅用于启动和运行服务而不允许进行交互式登录从而增强系统安全性。2. 语法格式nologin 命令本身没有复杂的语法它通常在用户登录过程中由系统自动调用。bash运行/sbin/nologin # 或 /usr/sbin/nologin3. 常用选项及说明nologin 命令本身不接受常规的命令行选项。它的行为是固定的打印拒绝信息并立即以非零状态退出。但是配置用户使用 nologin Shell 是更常见的操作这通常通过修改系统文件或使用其他命令来完成修改 /etc/passwd 文件将目标用户条目的最后一个字段即登录 Shell修改为 /sbin/nologin 或 /usr/sbin/nologin。 使用 usermod 命令这是更安全、更推荐的方式。bash运行usermod -s /sbin/nologin [用户名]-s, --shell指定用户的新登录 Shell。4. 示例用法示例 1禁止特定用户登录系统假设要禁止用户 lynn 进行交互式系统登录但该用户可能仍可用于运行进程或访问 FTP 等服务。方法一使用 usermod 命令推荐bash运行sudo usermod -s /sbin/nologin lynn执行后用户 lynn 的登录 Shell 将被更改。当 lynn 下次尝试登录时会看到拒绝信息。方法二直接编辑 /etc/passwd 文件使用 sudo vipw 或 sudo vi /etc/passwd 编辑文件。 找到 lynn 用户所在的行例如plaintextlynn:x:1001:1001::/home/lynn:/bin/bash将行尾的 /bin/bash 修改为 /sbin/nologinplaintextlynn:x:1001:1001::/home/lynn:/sbin/nologin保存并退出。示例 2查看 nologin 的效果更改后可以切换到另一个终端或使用 su 命令模拟 lynn 用户登录观察效果bash运行sudo su - lynn或者尝试 SSH 登录。您将看到类似如下的输出然后连接立即关闭plaintextThis account is currently not available.示例 3恢复用户登录权限如果需要允许用户 lynn 重新登录只需将其 Shell 改回有效的登录 Shell例如 /bin/bashbash运行sudo usermod -s /bin/bash lynn示例 4创建仅用于运行服务的系统账户在安装某些服务如 Apache、MySQL时通常会创建专用的系统账户。创建时直接指定 nologin Shell 是最佳实践bash运行sudo useradd -r -s /sbin/nologin myserviceuser-r创建系统账户UID 较小通常无主目录。-s /sbin/nologin直接指定禁止登录的 Shell。5. 注意事项与 passwd -l 的区别passwd -l锁定账户和设置 nologin Shell 是不同的。passwd -l 是通过在密码字段前添加来禁用密码认证完全阻止该账户通过密码登录包括 SSH、FTP 等但可能不影响密钥登录或已存在的会话。nologin 是改变登录后的 Shell 行为不影响认证阶段。用户可能仍能通过其他方式如 SSH 密钥完成认证但认证成功后无法获得 Shell。它通常不影响该用户通过其他协议如 FTP、Samba访问资源除非这些协议也检查登录 Shell。根据需求选择合适的方法。对于服务账户nologin 更常用对于需要临时禁用的人用户账户passwd -l 可能更直接。/etc/nologin 文件在系统根目录创建 /etc/nologin 文件是一种全局性的临时禁止登录方法/run/nologin 或 /var/run/nologin 作用相同。效果一旦创建此文件系统将禁止除 root 用户外的所有用户登录。用途常用于系统维护、关机前或紧急情况下。操作bash运行# 禁止所有非root用户登录 sudo touch /etc/nologin # 恢复所有用户登录 sudo rm /etc/nologin自定义信息您可以在 /etc/nologin 文件中写入自定义的提示信息用户在登录时会看到这些内容。Shell 路径在不同的 Linux 发行版中nologin 的路径可能不同常见的有 /sbin/nologin 和 /usr/sbin/nologin。使用 which nologin 或 whereis nologin 命令可以确认您系统上的正确路径。不影响现有进程更改用户的登录 Shell 不会影响该用户已经运行的进程。谨慎操作在对关键系统账户如 www‑data, mysql 等或管理员账户进行操作前请务必确认操作意图避免导致服务无法正常运行或自己无法管理系统。