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 用户所在的行,例如:
plaintext
lynn:x:1001:1001::/home/lynn:/bin/bash将行尾的 /bin/bash 修改为 /sbin/nologin:
plaintext
lynn:x:1001:1001::/home/lynn:/sbin/nologin保存并退出。
示例 2:查看 nologin 的效果
更改后,可以切换到另一个终端或使用 su 命令模拟 lynn 用户登录,观察效果:
bash
运行
sudo su - lynn或者尝试 SSH 登录。您将看到类似如下的输出,然后连接立即关闭:
plaintext
This account is currently not available.示例 3:恢复用户登录权限
如果需要允许用户 lynn 重新登录,只需将其 Shell 改回有效的登录 Shell,例如 /bin/bash:
bash
运行
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 等)或管理员账户进行操作前,请务必确认操作意图,避免导致服务无法正常运行或自己无法管理系统。