Contents

如何在Linux上禁止用户登录

1. 概述

在本教程中,我们将介绍在 Linux 上用于阻止用户登录的各种方法及其区别。

2. nologin命令

**我们可以使用nologin 命令来阻止用户登录。*它会打印一条消息并以非零状态码退出以指示失败。我们可以使用usermod 命令的-s*标志更改用户的登录 shell 。

例如,让我们用它来阻止名为blogdemo的用户登录:

$ sudo usermod blogdemo -s /sbin/nologin
$ sudo su - blogdemo
This account is currently not available.

现在,如果我们尝试使用su登录帐户,我们会看到一个错误,表明登录已被禁用。

我们也可以通过修改*/etc/nologin.txt*文件来修改错误信息:

$ echo "Hi, logins have been disabled for your account. Please contact your system administrator for more information" | sudo tee /etc/nologin.txt
$ su - blogdemo
Hi, logins have been disabled for your account. Please contact your system administrator for more information

3. false的命令

false 命令是一个简单的命令,我们用来返回一个非零状态码 来指示失败。让我们运行它并检查它的状态码:

$ false
$ echo $?
1

** falsetrue 命令相反,它总是返回零状态码,表示成功**:

$ true
$ echo $?
0

我们可以在 Bash while语句中使用它们来重复执行代码:

while false; do
    echo "This code will never run!"
done
while true; do
    echo "This code will run forever!"
done

第一个代码块永远不会执行,因为false总是表示失败,而true总是表示成功:

$ ./script
This code will run forever!
This code will run forever!
This code will run forever!
...

虽然它不是false命令的主要目的,但我们仍然可以使用它来防止用户登录,就像我们使用nologin命令一样。但是,false不会打印错误消息并立即退出 shell,这可能会导致混淆:

$ sudo usermod blogdemo -s /bin/false  
$ sudo su - blogdemo
$ echo $?
1

这意味着我们不能像在上一节中对nologin所做的那样自定义错误消息。

4. passwd命令

我们可以使用passwd 命令的*-l*标志来锁定用户帐户,防止登录:

$ sudo passwd -l blogdemo
passwd: password expiry information changed.
$ su - blogdemo
Password:
su: Authentication failure

**现在,当我们尝试login时,su会将所有密码视为无效。我们可以使用sudo passwd -u blogdemo解锁帐户。**此方法类似于false命令,因为它不允许我们显示描述性消息。

5. usermod命令

passwd命令类似,我们可以使用带有*-L-U*标志的usermod 命令来锁定/解锁用户帐户:

$ sudo usermod -L blogdemo
$ su - blogdemo
Password: 
su: Authentication failure
$ sudo usermod -U blogdemo
$ su - blogdemo
Password: 
$ echo $? # Success
0