# 用户和组管理 ## 用户管理 ### 用户配置文件和密码配置文件 #### 用户配置文件`/etc/passwd` ``` # 打印passwd最后一行 [root@lwz ~]# tail -n 1 /etc/passwd lwz:x:1000:1000:lwz:/home/lwz:/bin/bash ``` 每一行代表一个用户信息,每一列用冒号分隔一共七列: - 第一列:用户名 - 第二列:密码占位符,早期为用户的密码,后来因为安全问题,将密码保存在`/etc/shadow`文件里 - 第三列:用户的uid - 第四列:用户的gid - 第五列:用户的注释描述信息,没有实际作用 - 第六列:用户的家目录 - 第七列:用户的登录shell,默认是`/bin/bash` #### 密码配置文件`/etc/shadow` ``` # 打印shadow最后一行 [root@lwz ~]# tail -n 1 /etc/shadow lwz:$6$ln8kW5.8ArWsqx.q$ehOeZbPhdbH1PtCtOwGekwn1CNwSITlNxQXIzfRbVNDuaTbxd0ylwAPRWIW1vBRenGl2NHQEVxBsPiNpNFs5p1::0:99999:7::: ``` 跟`/etc/passwd`对应,每一行代表一个用户信息,每一列用冒号分隔,一共九列: - 第一列:用户名 - 第二列:加密后的密码 - 加密方式: - 如果密码为星号,或者密码的第一位是星号,代表这个用户是禁用状态,不可登陆。 - 如果为空,用户登陆不需要密码。 - `!!`:密码已经过期。 - `!`:密码开头第一位为`!`,用户被锁,无法登陆。 - `$6$`:开头,表示使用SHA-512算法加密。 - `$1$`:开头,表示使用MD5算法加密。 - `$2$`:开头,表示使用Blowfish算法加密。 - `$5$`:开头,表示使用SHA-256算法加密。 - 第三列:最近一次更改密码距离1970年1月1日总共多少天。 - 第四列:多少天后才可以更改密码,默认为0,不限制。 - 第五列:多少天内必须更改密码,否则密码过期,且无法登陆。 - 第六列:警告提醒,提示距离密码过期还有多少天。 - 第七列:不活动时间,用户没有登陆活动但账号仍能保持有效的最大天数。 - 第八列:用户距离1970年多少天后过期。 - 第九列:保留字段,没有实际作用。 ### 查看用户id信息:`id` `id`:可以查看用户用户的uid、gid和附加组的gid信息。 ``` # root用户id信息 [root@lwz ~]# id uid=0(root) gid=0(root) 组=0(root) # 查看指定用户id信息 [root@lwz ~]# id lwz uid=1000(lwz) gid=1000(lwz) 组=1000(lwz),10(wheel) ``` > `10(wheel)`:wheel组,是Linux系统中的一个特殊组,它包含所有允许登陆系统的用户。 #### 语法: `id [选项] 用户名` #### 选项: - `-u`:查看用户的uid信息。 - `-g`:查看用户的gid信息。 - `-G`:查看用户的附加组信息。 - `-n`:不显示用户名。可以和`-u` `-g` `-G`单独配合使用,只显示用户名、组名和附加组名。 ### 添加用户`useradd` #### 语法 `useradd [选项] 用户名 ` *中括号表示内容可有可无。* #### 选项: - `-u`:指定uid。root用户为0,centos7的普通用户从1000开始,并且不能重复。 - `-g`:指定gid。gid必须是已经存在的。 - `-d`:指定家目录。如果不指定,默认在`/home`目录下自己的用户名。 - `-s`:指定shell。如果不指定,默认是`/bin/bash`。如果指定为`/sbin/nologin`则不能登陆。 - `-c`:指定注释信息。 - `-M`:不创建家目录。一个用户没有家目录会出现很多问题,所以一般只在创建不可登陆的用户时使用。 #### 删除用户:`userdel` #### 语法: `userdel [选项] 用户名` ``` # 基本用法:直接删除一个用户,但是不会删除该用户的家目录。 [root@lwz ~]# userdel lwz1 [root@lwz ~]# ll /home/lwz1 总用量 0 ``` #### 选项 - `-r`:删除用户的同时,删除家目录。 ``` [root@lwz ~]# userdel -r lwz1 [root@lwz ~]# ll /home/ lwz/ pischi/ ``` ### 修改用户属性:`usermod` #### 语法 `usermod 选项 用户名` > *使用`usermod`命令至少需要一个选项* #### 选项 - `-u`:修改uid。 - `-g`:修改gid。可以指定组名,也可以指定gid。 ``` [root@lwz ~]# usermod -g lwz lwz1 [root@lwz ~]# id lwz1 uid=1001(lwz1) gid=1000(lwz) 组=1000(lwz) ``` - `-d`:修改家目录。如果更改用户的家目录不存在,需要将用户原有的家目录重命名为更改的家目录。或者复制系统的家目录模板`/etc/skel/`重命名到指定用户的家目录下。 - `-s`:修改shell。修改为`/sbin/nologin`则该用户无法登陆。 - `-G`:扩展组,可以指定多个组。 ``` [root@lwz ~]# id lwz1 uid=1001(lwz1) gid=1000(lwz) 组=1000(lwz) [root@lwz ~]# usermod -G lwz1,root lwz1 [root@lwz ~]# id lwz1 uid=1001(lwz1) gid=1000(lwz) 组=1000(lwz),1001(lwz1),0(root) ``` - `-L`:锁定用户,即无法登陆。`/etc/shadow`文件中用户的密码首位会加上一个`!`。被锁用户只能从root用户下`su 用户名`登陆。 - `-U`:解锁用户。 ### 用户切换:`su` #### 语法 `su [选项] [参数]` > *`su`命令不加任何选项和参数,会默认切换到root用户,需要输入root的密码* #### 选项 - `-`:可以加载要切换到的用户的环境变量和配置等。 - `-c`:使用指定用户执行一条命令,且不会切换到该用户。 ``` [lwz@lwz ~]$ su -c "mkdir /root/lwz" root 密码: [root@lwz lwz]# ll -d /root/lwz drwx------ 2 root root 4096 9月 7 15:55 /root/lwz ``` ### 用户密码管理:`passwd` #### 语法 `passwd [选项] [参数]` > * *`passwd`命令不加任何选项和参数,则默认修改当前用户的密码。只有管理员才能指定修改其他用户的密码。* > * *普通用户修改自己的密码,需要先输入旧密码,再输入新密码和确认新密码。* > * *新密码不能低于八位,也不能过于简单,且只能重试三次。* #### 选项 - `-l`:锁定用户。效果和`usermod -L`一样。 - `-u`:解锁用户。效果和`usermod -U`一样。 - `-stdin`:修改密码的另一种方式,将标准输出的内容作用于指定用户的密码。(只有管理员才能这样操作) ``` # 终端交互的方式,lwz的密码修改为123 [root@lwz lwz]# passwd --stdin lwz 更改用户 lwz 的密码 。 123 passwd:所有的身份验证令牌已经成功更新。 # 非交互的方式。将`echo`的标准输出`123123`作用于lwz的密码。 [root@lwz lwz]# echo "123123"|passwd --stdin lwz 更改用户 lwz 的密码 。 passwd:所有的身份验证令牌已经成功更新。 ``` ----- ## 用户组管理 ### 配置文件 #### 用户组配置文件 ``` [root@lwz ~]# tail -n 3 /etc/group pesign:x:992: lwz:x:1000: lwz1:x:1001:lwz1 ``` 每一行代表一个组,每一列用`:`分隔,一共四列: - 第一列:组名 - 第二列:密码占位符`x`,密码信息保存在`/etc/gshadow`文件中。 - 第三列:用户组的GID。 - 第四列:用户组的成员。 #### 组密码配置文件 ``` [root@lwz ~]# tail -n 3 /etc/gshadow pesign:!:: lwz:!:: lwz1:!::lwz1 ``` 与`/etc/group`文件一一对应,每一行代表一个组,每一列用`:`分隔,一共四列: - 第一列:组名 - 第二列:加密后的密码 - 第三列:组的管理员(多个用`,`分隔) - 第四列:组内成员(多个用`,`分隔) ### 创建用户组 #### 语法 `groupadd [选项] 组名` > * *`groupadd`命令用于创建一个新的用户组,新用户组的信息将被添加到`/etc/group`文件。* #### 选项 - `-g`:指定新用户组的GID。 ``` [root@lwz ~]# groupadd -g 1002 lwz2 [root@lwz ~]# tail -n 1 /etc/group lwz2:x:1002: ``` ### 修改用户组 #### 语法 `groupmod [选项] 组名` > *与`usermod`用法类似* #### 选项 - `-g`:修改用户组的GID。 - `-n`:修改用户组的名字。 ### 删除用户组 #### 语法 `groupdel 组名` ----- ## mkpasswd - 随机字符串 > *`mkpasswd`可以生成一组随机的字符串。* 使用前需要安装该命令。 $ yum install -y expect ### 语法 `mkpasswd [选项]` > *不带选项默认生成9位的随机字符串。* ``` [root@lwz ~]# mkpasswd .Tp6taZa8 ``` ### 选项 - `-l`:指定字符串的长度。 - `-s`:指定字符串中的特殊符号数量。 ### 示例:一步到位创建用户密码 使用一条命令生成随机字符串,长度为10,包含特殊符号的数量为2,保存到文件中,使用这个字符串创建用户的密码。 ``` # 一步到位创建用户并随机生成密码。"&&"符号代表前面的命令执行成功后,才会执行后面的命令。 [root@lwz ~]# mkpasswd -s 2 -l 10 >> passwd.txt && useradd lwz3 && tail -n 1 passwd.txt | passwd --stdin lwz3 更改用户 lwz3 的密码 。 passwd:所有的身份验证令牌已经成功更新。 # 给密码设置只有管理员可以读取,防止外泄。 [root@lwz ~]# chmod 600 passwd.txt ```