---
title: 禁止无需登录的账号设置登录权限
description: "在Linux系统中，通常存在多个账号，而并非所有账号都需要具备登录权限。例如，systemd、dhcp等软件安装时自动创建的账号，这些账号仅用于运行相关的服务进程。对于不需要登录的账号，必须禁止其登录能力。如果允许非登录账号有登录能力，将扩大系统的攻击面，攻击者可以利用这些账号进行bash交互操作，从而攻击系统。"
url: https://www.hikunpeng.com/document/detail/zh/kunpengcctrustzone/tee/cVMcont/kunpengtee_zjsj_openclaw_028.html
sourcePath: /source/zh/kunpengcctrustzone/tee/cVMcont/kunpengtee_zjsj_openclaw_028.html
indexId: 12a9414429ff8a6bf784945bccf85c6057b7aed6fc661d40a766a3c1012a608375
---
# 禁止无需登录的账号设置登录权限

在Linux系统中，通常存在多个账号，而并非所有账号都需要具备登录权限。例如，systemd、dhcp等软件安装时自动创建的账号，这些账号仅用于运行相关的服务进程。对于不需要登录的账号，必须禁止其登录能力。如果允许非登录账号有登录能力，将扩大系统的攻击面，攻击者可以利用这些账号进行bash交互操作，从而攻击系统。

- sync、shutdown、halt属于特殊账号，通常情况下不能将Shell设置为“/sbin/nologin”或“/bin/false”。且账号在“/etc/shadow”文件中口令设置为“*”，无法直接登录。
- openEuler默认满足无需登录的账号不具备登录能力。


1. 确认是否所有不应登录的账号均已设置“/sbin/nologin”或“/bin/false”，或对应的口令已被锁定。

  - 通过如下命令查看“/etc/passwd”文件中所有禁止登录的账号，可根据实际业务场景进行比对确认。

```
cat /etc/passwd | grep "\/sbin\/nologin\|\/bin\/false" | awk -F ":" '{print $1}'
```


  - 通过如下命令查看“/etc/passwd”文件中所有允许登录的账号，可根据实际业务场景进行比对确认。

```
cat /etc/passwd | grep -v "\/sbin\/nologin\|\/bin\/false" | awk -F ":" '{print $1}'
```


  - 通过如下命令查看“/etc/passwd”文件中所有口令被锁定的账号，可根据实际业务场景进行比对确认。

```
cat /etc/passwd | awk -F ":" '{print $1}' | xargs -I '{}' passwd -S '{}' | awk '($2=="L" || $2=="LK") {print $1}'
```


  - 通过如下命令查看“/etc/passwd”文件中所有口令未被锁定的账号，可根据实际业务场景进行比对确认。

```
cat /etc/passwd | awk -F ":" '{print $1}' | xargs -I '{}' passwd -S '{}' | awk '($2!="L" && $2!="LK") {print $1}'
```


2. 支持以下两种方式锁定和解锁用户账号。

  - （推荐）方式一：通过usermod命令修改“/etc/passwd”文件，将指定账号的登录Shell设置为“/sbin/nologin”或“/bin/false”。该方法不仅可以禁止用户登录，还能防止通过su命令切换到该用户，以test用户为例。

    - 锁定：

```
usermod -s /sbin/nologin test
```


      或

```
usermod -s /bin/false test
```


    - 解锁：

```
usermod -s /bin/bash test
```


  - 方式二：通过修改“/etc/shadow”文件，在指定账号的第二个字段中添加感叹号“!”或“!!”来锁定口令。以test用户为例，若用户并未设置口令，则会提示操作失败。

    - 锁定：

```
usermod -L test
```


      或

```
passwd -l test
```


    - 解锁：

```
usermod -U test
```


      或

```
passwd -u test
```


使用usermod命令锁定的口令，可以使用passwd命令进行解锁，反之亦然。


3. 锁定或解锁后，可通过如下命令查询账号状态。

```
passwd -S test
```


  - 返回信息如下（LK），表示口令已经锁定。

```
test LK 2022-01-01 0 30 10 35 (Password locked.)
```


  - 返回信息如下（NP），表示口令未设置。

```
test NP 2020-12-03 0 50 10 35 (Empty password.)
```


  - 返回信息如下（PS），口令已被设置，且未锁定。

```
test PS 2022-01-01 0 30 10 35 (Password set, SHA512 crypt.)
```
