目录
一、导入
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命令
一、导入
1、基础
Linux
是一个多用户操作系统,支持多个用户同时登录操作系统(window某些版本支持)
用户组是用户的逻辑组合,自动继承用户组的权限
用户和用户组既有名称,也有数字形式的
ID
root
用户是系统超级管理员,拥有最高的权限,所有对象都可以操作
查看当前登录账户:命令为 whoami
[www@localhost ~]$ whoami
www
2、切换用户
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]$
二、用户与用户组基本信息
1、用户基本信息:? /etc/passwd
[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
- 记录用户的基本信息,每行代表一个用户
- 每一行包含 7 个字段,用“:”分隔,各字段的含义如下
①用户名:一串代表用户身份的字符串。
②密码:"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 命令解释器,就代表这个用户拥有权限范围内的所有权限。例如:
[root@localhost ~]# vi /etc/passwd lamp:x:502:502::/home/lamp:/bin/bash
我手工添加了 lamp 用户,它使用的是 bash 命令解释器,那么这个用户就可以使用普通用户的所有权限。
如果我把 lamp 用户的 Shell 命令解释器修改为 /sbin/nologin,那么,这个用户就不能登录了,例如:
[root@localhost ~]# vi /etc/passwd lamp:x:502:502::/home/lamp:/sbin/nologin
因为 /sbin/nologin 就是禁止登录的 Shell。同样,如果我在这里放入的系统命令,如 /usr/bin/passwd,例如:
[root@localhost ~]#vi /etc/passwd lamp:x:502:502::/home/lamp:/usr/bin/passwd
那么这个用户可以登录,但登录之后就只能修改自己的密码。但是,这里不能随便写入和登陆没有关系的命令(如 ls),系统不会识别这些命令,同时也就意味着这个用户不能登录。
2、用户密码信息: /etc/shadow
[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:::
- 记录用户密码相关信息,每行代表一个用户
- 只有 root 用户可以查看
- 每一行包含 9 个字段,用“:”分隔,各字段含义为:
????????①用户名:一串代表用户身份的字符串。
? ? ? ? ②密码:"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 日以来的总天数作为账户的失效时间。该字段表示,账号在此字段规定的时间之外,不论你的密码是否过期,都将无法使用!该字段通常被使用在具有收费服务的系统中。
????????⑨保留使用:这个字段目前没有使用,等待新功能的加入。
3、用户组配置信息:? /etc/group
[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 ~]$
- 记录用户组信息,每行代表一个用户组
- 每一行包含 4 个字段,用“:”分隔,各字段的含义如下
????????①组名:用户组的名称,有字母或数字构成。也不能重复。
????????②组密码:这里的 "x" 仅仅是密码标识,真正加密后的组密码默认保存在 /etc/gshadow 文件中。
????????③GID:群组的 ID 号,Linux 系统就是通过 GID 来区分用户组的
? ? ? ? 这里的组 GID 与 /etc/passwd 文件中第 4 个字段的 GID 相对应,实际上,/etc/passwd 文件中使用 GID 对应的群组名,就是通过此文件对应得到的。? ?
????????④组内用户:此字段列出每个群组包含的所有用户。如果该用户组是这个用户的初始组,则该用户不会写入这个字段,可以这么理解,该字段显示的用户都是这个用户组的附加用户。
4、用户组密码信息: /etc/gshadow
[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 文件中附加组显示内容相同。
三、管理用户
1、添加用户-useradd命令
使用?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 为永远不失效 |
(1)useradd基本操作:
系统已经帮我们规定了非常多的默认值,在没有特殊要求下,无需使用任何选项即可成功创建用户。例如:
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
(2)useradd特殊操作
例:添加新用户,用户名为 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
2、passwd使用
功能:修改用户密码,命令格式为:
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: 操作成功
3、修改用户信息-usermod命令
如果不小心添错用户信息,后期如何修改呢?使用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组
如果指定的用户目录不存在呢?
答:命令执行成功,但不会创建不存在的文件夹。
4、删除用户-userdel命令
功能:userdel 命令的作用就是从下面文件中,删除与指定用户有关的数据信息。
- 用户基本信息:存储在 /etc/passwd 文件中;
- 用户密码信息:存储在 /etc/shadow 文件中;
- 用户群组基本信息:存储在 /etc/group 文件中;
- 用户群组信息信息:存储在 /etc/gshadow 文件中;
- 用户个人文件:主目录默认位于 /home/用户名,邮箱位于 /var/spool/mail/用户名。
基本格式如下:
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: 没有那个文件或目录 <== 用户主目录一同被删除
四、管理用户组
1、添加用户组-groupadd命令
命令格式如下:
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:
2、修改用户组信息-groupmod命令
命令格式如下:
?groupmod [选现] 组名
?选项:
- -g GID:修改组 ID;
- -n 新组名:修改组名;
[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: <== 组名已修改
3、删除用户组信息-groupdel命令
功能:删除用户组,本命令要修改的系统文件包括/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失败
注:?不能删除用户的主组!
六、其他命令
1、id与group命令
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
2、groupmems命令
n
功能:
把用户添加到或移出用户组,命令格式:
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
3、修改用户有效组-newgrp命令
每个用户可以属于一个初始组(用户是这个组的初始用户),也可以属于多个附加组(用户是这个组的附加用户)。既然用户可以属于这么多用户组,那么用户在创建文件后,默认生效的组身份是哪个呢?
当然是初始用户组的组身份生效,因为初始组是用户一旦登陆就获得的组身份。也就是说,用户的有效组默认是初始组,因此所创建文件的属组是用户的初始组。那么,既然用户属于多个用户组,
能不能改变用户的初始组呢?使用命令 newgrp 就可以。
功能:可以从用户的附加组中选择一个群组,作为用户新的初始组。命令格式:
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
4、chage命令
功能:显示用户的密码信息,和带 -S 选项的 passwd 命令效果类似,命令格式:
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?个字段。
[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
|