目录
一、导入
1、基础
2、切换用户
二、用户与用户组基本信息
1、用户基本信息: /etc/passwd
2、用户密码信息: /etc/shadow
3、用户组配置信息: /etc/group
4、用户组密码信息: /etc/gshadow
三、管理用户
1、添加用户-useradd命令
(1)useradd基本操作:
(2)useradd特殊操作
2、passwd使用
3、修改用户信息-usermod命令
4、删除用户-userdel命令
四、管理用户组
1、添加用户组-groupadd命令
2、修改用户组信息-groupmod命令
3、删除用户组信息-groupdel命令
六、其他命令
1、id与group命令
2、groupmems命令
3、修改用户有效组-newgrp命令
4、chage命令
[www@localhost ~]$ whoami
www
su命令:实现任何身份的切换,包括从普通用户切换为 root 用户、从 root 用户切换为普通用户以及普通用户之间的切换。【只切换用户,不切换当前目录】
su - 命令:切换到用户的主目录。
su - -c "command" 命令:以root用户身份执行一条特权命令,执行之后立刻恢复为普通用户,注意两个“-”之间有空格
[zys@centos7 ~]$ su - root // 从用户zys切换到root用户
密码: <== 在这里输入root用户的密码
上一次登录:三 1月 20 09:30:43 CST 2021:0 上
[root@centos7 ~]# su - zys // 从root用户切换到普通用户,不需要输入密码
[zys@centos7 ~]$ exit // 退出用户zys,返回root用户
登出
[root@centos7 ~]# exit // 退出root用户,返回用户zys
登出
[zys@centos7 ~]$
[www@localhost home]$ cat /etc/shadow
cat: /etc/shadow: Permission denied
[www@localhost home]$ su - -c "cat /etc/shadow"
Password:
root:$1$yPSpfI5I$fK2IGiBSdP3bTAWiLJBmj1::0:99999:7:::
bin:*:17834:0:99999:7:::
daemon:*:17834:0:99999:7:::
...
[www@localhost home]$
[www@localhost ~]$ tail -n 10 /etc/passwd
setroubleshoot:x:990:984::/var/lib/setroubleshoot:/sbin/nologin
saned:x:989:983:SANE scanner daemon user:/usr/share/sane:/sbin/nologin
gdm:x:42:42::/var/lib/gdm:/sbin/nologin
gnome-initial-setup:x:988:982::/run/gnome-initial-setup/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
www:x:1000:1000:www:/home/www:/bin/bash
tester1:x:1001:1001::/home/tester1:/bin/bash
①用户名:一串代表用户身份的字符串。
②密码:"x" 表示此用户设有密码,但不是真正的密码,真正的密码保存在 /etc/shadow 文件中
③UID,用户 ID,每个用户都有唯一的一个 UID,当UID为0时,表示超级用户,系统用户UID范围为:1~999,普通用户UID为1000~65535.【在 Linux 中,如何把普通用户升级成管理员呢?只需把其他用户的 UID 修改为 0 就可以了,此时用户名也变为root,因为一个id对应一个用户名,当id为0时,用户名也变为root】
④GID 简称“组ID”,表示用户初始组的组 ID 号。
初始组,指用户登陆时就拥有这个用户组的相关权限。每个用户的初始组只能有一个,通常就是将和此用户的用户名相同的组名作为该用户的初始组。比如说,我们手工添加用户 lamp,在建立用户 lamp 的同时,就会建立 lamp 组作为 lamp 用户的初始组。
附加组,指用户可以加入多个其他的用户组,并拥有这些组的权限。每个用户只能有一个初始组,除初始组外,用户再加入其他的用户组,这些用户组就是这个用户的附加组。附加组可以有多个,而且用户可以有这些附加组的权限。附加组的身份是可以修改的,但是我们在工作中不修改初始组,只修改附加组,因为修改了初始组有时会让管理员逻辑混乱。
⑤用户描述信息:用来解释这个用户的意义
⑥主目录:用户登录后有操作权限的访问目录,通常称为用户的主目录。
root 超级管理员账户的主目录为 /root,普通用户的主目录为 /home/yourIDname
⑦默认Shell:可以理解为用户登录之后所拥有的权限。如果这里使用的是 bash 命令解释器,就代表这个用户拥有权限范围内的所有权限。例如:
我手工添加了 lamp 用户,它使用的是 bash 命令解释器,那么这个用户就可以使用普通用户的所有权限。[root@localhost ~]# vi /etc/passwd
lamp:x:502:502::/home/lamp:/bin/bash
因为 /sbin/nologin 就是禁止登录的 Shell。同样,如果我在这里放入的系统命令,如 /usr/bin/passwd,例如:[root@localhost ~]# vi /etc/passwd
lamp:x:502:502::/home/lamp:/sbin/nologin
[root@localhost ~]#vi /etc/passwd
lamp:x:502:502::/home/lamp:/usr/bin/passwd
那么这个用户可以登录,但登录之后就只能修改自己的密码。但是,这里不能随便写入和登陆没有关系的命令(如 ls),系统不会识别这些命令,同时也就意味着这个用户不能登录。
[www@localhost ~]$ cat /etc/shadow
cat: /etc/shadow: Permission denied
[www@localhost ~]$ ls -l /etc | grep shadow
----------. 1 root root 792 May 5 07:48 gshadow
----------. 1 root root 780 Apr 21 01:10 gshadow-
----------. 1 root root 1153 May 5 07:48 shadow
----------. 1 root root 1123 Apr 21 01:10 shadow-
[www@localhost ~]$ su root
Password:
[root@localhost www]# tail -10 /etc/shadow
setroubleshoot:!!:19103::::::
saned:!!:19103::::::
gdm:!!:19103::::::
gnome-initial-setup:!!:19103::::::
sshd:!!:19103::::::
avahi:!!:19103::::::
postfix:!!:19103::::::
tcpdump:!!:19103::::::
www:$1$yPSpfI5I$fK2IGiBSdP3bTAWiLJBmj1:19103:0:99999:7:::
tester1:!!:19117:0:99999:7:::
①用户名:一串代表用户身份的字符串。
②密码:"x" 表示此用户设有密码,但不是真正的密码,真正的密码保存在 /etc/shadow 文件中
③最近一次密码修改日期:此字段表示最后一次修改密码的时间,Linux 计算日期的时间是以 1970 年 1 月 1 日作为 1 不断累加得到的时间,到 1971 年 1 月 1 日,则为 366 天。这里显示 15775 天,也就是说,此 www 账号在 1970 年 1 月 1 日之后的第 19103 天修改的www用户密码。
④最小修改时间间隔:该字段规定了从第 3 字段(最后一次修改密码的日期)起,多长时间之内不能修改密码。如果是 0,则密码可以随时修改;如果是 10,则代表密码修改后 10 天之内不能再次修改密码。
⑤密码有效期:这个字段可以指定距离第 3 字段(最后一次更改密码)多长时间内需要再次变更密码,否则该账户密码进行过期阶段。
⑥密码到期前的警告天数:与第 5 字段相比较,当账户密码有效期快到时,系统会发出警告信息给此账户,提醒用户 "再过 n 天你的密码就要过期了,请尽快重新设置你的密码!"。该字段的默认值是 7,也就是说,距离密码有效期的第 7 天开始,每次登录系统都会向该账户发出 "修改密码" 的警告信息。
⑦密码到期后的宽限天数:也称为“口令失效日”,简单理解就是,在密码过期后,用户如果还是没有修改密码,则在此字段规定的宽限天数内,用户还是可以登录系统的;如果过了宽限天数,系统将不再让此账户登陆,也不会提示账户过期,是完全禁用。比如说,此字段规定的宽限天数是 10,则代表密码过期 10 天后失效;如果是 0,则代表密码过期后立即失效;如果是 -1,则代表密码永远不会失效。
⑧账号失效日期:同第 3 个字段一样,使用自 1970 年 1 月 1 日以来的总天数作为账户的失效时间。该字段表示,账号在此字段规定的时间之外,不论你的密码是否过期,都将无法使用!该字段通常被使用在具有收费服务的系统中。
⑨保留使用:这个字段目前没有使用,等待新功能的加入。
[www@localhost ~]$ tail /etc/group
slocate:x:21:
avahi:x:70:
postdrop:x:90:
postfix:x:89:
stapusr:x:156:
stapsys:x:157:
stapdev:x:158:
tcpdump:x:72:
www:x:1000:
tester1:x:1001:
[www@localhost ~]$
①组名:用户组的名称,有字母或数字构成。也不能重复。
②组密码:这里的 "x" 仅仅是密码标识,真正加密后的组密码默认保存在 /etc/gshadow 文件中。
③GID:群组的 ID 号,Linux 系统就是通过 GID 来区分用户组的
这里的组 GID 与 /etc/passwd 文件中第 4 个字段的 GID 相对应,实际上,/etc/passwd 文件中使用 GID 对应的群组名,就是通过此文件对应得到的。
④组内用户:此字段列出每个群组包含的所有用户。如果该用户组是这个用户的初始组,则该用户不会写入这个字段,可以这么理解,该字段显示的用户都是这个用户组的附加用户。
[www@localhost ~]$ ls -l /etc/gshadow
----------. 1 root root 792 May 5 07:48 /etc/gshadow
[www@localhost ~]$ head /etc/gshadow
head: cannot open ‘/etc/gshadow’ for reading: Permission denied
[www@localhost ~]$ su root
Password:
[root@localhost www]# head /etc/gshadow
root:::
bin:::
daemon:::
sys:::
adm:::
tty:::
disk:::
lp:::
mem:::
kmem:::
[root@localhost www]#
1、记录用户组密码相关信息,每行代表一个用户组
2、只有root可以访问
3、每一行包含4 个字段,用“:”分隔,各字段含义为:
①组名:同 /etc/group 文件中的组名相对应。
②加密密码:对于大多数用户来说,通常不设置组密码,因此该字段常为空,但有时为 "!",指的是该群组没有组密码,也不设有群组管理员。
③组管理员:考虑到 Linux 系统中账号太多,而超级管理员 root 可能比较忙碌,因此当有用户想要加入某群组时,root 或许不能及时作出回应。这种情况下,如果有群组管理员,那么他就能将用户加入自己管理的群组中,也就免去麻烦 root 了。不过,由于目前有 sudo 之类的工具,因此群组管理员的这个功能已经很少使用了。
④组附加用户列表:该字段显示这个用户组中有哪些附加用户,和 /etc/group 文件中附加组显示内容相同。
使用 useradd 命令新建用户,此命令的基本格式如下:
useradd [选项] 用户名
选项 |
功能说明 |
-d homedir |
指定用户的主目录,必须是绝对路径 |
-u uid |
指定用户的 UID |
-g gid | gname |
指定用户主组的 GID 或组名,必须是已经存在的组 |
-G groups |
指定用户的附加组,如果有多个附加组就用“,”分隔 |
-m |
强制建立用户的主目录,这是普通用户的默认值 |
-M |
不要建立用户的主目录,这是系统用户的默认值 |
-s shell |
指定用户的默认 Shell |
-c comment |
关于用户的简短描述,也就是 /etc/passwd 第 5 列的内容 |
-r |
创建一个系统用户(UID 在 1000 以内) |
-e expiredate |
指定账号失效日期,即 /etc/shadow 的第 8 列,格式为YYYY-MM-DD |
-f inactive |
用户密码到期后的宽限天数,即 /etc/shadow 的第 7 列。 0 表示立即失效,-1 为永远不失效 |
系统已经帮我们规定了非常多的默认值,在没有特殊要求下,无需使用任何选项即可成功创建用户。例如:
useradd tester2
此条命令完成以下操作:
① 在 /etc/passwd 文件中新增一行与新用户相关的数据
② 在 /etc/shadow 文件中写入一行与新用户相关的密码数据
③ 在 /etc/group 文件中新增一行与新用户同名的用户组
④ 在 /home 目录下创建与新用户同名的目录作为新用户的主目录
例:
[root@centos7 ~]# useradd shaw
[root@centos7 ~]# grep shaw /etc/passwd
shaw:x:1001:1001::/home/shaw:/bin/bash
[root@centos7 ~]# grep shaw /etc/shadow
shaw:!!:18647:0:99999:7:::
[root@centos7 ~]# grep shaw /etc/group
shaw:x:1001:
[root@centos7 ~]# ls -ld /home/shaw
drwx------. 3 shaw shaw 78 1月 20 10:08 /home/shaw
例:添加新用户,用户名为 tong,手动指定其UID和主组
[root@centos7 ~]# useradd -u 1234 -g zys tong
[root@centos7 ~]# grep tong /etc/passwd
tong:x:1234:1000::/home/tong:/bin/bash <== 1000是zys用户组的GID
[root@centos7 ~]# grep tong /etc/group // 未创建同名用户组
例:创建一个具有root权限的用户
[root@centos7 ~]# useradd -ou 0 -g 0 tom //-o表示可创建重复的UID
功能:修改用户密码,命令格式为:
passwd [选项] 用户名
选项 |
功能说明 |
-l |
锁定用户,即“lock”。在 /etc/shadow 的第一列前加“!”使密码无效,只有 root 用户可以使用这个选项 |
-u |
解锁用户,即“unlock”,作用与-l选项相反,只有 root 用户能够使用 |
-S |
查询用户密码的相关信息,也就是 /etc/shadow 文件的内容 |
-n mindays |
密码修改后多长时间内不能再修改密码,即 /etc/shadow 第 4 列的内容 |
-x maxdays |
密码有效期,即 /etc/shadow 第 5 列的内容 |
-w warndays |
密码过期前的警告天数,即 /etc/shadow 第 6 列的内容 |
-i inactivedays |
密码失效日期,即 /etc/shadow 第 7 列的内容 |
-c comment |
关于用户的简短描述,也就是 /etc/passwd 第 5 列的内容 |
root用户修改普通用户的密码(root 用户可以修改普通用户的密码!)
[root@centos7 ~]# passwd zys // 以root用户身份修改zys用户的密码
更改用户 zys 的密码 。
新的 密码: <== 在这里输入zys用户的密码
无效的密码: 密码少于 8 个字符 <== 提示密码太简单,但只是提示
重新输入新的密码: <== 确定新密码
passwd:所有的身份验证令牌已经成功更新。
普通用户修改自己密码(要求1,普通用户只能修改自己的密码、要求2,普通用户修改密码前必须输入原密码、要求3,普通用户设置的密码必须满足密码复杂性要求)
[zys@centos7 ~]$ passwd // 为自己修改密码
更改用户 zys 的密码 。
为 zys 更改 STRESS 密码。
(当前)UNIX 密码: <== 在这里输入原密码
新的 密码: <== 在这里输入新密码
无效的密码: 密码少于 8 个字符 <== 新密码不满足复杂性要求
新的 密码: <== 重新输入新密码
重新输入新的 密码: <== 再次输入新密码
passwd:所有的身份验证令牌已经成功更新。
例:用户密码 10 天内不允许修改、但 30 天内必须修改、密码到期前 5 天会有提示
[root@centos7 ~]# passwd -n 10 -x 30 -w 5 zys
调整用户密码老化数据zys。
passwd: 操作成功
如果不小心添错用户信息,后期如何修改呢?使用usermod命令。
基本命令格式:
usermod [选项] 用户名
选项和useradd类似。这里不再做赘述。
注:
useradd 命令用于添加用户,当然,添加用户时可以对用户信息进行定制;
usermod 命令针对与已存在的用户,使用该命令可以修改它们的信息。
[root@centos7 ~]# grep shaw /etc/passwd
shaw:x:1001:1001::/home/shaw:/bin/bash
[root@centos7 ~]# usermod -d /home/shaw2 -u 1111 -g 1000 shaw
[root@centos7 ~]# grep shaw /etc/passwd
shaw:x:1111:1000::/home/shaw2:/bin/bash <== GID为1000,表示zys组
如果指定的用户目录不存在呢?
答:命令执行成功,但不会创建不存在的文件夹。
功能:userdel 命令的作用就是从下面文件中,删除与指定用户有关的数据信息。
基本格式如下:
userdel -r 用户名
-r 选项表示在删除用户的同时删除用户的家目录。
注意,在删除用户的同时如果不删除用户的根目录,那么根目录就会变成没有属主和属组的目录,也就是垃圾文件。
[root@centos7 ~]# userdel -r shaw // 删除用户shaw,并删除用户主目录
userdel:组“shaw”没有移除,因为它不是用户 shaw 的主组
[root@centos7 ~]# grep shaw /etc/passwd
[root@centos7 ~]# grep shaw /etc/shadow
[root@centos7 ~]# grep shaw /etc/group
shaw:x:1001: <== 没有删除shaw组
[root@centos7 ~]# grep zys /etc/group
zys:x:1000:zys <== 也没有删除zys组
[root@centos7 ~]# ls -d /home/shaw2 #-d仅列出目录本身,而不列出目录内文件数据
ls: 无法访问/home/shaw2: 没有那个文件或目录 <== 用户主目录一同被删除
命令格式如下:
groupadd [选项] 组名
选项:
[root@centos7 ~]# groupadd devteam // 新增用户组
[root@centos7 ~]# grep devteam /etc/group
devteam:x:1002: <== 在/etc/group文件中添加用户组信息
[root@centos7 ~]# groupadd -g 1008 ict // 添加用户组时指定GID
[root@centos7 ~]# grep ict /etc/group
ict:x:1008:
命令格式如下:
groupmod [选现] 组名
选项:
[root@centos7 ~]# grep ict /etc/group
ict:x:1008: <== 原GID为1008
[root@centos7 ~]# groupmod -g 1100 ict // 修改GID
[root@centos7 ~]# grep ict /etc/group
ict:x:1100: <== GID已修改
[root@centos7 ~]# groupmod -n newict ict // 修改组名
[root@centos7 ~]# grep ict /etc/group
newict:x:1100: <== 组名已修改
功能:删除用户组,本命令要修改的系统文件包括/ect/group和/ect/gshadow。
groupdel 组名
[root@centos7 ~]# grep zys /etc/passwd
zys:x:1000:1000::/home/zys:/bin/bash
[root@centos7 ~]# grep -E ' zys | newict ' /etc/group // 查找zys和newict两个用户组
zys:x:1000:zys
newict:x:1100:
[root@centos7 ~]# groupdel newict // 删除用户组newict
[root@centos7 ~]# grep newict /etc/group // newict删除成功
[root@centos7 ~]# groupdel zys
groupdel:不能移除用户“zys”的主组 <== 删除zys失败
注: 不能删除用户的主组!
id命令功能:用户的UID、GID 和附加组的信息。
命令格式:
id 用户名
group命令功能:显示用户的组信息,与 id -Gn 命令效果相同,命令格式:
group 用户名
[root@centos7 ~]# id zys // 查看zys用户的相关信息
uid=1000(zys) gid=1000(zys) 组=1000(zys)
[root@centos7 ~]# usermod -G devteam zys // 将zys用户添加到devteam组中
[root@centos7 ~]# id zys
uid=1000(zys) gid=1000(zys) 组=1000(zys),1002(devteam)
[root@centos7 ~]# groups zys // 查看用户组信息
zys : zys devteam <== 附加组中出现devteam
groupmems [选项]
选项 |
功能说明 |
-a username |
把用户添加到组中 |
-d username |
从组中移除用户 |
-g grpname |
目标用户组 |
-l |
显示组成员 |
-p |
删除组内所有用户 |
[root@centos7 ~]# groupmems -l -g devteam // 查看用户组内有哪些用户
zys <==当前只有zys一个用户
[root@centos7 ~]# groupmems -a tong -g devteam // 向devteam组中添加用户tong
[root@centos7 ~]# groupmems -l -g devteam
zys tong
[root@centos7 ~]# groupmems -d tong -g devteam // 从devteam组中移除用户tong
[root@centos7 ~]# groupmems -l -g devteam
zys
newgrp 组名
[zys@centos7 tmp]$ groups zys // 当前登录用户是zys
zys : zys devteam <== 主组是zys,同时属于附加组devteam
[zys@centos7 tmp]$ touch file1
[zys@centos7 tmp]$ newgrp devteam // 设置devteam为有效用户组
[zys@centos7 tmp]$ touch file2
[zys@centos7 tmp]$ ls -l
-rw-rw-r--. 1 zys zys 0 1月 20 11:06 file1 <== file1的属组是zys
-rw-r--r--. 1 zys devteam 0 1月 20 11:08 file2 <== file2的属组为devteam
功能:显示用户的密码信息,和带 -S 选项的 passwd 命令效果类似,命令格式:
chage [选项] 用户名
选项:
[root@centos7 ~]# passwd -S zys
zys PS 2021-01-20 0 99999 7 -1 (密码已设置,使用 SHA512 算法。)
[root@centos7 ~]# chage -l zys
最近一次密码修改时间 :从不
密码过期时间 :从不
密码失效时间 :从不
帐户过期时间 :从不
两次改变密码之间相距的最小天数 :0
两次改变密码之间相距的最大天数 :99999
在密码过期之前警告的天数 :7
参考自:http://c.biancheng.net