linux之用户和用户组管理详解

时间:2021-10-03 07:29:37

#############用户和用户组管理###################
linux只认识UID和GID #可在/etc/passwd 和/etc/group中找到

##/etc/passwd 详解
[root@lgh2 ~]# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
省略。。。

很多用户为系统用户或伪用户。系统用户无法用来登录系统,但也不能删除,因为一旦删除,依赖这些用户运行的服务或程序就
不能正常执行,会导致系统问题

#格式
用户名:密码:UID(用户ID):GID(组ID):描述性信息:主目录:默认Shell
用户名:代表用户身份的符号
密码:”x“ 表示有密码,真正的密码存放在/etc/shadow中
UID:用户id,0-65535之间的数字,0表示root超级用户,1-499表示系统用户(伪用户)500-65535表示普通用户
GID:组ID,表示用户初始组组id
初始组:指用户登陆时就拥有这个用户组的相关权限。每个用户的初始组只能有一个,通常就是将和此用户的用户名相同的组名作为该用户的初始组
附加组,指用户可以加入多个其他的用户组,并拥有这些组的权限
描述性信息:解释语
主目录:就是用户的home目录
默认Shell:Linux 系统默认使用的命令解释器是 bash(/bin/bash)

##/etc/shadow 详解
[root@lgh2 ~]# cat /etc/shadow
root:$6$ma8fbbGcOsZzwVFU$6WxNnECNp8FjKH7a6ePicjhMWRvNCXrdonjYSn24uX5sP2A9tcD64MKOTdEkyrsdOdvoW42FhJJbJdOJ6AKL7.::0:99999:7:::
bin:*:17632:0:99999:7:::
daemon:*:17632:0:99999:7:::
省略。。。

#格式
用户名:加密密码:最后一次修改时间:最小修改时间间隔:密码有效期:密码需要变更前的警告天数:密码过期后的宽限时间:账号失效时间:保留字段
用户名:同/etc/passwd中的用户
加密密码:不能手工修改,SHA512 散列加密算法,所有伪用户的密码都是 "!!" 或 "*",代表没有密码是不能登录的。当然,新创建的用户如果不设定密码,
那么它的密码项也是 "!!",代表这个用户没有密码,不能登录。
最后一次修改时间:最后一次修改密码的时间,1970 年 1 月 1 日作为 1 不断累加得到的时间
最小修改时间间隔:该字段规定了从第 3 字段(最后一次修改密码的日期)起,多长时间之内不能修改密码。如果是 0,则密码可以随时修改;
密码有效期:指定距离第 3 字段(最后一次更改密码)多长时间内需要再次变更密码,否则该账户密码进行过期阶段
密码需要变更前的警告天数:与第 5 字段相比较,当账户密码有效期快到时,系统会发出警告信息给此账户
密码过期后的宽限天数:也称为“口令失效日”,失效之后,还可以登录的天数
账号失效时间:同第 3 个字段一样,使用自 1970 年 1 月 1 日以来的总天数作为账户的失效时间。该字段表示,账号在此字段规定的时间之外,不论你的密码是否过期,都将无法使用!

##/ect/group 详解
文件是用户组配置文件,即用户组的所有信息都存放在此文件中。
[root@lgh2 ~]# cat /etc/group
root:x:0:
bin:x:1:
daemon:x:2:
sys:x:3:
adm:x:4:
tty:x:5:
disk:x:6:
省略。。。

#格式
组名:密码:GID:该用户组中的用户列表
该用户组中的用户列表:该用户组是这个用户的初始组,则该用户不会写入这个字段
其他字段同上文

#/etc/gshadow 详解
[root@lgh2 ~]# cat /etc/gshadow
root:::
bin:::
daemon:::
省略。。。

#格式
组名:加密密码:组管理员:组附加用户列表

#cat /etc/login.defs | grep -v ^# | grep -v "^$"
可查看创建用户时的一些默认值(账号)

#useradd
-d #手工指定用户的主目录。主目录必须写绝对路径
-M #不创建home目录
-g #手工指定用户的初始组
-G #指定用户的附加组
-c #手工指定/etc/passwd文件中各用户信息中第 5 个字段的描述性内容,可随意配置;
-u #手工指定用户的 UID,注意 UID 的范围(不要小于 500)
-s #手工指定用户的登录 Shell,默认是 /bin/bash;
-e #指定用户的失效曰期,格式为 "YYYY-MM-DD"。也就是 /etc/shadow 文件的第八个字段;
-o #允许创建的用户的 UID 相同。例如,执行 "useradd -u 0 -o usertest" 命令建立用户 usertest
-r #创建系统用户,也就是 UID 在 1~499 之间,

/etc/default/useradd ##创建用户时一些默认的配置(home目录等)
也可以通过useradd -D 查看

[root@lgh2 skel]# ll -a /etc/skel/ ##可以用于复制到home目录下
total 24
drwxr-xr-x. 2 root root 62 Apr 11 2018 .
drwxr-xr-x. 91 root root 8192 Jun 27 04:47 ..
-rw-r--r--. 1 root root 18 Apr 10 2018 .bash_logout
-rw-r--r--. 1 root root 193 Apr 10 2018 .bash_profile
-rw-r--r--. 1 root root 231 Apr 10 2018 .bashrc

