Linux是一个多用户多任务的系统。简单来说 Linux 系统支持多个用户在同一时间内登陆,不同用户可以执行不同的任务,并且互不影响。我们先来了解一下两个概念
- 用户(UID):不同用户具有不问的权限,毎个用户在权限允许的范围内完成不间的任务,Linux 正是通过这种权限的划分与管理,实现了多用户多任务的运行机制。
- 用户组(GID)**:**具有相同特征用户的逻辑集合。简单理解,有时我们需要让多个用户具有相同的权限,比如查看、修改某一个文件的权限。如果分别对多个用户进行文件访问授权可定是不合理的。最好的方式是建立一个组,让这个组具有查看、修改此文件的权限,然后将所有需要访问此文件的用户放入这个组中。那么,所有用户就具有了和组一样的权限,这就是用户组。
Linux用户
添加用户
useradd [选项]用户名
useradd chen:创建一个账号叫chen,此时会创建账号、创建一个组chen并且把chen分到此组中、还会在/home下创建一个目录叫chen作为新创建用户的根目录。
useradd -d /home/ls lisi:创建一个账号叫lisi,并且给lisi指定家目录/ls。
[root@C20230307141161 ~]# useradd chen
详解:
键入useradd命令后执行流程:
useradd 命令创建用户的过程是这样的,系统首先读取 /etc/login.defs 和 /etc/default/useradd,根据这两个配置文件中定义的规则添加用户,也就是向 /etc/passwd、/etc/group、/etc/shadow、/etc/gshadow 文件中添加用户数据,接着系统会自动在 /etc/default/useradd 文件设定的目录下建立用户主目录,最后复制 /etc/skel 目录中的所有文件到此主目录中,由此,一个新的用户就创建完成了。
密码设置
useradd创建一个新用户后,我们要设置一个密码,否则无法用来登录系统。
passwd chen:给chen设置密码
[root@C20230307141161 ~]# passwd chen
Changing password for user chen.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
修改用户
usermod,用来修改已经创建过的账号。
注意:不是所有发型linux版本都支持此命令,可以通过man usermod检查是否支持。
[root@chen ~]#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
删除用户
此命令只能在root权限用户下使用
语法:userdel [选项]用户名 userdel chen:删除用户chen,保留chen的主目录。 userdel –r lisi:删除用户lisi,并且把lisi的主目录也删除。在删除用户的同时如果不删除用户的家目录,那么家目录就会变成没有属主和属组的目录,就是垃圾文件最后需要大家注意的是,如果要删除的用户已经使用过系统一段时间,那么此用户可能在系统中留有其他文件,因此,如果我们想要从系统中彻底的删除某个用户,最好在使用
[root@C20230307141161 ~]# userdel xiaochen
<font style="color:rgb(77, 77, 77);">userdel</font>
命令之前,先通过 <font style="color:rgb(77, 77, 77);">find -user</font>
用户名 命令查出系统中属于该用户的文件,然后在加以删除。
查询用户信息
语法:id 用户名 id chen:查看用户chen的信息
# 存在的用户
[root@C20230307141161 ~]# id chen
uid=1000(chen) gid=1000(chen) groups=1000(chen)
# 不存在的用户
[root@C20230307141161 ~]# id xiaochen
id: xiaochen: no such user
切换语法
语法:su 用户名 su chen:切换到chen用户。 注意:从高权限用户切换到低权限用户时,不需要输密码;否则,需要输密码。 另:exit命令可以回到原来的用户。whoami
<font style="color:rgb(77, 77, 77);">whoami</font>
命令和 <font style="color:rgb(77, 77, 77);">who am i</font>
是不同的 2 个命令,前者用来打印当前执行操作的用户名,后者则用来打印登陆当前 Linux 系统的用户名。
[xiachen@chen ~]$ whoami
xiaochen
[xiaochen@chen ~]$ who am i
xiaochen pts/3 2023-03-13 00:01 (43.254.220.217)
[xiaochen@chen ~]$ su xc2 # 切换用户
Password:
[xc2@chen xiaochen]$ whoami
xc2
[xc2@chen xiaochen]$ who am i
xiaochen pts/3 2023-03-13 00:01 (43.254.220.217)
[xc2@chen xiaochen]$
此命令常用于经常切换账号时确认当前处于那个账号下。
Linux组
添加组
groupadd 组名 groupadd devgroup:创建一个组devgroup。
[root@C20230307141161 ~]# groupadd devgroup
删除组
groupdel 组名
groupdel devgroup:删除组devgroup。
[root@C20230307141161 ~]# groupdel devgroup
添加用户时指定组:
useradd –g 组名 用户名
useradd –g devgroup addgrouptest:添加用户addgrouptest,并且指定addgrouptest属于组devgroup。
[root@C20230307141161 ~]# useradd -g devgroup addgrouptest
[root@C20230307141161 ~]# id addgrouptest
uid=1002(addgrouptest) gid=1001(devgroup) groups=1001(devgroup)
将用户添加到组/从组中移除:
gpasswd –a/-d 用户名 组名
gpasswd –a addgrouptest test
gpasswd –d addgrouptest test
[root@C20230307141161 ~]# groupadd test
[root@C20230307141161 ~]# gpasswd -a addgrouptest test
Adding user addgrouptest to group test
Linux系统操作
shutdown now: 立刻进行关机
shudown -h 1: 1小时后会关机了
shutdown –r now: 现在重新启动计算机
reboot: 现在重新启动计算机
sync: 把内存的数据同步到磁盘.
区别:https://blog.csdn.net/wangjingqi930330/article/details/81939375
初始组和附加组
通过群组的方式可以更合理的去分配系统的权限,也就是说账号一旦拥有了某一个群组,那也就拥有了这个群组拥有的所有权限。一个Linux账号初始组只能有一个,但附加组可以有多个。
一个用户可以所属多个附加组,但只能有一个初始组。那么,如何知道某用户所属哪些群组呢?使用 groups 命令即可。在当前账号登录的系统身份里面使用如下命令查看当前登录账号拥有的群组:
[xiaochen@chen ~]$ groups
xiaochen xc1
展示的第一个是初始组,后边的是附加组
/etc
- 用户基本信息:存储在 /etc/passwd 文件中;
- 用户密码信息:存储在 /etc/shadow 文件中;
- 用户群组基本信息:存储在 /etc/group 文件中;
- 用户群组信息信息:存储在 /etc/gshadow 文件中
<font style="color:rgb(68, 68, 68);">/etc/passwd</font>
Linux中的 /etc/passwd
文件,是系统用户配置文件,存储了系统中所有用户的基本信息,所有用户都可以对此文件执行读操作
[xiaochen@chen vi-test]$ vi /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
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:65534:65534:Kernel Overflow User:/:/sbin/nologin
systemd-coredump:x:999:996:systemd Core Dumper:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
tss:x:59:59:Account used for TPM access:/dev/null:/sbin/nologin
sssd:x:998:995:User for sssd:/:/sbin/nologin
chrony:x:997:994::/var/lib/chrony:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/usr/share/empty.sshd:/sbin/nologin
systemd-oom:x:992:992:systemd Userspace OOM Killer:/:/usr/sbin/nologin
linadm:x:1001:1001::/home/linadm:/bin/bash
linux1:x:1002:1002:linux1:/home/linux1:/bin/bash
xiaochen:x:1003:1003::/home/xiaochen:/bin/bash #自己创建的用户
每一行对应一个用户。
Linux 系统中默认怎么会有这么多的用户?这些用户中的绝大多数是系统或服务正常运行所必需的用户,这种用户通常称为系统用户或伪用户。系统用户无法用来登录系统,但也不能删除,因为一旦删除,依赖这些用户运行的服务或程序就不能正常执行,会导致系统问题。
每行用户信息都以 :作为分隔符,划分为 7 个字段,每个字段所表示的含义如下: 用户名:密码:UID(用户ID):GID(组ID):描述性信息:主目录:默认Shell用户名
用户名是一串代表用户的字符串。Linux通过UID去识别用户身份和分配用户权限的,/etc/passwd中只是定义了用户名和UID的对应关系
密码
x 表示此用户设有密码,但不是真正的密码,真正的密码保存在 /etc/shadow 文件中
UID
代表用户的一个唯一标识,类似每人一个身份证。可以通过UID识别不同用户
GID
表示用户初始组的组 ID 号。这里需要解释一下初始组和附加组的概念。
初始组,指用户登陆时就拥有这个用户组的相关权限。每个用户的初始组只能有一个,通常就是将和此用户的用户名相同的组名作为该用户的初始组。- 比如说,我们手工添加用户 chen,在建立用户 chen 的同时,就会建立 chen 组作为 chen 用户的初始组。
- 每个用户只能有一个初始组,除初始组外,用户再加入其他的用户组,这些用户组就是这个用户的附加组。
- 附加组可以有多个,而且用户可以有这些附加组的权限。
描述性信息
没有什么特殊含义,就是对当前账号的说明主目录
用户登录后有操作权限的访问目录,通常称为用户的主目录。例如:root 超级管理员账户的主目录为 /root,普通用户的主目录为 /home/chen,即在 /home/ 目录下建立和用户名相同的目录作为主目录
默认shell
shell是linux命令解释器,用户和linux内核沟通的桥梁。shell的功能就是把我们输入的指令转换为计算机可以认识机器语言。
Linux 系统默认使用的命令解释器是 bash(/bin/bash)/etc/shadow
/etc/shadow 文件,用于存储 Linux 系统中用户的密码信息,又称为影子文件
/etc/passwd 该文件允许所有用户读取,易导致用户密码泄露,因此 Linux 系统将用户的密码信息从 /etc/passwd 文件中分离出来,并单独放到了此文件中。/etc/shadow文件只有 root 用户拥有读取权限。其他用户没有相应权限查看,从而更加安全。
同 /etc/passwd 文件一样,文件中每行代表一个用户,同样使用 : 作为分隔符,区别:每行用户信息被划分为 9 个字段。 用户名:加密密码:最后一次修改时间:最小修改时间间隔:密码有效期:密码需要变更前的警告天数:密码过期后的宽限时间:账号失效时间:保留字段
[root@chen linux1]# vi /etc/shadow
root:$6$nDxhD0dyz4YBzJBA$4dmF7GbPwEj9Pa95mDU7Mlfj8h9lzzCtg6gsBigxTVinRB7MAfqWL87zVjXkwxUtbG1wwPVf1S6UyOO6sFgLy/::0:99999:7:::
bin:*:18849:0:99999:7:::
daemon:*:18849:0:99999:7:::
adm:*:18849:0:99999:7:::
lp:*:18849:0:99999:7:::
sync:*:18849:0:99999:7:::
shutdown:*:18849:0:99999:7:::
halt:*:18849:0:99999:7:::
mail:*:18849:0:99999:7:::
operator:*:18849:0:99999:7:::
games:*:18849:0:99999:7:::
ftp:*:18849:0:99999:7:::
nobody:*:18849:0:99999:7:::
systemd-coredump:!!:19304::::::
dbus:!!:19304::::::
tss:!!:19304::::::
sssd:!!:19304::::::
chrony:!!:19304::::::
sshd:!!:19304::::::
systemd-oom:!*:19304::::::
linadm:!!:19412:0:99999:7:::
linux1:!!:19424:0:99999:7:::
xiaochen:$6$ws/oC70D8KUpd9Rf$CkjR8qkUH54WcB1Xd.ugGaZS53ruPDJ8qNa4cluvjPy2cdX4ODYUL5LbGuDYqds5EDTU.VCsZHdvJeIUX0RHl/:19424:0:99999:7:::
用户名
同 /etc/passwd 的用户名一样
加密密码
保存的是真正加密的密码。目前 Linux 的密码采用的是 SHA512 散列加密算法,原来采用的是 MD5 或 DES 加密算法。SHA512 散列加密算法的加密等级更高,也更加安全。
- 注意,这串密码产生的乱码不能手工修改,如果手工修改,系统将无法识别密码,导致密码失效。很多软件透过这个功能,在密码串前加上 “!”、”*” 或 “x” 使密码暂时失效。
- 所有伪用户的密码都是 “!!” 或 “*”,代表没有密码是不能登录的。当然,新创建的用户如果不设定密码,那么它的密码项也是 “!!”,代表这个用户没有密码,不能登录。
最后一次修改时间
此字段表示最后一次修改密码的时间最小修改时间间隔
最小修改间隔时间,也就是说,该字段规定了从第 3 字段(最后一次修改密码的日期)起,多长时间之内不能修改密码。如果是 0,则密码可以随时修改;如果是 10,则代表密码修改后 10 天之内不能再次修改密码。密码有效期
为了强制要求用户变更密码,这个字段可以指定距离第 3 字段(最后一次更改密码)多长时间内需要再次变更密码,否则该账户密码进行过期阶段。 默认值为 99999,也就是 273 年,可认为永久生效。如果改为 90,则表示密码被修改 90 天之后必须再次修改,否则该用户即将过期。管理服务器时,通过这个字段强制用户定期修改密码。密码需要变更前的警告天数
与第 5 字段相比较,当账户密码有效期快到时,系统会发出警告信息给此账户,提醒用户 “再过 n 天你的密码就要过期了,请尽快重新设置你的密码!”。 该字段的默认值是 7,也就是说,距离密码有效期的第 7 天开始,每次登录系统都会向该账户发出 “修改密码” 的警告信息。密码过期后的宽限天数
在密码过期后,用户如果还是没有修改密码,则在此字段规定的宽限天数内,用户还是可以登录系统的;如果过了宽限天数,系统将不再让此账户登陆,也不会提示账户过期,是完全禁用。账号失效时间
同第 3 个字段一样,使用自 1970 年 1 月 1 日以来的总天数作为账户的失效时间。该字段表示,账号在此字段规定的时间之外,不论你的密码是否过期,都将无法使用! 该字段通常被使用在具有收费服务的系统中。保留字段
这个字段目前没有使用,等待新功能的加入。忘记密码怎么办
普通账户的密码遗失,可以通过 root 账户解决,它会重新给你配置好指定账户的密码,而不需知道你原有的密码(利用 root 的身份使用 passwd 命令即可)。 如果 root 账号的密码遗失,则需要重新启动进入单用户模式,系统会提供 root 权限的 bash 接口,此时可以用 passwd 命令修改账户密码;也可以通过挂载根目录,修改 /etc/shadow,将账户的 root 密码清空的方法,此方式可使用 root 无法密码即可登陆,建议登陆后使用 passwd 命令配置 root 密码。/etc/group
/ect/group 文件是用户组配置文件,即用户组的所有信息都存放在此文件中。 此文件是记录组 ID(GID)和组名相对应的文件。前面讲过,etc/passwd 文件中每行用户信息的第四个字段记录的是用户的初始组 ID,那么,此 GID 的组名到底是什么呢?就要从 /etc/group 文件中查找
[xiaochen@chen vi-test]$ vi /etc/group
adm:x:4:linux1
tty:x:5:
disk:x:6:
lp:x:7:
mem:x:8:
kmem:x:9:
wheel:x:10:
cdrom:x:11:
mail:x:12:
man:x:15:
dialout:x:18:
floppy:x:19:
games:x:20:
tape:x:33:
video:x:39:
ftp:x:50:
lock:x:54:
audio:x:63:
users:x:100:
nobody:x:65534:
utmp:x:22:
utempter:x:35:
ssh_keys:x:999:
input:x:998:
kvm:x:36:
render:x:997:
systemd-journal:x:190:linux1
systemd-coredump:x:996:
dbus:x:81:
tss:x:59:
sssd:x:995:
chrony:x:994:
sshd:x:74:
sgx:x:993:
systemd-oom:x:992:
ts-shell:x:991:
zkeyadm:x:990:
linadm:x:1001:
linux1:x:1002:
xiaochen:x:1003:
xc1:x:1004:xiaochen
文件中每一行代表一个组。
各用户组中,还是以 : 作为字段之间的分隔符,分为 4 个字段,每个字段对应的含义为: 组名:密码:GID:该用户组中的用户列表组名
用户组的名称,有字母或数字构成。同 /etc/passwd 中的用户名一样,组名也不能重复。组密码
和 /etc/passwd 文件一样,这里的 “x” 仅仅是密码标识,真正加密后的组密码默认保存在 /etc/gshadow 文件中。 用户组密码主要是用来指定组管理员的,由于系统中的账号可能会非常多,root 用户可能没有时间进行用户的组调整,这时可以给用户组指定组管理员,如果有用户需要加入或退出某用户组,可以由该组的组管理员替代 root 进行管理。但是这项功能目前很少使用,我们也很少设置组密码。如果需要赋予某用户调整某个用户组的权限,则可以使用 sudo 命令代替。组ID (GID)
群组的 ID 号,Linux 系统就是通过 GID 来区分用户组的,同用户名一样,组名也只是为了便于管理员记忆。 这里的组 GID 与 /etc/passwd 文件中第 4 个字段的 GID 相对应,实际上,/etc/passwd 文件中使用 GID 对应的群组名,就是通过此文件对应得到的。组中的用户
此字段列出每个群组包含的所有用户。需要注意的是,如果该用户组是这个用户的初始组,则该用户不会写入这个字段,可以这么理解,该字段显示的用户都是这个用户组的附加用户。/etc/gshadow
/etc/passwd 文件存储用户基本信息,同时考虑到账户的安全性,将用户的密码信息存放另一个文件 /etc/shadow 中。 /etc/gshadow 文件也是如此,组用户信息存储在 /etc/group 文件中,而将组用户的密码信息存储在 /etc/gshadow 文件中。文件中,每行代表一个组用户的密码信息,各行信息用 : 作为分隔符分为 4 个字段,每个字段的含义如下: 组名:加密密码:组管理员:组附加用户列表
[root@chen linux1]# vi /etc/gshadow
root:::
bin:::
daemon:::
sys:::
adm:::linux1
tty:::
disk:::
lp:::
mem:::
kmem:::
wheel:::
cdrom:::
mail:::
man:::
dialout:::
floppy:::
games:::
tape:::
video:::
ftp:::
lock:::
audio:::
users:::
nobody:::
utmp:!::
utempter:!::
ssh_keys:!::
input:!::
kvm:!::
render:!::
systemd-journal:!::linux1
systemd-coredump:!::
dbus:!::
tss:!::
sssd:!::
chrony:!::
sshd:!::
sgx:!*::
systemd-oom:!*::
ts-shell:!::
zkeyadm:!::
linadm:!::
linux1:!::
xiaochen:!::
xc1:!::xiaochen
组名
同上
组密码
对于大多数用户来说,通常不设置组密码,因此该字段常为空,但有时为 “!”,指的是该群组没有组密码,也不设有群组管理员。组管理员
从系统管理员的角度来说,该文件最大的功能就是创建群组管理员。那么,什么是群组管理员呢? 考虑到 Linux 系统中账号太多,而超级管理员 root 可能比较忙碌,因此当有用户想要加入某群组时,root 或许不能及时作出回应。这种情况下,如果有群组管理员,那么他就能将用户加入自己管理的群组中,也就免去麻烦 root 了。 不过,由于目前有 sudo 之类的工具,因此群组管理员的这个功能已经很少使用了。组中的附加用户
该字段显示这个用户组中有哪些附加用户,和 /etc/group 文件中附加组显示内容相同。