#passwd
#格式:passwd [选项] 用户名
-S:查询用户密码的状态,也就是 /etc/shadow 文件中此用户密码的内容。仅 root 用户可用;
-l:暂时锁定用户,该选项会在 /etc/shadow 文件中指定用户的加密密码串前添加 "!",使密码失效。仅 root 用户可用;
-u:解锁用户,和 -l 选项相对应,也是只能 root 用户使用;
--stdin:可以将通过管道符输出的数据作为用户的密码。主要在批量添加用户时使用;
-n 天数:设置该用户修改密码后,多长时间不能再次修改密码,也就是修改 /etc/shadow 文件中各行密码的第 4 个字段;
-x 天数:设置该用户的密码有效期,对应 /etc/shadow 文件中各行密码的第 5 个字段;
-w 天数:设置用户密码过期前的警告天数,对于 /etc/shadow 文件中各行密码的第 6 个字段;
-i 日期:设置用户密码失效日期,对应 /etc/shadow 文件中各行密码的第 7 个字段。

echo “abcd1234” | passwd username --stdin

#usermod
#格式:usermod [选项] 用户名
-c 用户说明:修改用户的说明信息,即修改 /etc/passwd 文件目标用户信息的第 5 个字段;
-d 主目录:修改用户的主目录,即修改 /etc/passwd 文件中目标用户信息的第 6 个字段,需要注意的是,主目录必须写绝对路径;
-e 日期:修改用户的失效曰期,格式为 "YYYY-MM-DD",即修改 /etc/shadow 文件目标用户密码信息的第 8 个字段;
-g 组名:修改用户的初始组,即修改 /etc/passwd 文件目标用户信息的第 4 个字段(GID);
-u UID:修改用户的UID,即修改 /etc/passwd 文件目标用户信息的第 3 个字段(UID);
-G 组名:修改用户的附加组,其实就是把用户加入其他用户组,即修改 /etc/group 文件;
-l 用户名:修改用户名称;
-L:临时锁定用户(Lock);
-U:解锁用户(Unlock),和 -L 对应;
-s shell:修改用户的登录 Shell,默认是 /bin/bash。

#chage
#格式:chage [选项] 用户名
-l:列出用户的详细密码状态;
-d 日期:修改 /etc/shadow 文件中指定用户密码信息的第 3 个字段,也就是最后一次修改密码的日期,格式为 YYYY-MM-DD;
-m 天数:修改密码最短保留的天数,也就是 /etc/shadow 文件中的第 4 个字段;
-M 天数:修改密码的有效期,也就是 /etc/shadow 文件中的第 5 个字段;
-W 天数:修改密码到期前的警告天数,也就是 /etc/shadow 文件中的第 6 个字段;
-i 天数:修改密码过期后的宽限天数,也就是 /etc/shadow 文件中的第 7 个字段;
-E 日期:修改账号失效日期,格式为 YYYY-MM-DD,也就是 /etc/shadow 文件中的第 8 个字段。

#userdel
#格式 userdel -r 用户名
-r 选项表示在删除用户的同时删除用户的家目录。

#id
id 命令可以查询用户的UID、GID 和附加组的信息
#格式: id 用户名

#su
#格式: su [选项] 用户名
-:当前用户不仅切换为指定用户的身份,同时所用的工作环境也切换为此用户的环境(包括 PATH 变量、MAIL 变量等),使用 - 选项可省略用户名,默认会切换为 root 用户。
-l:同 - 的使用类似,也就是在切换用户身份的同时,完整切换工作环境,但后面需要添加欲切换的使用者账号。
-p:表示切换为指定用户的身份,但不改变当前的工作环境(不使用切换用户的配置文件)。
-m:和 -p 一样;
-c 命令:仅切换用户执行一次命令,执行后自动切换回来,该选项后通常会带有要执行的命令。

su - -c "useradd user1" root
使用 su 命令时,有 - 和没有 - 是完全不同的,- 选项表示在切换用户身份的同时,连当前使用的环境变量也切换成指定用户的

#groupadd
#格式:groupadd [选项] 组名
-g GID:指定组 ID;
-r:创建系统群组。

#groupmod
#格式:groupmod [选项] 组名
-g GID:修改组 ID;
-n 新组名:修改组名

#groupdel
#格式:groupdel 组名
不能使用 groupdel 命令随意删除群组

#gpasswd
为了避免系统管理员(root)太忙碌,无法及时管理群组,我们可以使用 gpasswd 命令给群组设置一个群组管理员,
代替 root 完成将用户加入或移出群组的操作
#格式:gpasswd 选项 组名
:选项为空时,表示给群组设置密码,仅 root 用户可用。
-A user1,...:将群组的控制权交给 user1,... 等用户管理,也就是说,设置 user1,... 等用户为群组的管理员,仅 root 用户可用
-M user1,user2...:将 user1,... 加入到此群组中,仅 root 用户可用。
-r:移除群组的密码,仅 root 用户可用。
-R: 让群组的密码失效,仅 root 用户可用。
-a user: 将 user 用户加入到群组中。
-d user: 将 user 用户从群组中移除。

#newgrp
切换用户的有效组,newgrp 命令可以从用户的附加组中选择一个群组,作为用户新的初始组
#格式:newgrp 组名