一、 Linux中的用户和组的分类
1、Linux下的用户可以分为三类:
超级用户——用户名为root,它具有一切权限,只有进行系统维护(例如:建立用户等)或其他必要情形下才用超级用户登录,以避免系统出现安全问题。
系统用户(伪用户)——是Linux系统正常工作所必需的用户。主要是为了满足相应的系统进程对 文件属主的要求而建立的,例如:bin、daemon、adm、lp等用户。系统用户不能用来登录。
普通用户——是为了让使用者能够使用Linux系统资源而建立的,我们的大多数用户属于此类。
2、Linux中的组有以下两类:
基本组(私有组):建立账户时,若没有指定账户所属的组,系统会建立一个和用户名相同的组,这个组就是基本组。
附加组(公有组):可以容纳多个用户,组中的用户都具有组所拥有的权利。
3、Linux中用户和用户组的配置文件
在Linux中,用户账号、密码、用户组信息和用户组密码均是存放在不同的配置文件中的。
文件功能 | 文件名称 |
用户账号文件 | /etc/passwd |
用户密码文件 | /etc/shadow |
用户组账号文件 | /etc/group |
用户组密码文件 | /etc/gshadow |
示例
[root@server ~]# ll /etc/passwd
-rw-r--r--. 1 root root 2595 Oct 27 08:19 /etc/passwd
[root@server ~]# ll /etc/shadow
----------. 1 root root 1375 Oct 27 08:19 /etc/shadow
[root@server ~]# ll /etc/group
-rw-r--r--. 1 root root 997 Oct 27 08:19 /etc/group
[root@server ~]# ll /etc/gshadow
----------. 1 root root 803 Oct 27 08:19 /etc/gshadow
[root@server ~]#
(1)用户账号文件——/etc/passwd
passwd 是一个文本文件,用于定义系统的用户账号,由于所有用户都对passwd有读权限,所以该文件 中只定义用户账号,而不保存口令。
(2)用户密码文件——/etc/shadow
[root@server ~]# ll /etc/shadow
----------. 1 root root 1375 Oct 27 08:19 /etc/shadow
[root@server ~]# head -1 /etc/shadow
root:$6$2D67OA37r1Agm9fW$BavSlBaEzKy14rJKgIx4ZBu5wxZQ6XMfCIUs.S1TIrW9N.5g7KrhJzp6ONtZdOJ7v7kSjwi10BcycAfY.dpk3.:19281:0:99999:7:::
[root@server ~]#
(3)用户组账号文件——/etc/group
系统中的每个组,在/etc/group文件中有一行记录,任何用户均可以读取用户组账户信息配置文件。
字段 | 说明 |
Groupname | 组的名字 |
Passwd | 组的加密口令 |
GID | 是系统区分不同组的ID,在/etc/passwd中的GID字段是用这个数来指定用户的基本组 |
Userlist | 是用“;”分开的用户名,列出的成员以该组为附加组 |
二、用户管理
添加新用户: useradd [选项] <用户名>
常用选项:
-c 注释信息——设定与用户相关的说明信息(如,真实姓名、邮箱地址等)。
-d 目录——设定用户的家目录(默认为/home/用户名)。
-e YYYY-MM-DD——设置用户的失效日期,此日期后将不能使用该账号。
-f 天数——指定密码到期后多少天账号被禁用,若指定为0,则表示账号到期后被立即禁用;若指定
为-1,则表示账号过期后不被禁用(即密码永不过期)。
-g 组名或GID号——为用户指定所属的基本组,该组在指定时必须已存在。
-G 组名或GID号列表——为用户指定所属的附加组,各组在指定时已存在,附加组可以有多个,组 之间 用“,”分隔。
-M——不创建用户家目录。
-N——不创建与用户名同名的基本组。
-p 密码——指定用户的登录密码。
-s shell名——指定用户登录后使用的Shell,默认是bash。
-u 用户号——设置账号的UID,默认是已有用户的最大UID加1。如果同时有-o选项,则可以重复使用其他 用户的标识号。
新建账户的默认设置
参数 | 含义 |
GROUP | 建立用户的默认组 |
HOME=/home | 指用户主目录的默认位置,所有新建用户的主目录默认在这个文件下。 |
INACTIVE=-1 | 指密码过期后的宽限天数,默认是-1,代表用户没有失效时间,永久有效 |
EXPIRE= | 代表账号过期时间,默认值为-1,代表所有新建账户没有失效时间,永久有效 |
SHELL=/bin/bash | 表示所有建立的新用户默认设立了都是/bin/bash |
CREAT_MALL_SPOOL=yes | 为新建用户建立信箱,默认是创建。也就是说每个新建的用户都会有一个对应的邮箱,邮箱会放在 /var/spool/mail/ 目录 下,和用户名相同。 |
SKEL=/etc/skel | 创建一个新用户后,用户的主目录并不是空的,而是有 .bash_profile、.bashrc 等文件,这些文件都是从 /etc/skel 目录中自动复制过来的。因此,更改 /etc/skel 目录下的内容就可 以改变新建用户默认主目录中的配置文件信息。 |
-b HOME | 设置所创建的主目录所在的默认目录,只需要使用目录名替换 HOME即可。 |
-e EXPIRE | 设置账号过期时间,参数为YYYY-MM-DD |
-f INACTIVE | 设置密码过期的宽限天数 |
-g GROUP | 设置新用户所在的初始组 |
-s SHELL | 设置新用户的默认shell,注意:SHELL必须是完整的 |
修改用户信息----usermod
命令格式:usermod [选项] username
常用选项
-c 注释信息——设定与用户相关的说明信息(如,真实姓名、邮箱地址等)。
-d 目录——设定用户的家目录(默认为/home/用户名)。
-g 组名或GID号——为用户指定所属的基本组,该组在指定时必须已存在。
-G 组名或GID号列表——为用户指定所属的附加组,各组在指定时已存在,附加组可以有多个,组 之间 用“,”分隔。
-M——不创建用户家目录。
-s shell名——指定用户登录后使用的Shell,默认是bash。
-u 用户号——设置账号的UID,默认是已有用户的最大UID加1。如果同时有-o选项,则可以重复使用其他 用户的标识号。
为用户账号设置密码——passwd命令
Linux的账户必须设置密码后,才能登录系统
命令格式:passwd [账户名]
常用选项:
-d——清空指定用户的口令。这与未设置口令的账户不同,未设置口令的账户无法登录系统,而口令为空的 账户可以。
-e——使用户的账号密码立即过期,强迫用户下次登录时必须修改口令。
[root@server ~]# passwd -e rehl
Expiring password for user rehl.
passwd: Success
-i——口令过期后多少天停用账户。
-l——锁定(停用)用户账户。
-n——指定口令的最短存活期。
-x——指定密码的最长使用期限。
-u——解锁用户账户。
还有一种更改密码的方式:
[root@server ~]# echo 123 | passwd --stdin xiaolan
Changing password for user xiaolan.
passwd: all authentication tokens updated successfully.
当创建用户多的时候,可以写脚本来通过这个命令完成多个用户的创建密码操作。
或者使用chpasswd来修改密码
[root@server ~]# chpasswd xiaolan:123
[root@server ~]#
注意,使用chpasswd修改密码时要使用CTRL+d来提交,以确保密码修改成功。
或者使用以下方法来修改账户密码,这个只适用于单个账户
[root@server ~]# echo xiaolan:123 | chpasswd
[root@server ~]#
删除用户账号——userdel命令
命令格式:userdel [-r] 账户名
-r——在删除该账户的同时,一并删除该账户对应的主目录。
[root@server ~]# ll /home/
total 4
drwx------. 15 rehl rehl 4096 Oct 30 03:41 rehl
drwx------. 4 xiaolan xiaolan 113 Nov 1 22:51 xiaolan
drwx------. 3 xiaoming xiaoming 78 Oct 27 08:19 xiaoming
drwx------. 3 zhangsan zhangsan 78 Oct 31 10:48 zhangsan
[root@server ~]# ll /var/mail/
total 0
-rw-rw----. 1 rehl mail 0 Oct 16 12:53 rehl
-rw-rw----. 1 rpc mail 0 Oct 16 12:45 rpc
-rw-rw----. 1 xiaolan mail 0 Nov 1 22:49 xiaolan
-rw-rw----. 1 xiaoming mail 0 Oct 27 08:19 xiaoming
-rw-rw----. 1 zhangsan mail 0 Oct 31 10:48 zhangsan
[root@server ~]# userdel -r xiaoming
[root@server ~]# ll /home/ /var/mail/
/home/:
total 4
drwx------. 15 rehl rehl 4096 Oct 30 03:41 rehl
drwx------. 4 xiaolan xiaolan 113 Nov 1 22:51 xiaolan
drwx------. 3 zhangsan zhangsan 78 Oct 31 10:48 zhangsan
/var/mail/:
total 0
-rw-rw----. 1 rehl mail 0 Oct 16 12:53 rehl
-rw-rw----. 1 rpc mail 0 Oct 16 12:45 rpc
-rw-rw----. 1 xiaolan mail 0 Nov 1 22:49 xiaolan
-rw-rw----. 1 zhangsan mail 0 Oct 31 10:48 zhangsan
[root@server ~]#
用户间切换——su(substitute user)命令
命令格式:su - 账户名
控制用户对系统命令的使用权限
使用sudo 命令可以提高普通用户的操作权限,不过这个权限需要root用户进行配置/etc/sudoers文件才 可使用。
sudo的执行流程如下(默认只有root用户能使用):
当用户执行sudo时,便会让用户输入自己的密码来确认(root执行sudo时不需要输入密码);
若欲切换的身份与执行者身份相同,那也不需要输入密码。
若密码输入成功,系统会去/etc/sudoers文件中查找该用户是否有执行sudo的权限;
若用户具有执行sudo的权限,便开始sudo后续接的命令;
sudo -l :列出当前用户可以执行的命令。只有在sudoers里的用户才能使用该选项。
sudo -u 用户名 命令 :以指定用户的身份执行命令。后面的用户是除root以外的,可以是用
户名,也可以是UID。
sudo -k :清除存活期时间,下次再使用sudo时要再输入密码。
sudo -b 命令 :在后台执行指定的命令。
sudo -p 提示语 <操作选项> :可以更改询问密码的提示语,其中%u会代换为使用者账号名 称,%h会显示主机名称。
以下是sudo的使用示例
[xiaolan@server ~]$ sudo -u root touch /root/file2
We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:
#1) Respect the privacy of others.
#2) Think before you type.
#3) With great power comes great responsibility.
[sudo] password for xiaolan:
xiaolan is not in the sudoers file. This incident will be reported.
[xiaolan@server ~]$
随后进入root账户找到这个文件,并用vim编辑器打开
[root@server ~]# find /etc -name sudoers
/etc/yum.repos.d/sudoers
/etc/sudoers
[root@server ~]# vim /etc/sudoers
随后找到以下代码并按照格式给xiaolan用户编辑权限
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
xiaolan ALL=(ALL) ALL
随后检查
[xiaolan@server ~]$ sudo -u root touch /root/file2
[sudo] password for xiaolan:
[xiaolan@server ~]$
[xiaolan@server ~]$ sudo ls /root
'!' Documents file2 myfile.zip Templates
anaconda-ks.cfg Downloads initial-setup-ks.cfg Pictures Videos
Desktop file1 Music Public
[xiaolan@server ~]$
更改完成之后要强制保存退出。
参数代表含义:
1、用户账号:系统哪个账号可以使用sudo这个命令。
2、登录者的来源主机名
3、可切换的身份:这个账号可以切换成什么身份来执行后续的命令。默认root可以切换成任何人。
4、可执行的命令:这个命令最好使用绝对路径编写。默认root可以切换任何身份且进行任何命
ALL是关键字,代表任何身份、主机或命令。
拓展:sudo配置文件/etc/sudoers详解
(1)授权规则
授权规则的定义格式: 授权用户 主机=(切换到的用户) 命令动作 或者 授权用户 主机=(切换到哪些用户或用户组) 是否需要密码验证 命令1,(切换到哪些用户或用户组) 是否需要密码验证 命令2,(切换到哪些用户 或用户组) 是否需要密码验证 命令3 …
这四个要素缺一不可,但在动作之前也可以指定切换到特定用户下,在这里指定切换的用户要用( )号括 起来,如果不需要密码直接运行命令的,应该加NOPASSWD: 参数。
三、用户组管理
1、创建用户组
命令格式: groupadd [-r] 用户组名称
常用选项:
-g GID——指定新用户组的组标识号(GID),默认值是已有的最大的GID加1。
2、修改用户组属性
命令格式: groupmod 选项 用户组
常用选项:
-g GID——为用户组指定新的组标识号。
-n 新用户组——将用户组的名字改为新名字修改用户组的名称和用户组的GID值
3、添加/删除组成员
命令格式: gpasswd [选项] [用户] [组]
######只有root用户和组管理员才能够使用该命令。#####
选项:
-r 删除组密码
-a——把用户加入组
-d——把用户从组中删除。
-M——可同时添加多个用户
-A——给组指派管理员。
4、删除组账户
命令格式: groupdel 用户组名
#####被删除的组若是基本组,则必须先删除引用该基本组的用户,然后再删除该基本组。#####
四、查询用户和组信息
[xiaolan@server ~]$ id xiaolan
uid=1003(xiaolan) gid=1003(xiaolan) groups=1003(xiaolan)
五、查看用户登录系统的情况
1、users,查看当前登录系统的用户
[root@server ~]# users
root root
2、last:列出目前与过去登入系统的用户相关信息,该命令默认会去读取/var/log/wtmp文件,并把该 文件记录的登入系统的用户名单全部显示出来。
[root@server ~]# last -2 显示最近的两条登录信息
root :0 :0 Tue Nov 1 22:41 still logged in
root pts/0 192.168.240.1 Tue Nov 1 21:58 still logged in
wtmp begins Sun Oct 16 12:54:53 2022
[root@server ~]# last -f /var/log/wtmp -n 3 显示wtmp文件中最近的两条登录信息
root :0 :0 Tue Nov 1 22:41 still logged in
root pts/0 192.168.240.1 Tue Nov 1 21:58 still logged in
root :0 :0 Tue Nov 1 21:57 - 22:40 (00:43)
wtmp begins Sun Oct 16 12:54:53 2022
[root@server ~]#
3、如果想要知道每个账号的最近登录时间,则可使用lastlog查看,该命令会读取/var/log/lastlog文 件。
[root@server ~]# lastlog
Username Port From Latest
root tty3 Tue Nov 1 22:41:49 -0400 2022
bin **Never logged in**
daemon **Never logged in**
adm **Never logged in**
lp **Never logged in**
sync **Never logged in**
shutdown **Never logged in**
halt **Never logged in**
4、w:显示登录到系统的用户信息。
[root@server ~]# w
03:29:33 up 5:34, 2 users, load average: 0.00, 0.02, 0.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root :0 :0 22:41 ?xdm? 58.60s 0.00s /usr/libexec/gdm-x-session
root pts/0 192.168.240.1 21:58 2.00s 0.21s 0.01s w
[root@server ~]#
5、who:显示目前登录到系统的用户,who通常通过/var/run/utmp文件来获取信息 。
[root@server ~]#
[root@server ~]# who
root :0 2022-11-01 22:41 (:0)
root pts/0 2022-11-01 21:58 (192.168.240.1)
[root@server ~]# who -s
root :0 2022-11-01 22:41 (:0)
root pts/0 2022-11-01 21:58 (192.168.240.1)
[root@server ~]# who -a
system boot 2022-11-01 21:55
run-level 5 2022-11-01 21:56
root ? :0 2022-11-01 22:41 ? 4164 (:0)
root + pts/0 2022-11-01 21:58 . 2883 (192.168.240.1)
LOGIN tty2 2022-11-01 22:40 3772 id=tty2
[root@server ~]# who -b 列出系统最近启动的日期
system boot 2022-11-01 21:55
[root@server ~]# who -m 列出关于当前终端的信息
root pts/0 2022-11-01 21:58 (192.168.240.1)
[root@server ~]# who am i
root pts/0 2022-11-01 21:58 (192.168.240.1)
[root@server ~]# who am I
root pts/0 2022-11-01 21:58 (192.168.240.1)
[root@server ~]# who -q列出在本地系统上的用户和用户清单
root root
# users=2
[root@server ~]# who -r 显示当前系统的运行级别
run-level 5 2022-11-01 21:56
[root@server ~]# who -u 显示当前每个用户的详细信息
root :0 2022-11-01 22:41 ? 4164 (:0)
root pts/0 2022-11-01 21:58 . 2883 (192.168.240.1)
[root@server ~]# who -T 显示tty终端状况,“+”表示任何人均可写,“——”表示仅root用户或所有者可写,“?”表示终端故障
root ? :0 2022-11-01 22:41 (:0)
root + pts/0 2022-11-01 21:58 (192.168.240.1)
Linux有关用户和用户组管理的相关练习
1、创建mygroup组,group组,GID为600的temp组及组id为40000的adminuser组
2、创建myuser用户属于mygroup组群,接着以myuser身份登录,创建ex和hv两个文件于/home/myuser目 录,并使hv文件的同组用户是root。请依次写出相应执行的命令
3、添加一新用户helen并设置其用户主目录/helen,密码为空,并将temp组群作为用户helen的附加组群。 请依次写出相应执行的命令
4、创建用户user,密码为“a1b2c3”,并将其加入group组群
5、新建一个名为sarah的用户,不属于adminuser组,并将其shell设置为不可登陆shell
6、创建alex用户,使alex用户满足以下要求:用户id为3456,描述名为alian,密码为glegunge,附属 组为group
7、创建 admin用户,无密码,描述为teshu,设置基本组为temp
首先
创建mygroup组,group组,GID为600的temp组及组id为40000的adminuser组
[root@server ~]# groupadd mygroup
[root@server ~]# groupadd group
[root@server ~]# groupadd -g 600 temp
[root@server ~]# grep temp /etc/group
temp:x:600:
[root@server ~]# groupadd -g 40000 adminuser
[root@server ~]# grep adminuser /etc/group
adminuser:x:40000:
[root@server ~]#
随后
创建myuser用户属于mygroup组群,接着以myuser身份登录,创建ex和hv两个文件于/home/myuser目 录,并使hv文件的同组用户是root。请依次写出相应执行的命令
[root@server ~]# gpasswd -a myuser mygroup
Adding user myuser to group mygroup
[root@server ~]# id myuser
uid=1004(myuser) gid=40001(myuser) groups=40001(myuser),1004(mygroup)
[root@server ~]# su - myuser
[myuser@server ~]$ touch ex /home/myuser
[myuser@server ~]$ touch hv /home/myuser
[myuser@server ~]$ ll /home/myuser
total 0
-rw-rw-r--. 1 myuser myuser 0 Nov 2 03:51 ex
-rw-rw-r--. 1 myuser myuser 0 Nov 2 03:51 hv
[myuser@server ~]$ exit
logout
[root@server ~]# gpasswd -a root mygroup
Adding user root to group mygroup
[root@server ~]# id root
uid=0(root) gid=0(root) groups=0(root),1004(mygroup)
[root@server ~]#
添加一新用户helen并设置其用户主目录/helen,密码为空,并将temp组群作为用户helen的附加组群。 请依次写出相应执行的命令
[root@server ~]# useradd -d /helen helen
[root@server ~]# user add -G temp helen
[root@server ~]# grep helen /etc/shadow
helen:!!:19298:0:99999:7:::
[root@server ~]# grep helen /etc/passwd
helen:x:1005:40002::/helen:/bin/bash
[root@server ~]#
创建用户user,密码为“a1b2c3”,并将其加入group组群
[root@server ~]# useradd -p a1b2c3 -g group user
[root@server ~]# id user
uid=1006(user) gid=1005(group) groups=1005(group)
新建一个名为sarah的用户,不属于adminuser组,并将其shell设置为不可登陆shell
[root@server ~]# useradd -s /sbin/nologin/ sarah
[root@server ~]# grep sarah /etc/shadow
sarah:!!:19298:0:99999:7:::
[root@server ~]# grep sarah /etc/passwd
sarah:x:1007:1007::/home/sarah:/sbin/nologin/
[root@server ~]#
创建alex用户,使alex用户满足以下要求:用户id为3456,描述名为alian,密码为glegunge,附属 组为group
[root@server ~]# useradd -u 3456 -c alian -p glegunge -G group alex
[root@server ~]# grep alex /etc/passwd /etc/shadow
/etc/passwd:alex:x:3456:3456:alian:/home/alex:/bin/bash
/etc/shadow:alex:glegunge:19298:0:99999:7:::
[root@server ~]#
创建 admin用户,无密码,描述为teshu,设置基本组为temp
[root@server ~]# useradd -c teshu -g temp admin
[root@server ~]# grep admin /etc/passwd /etc/shadow
/etc/passwd:admin:x:3457:600:teshu:/home/admin:/bin/bash
/etc/shadow:admin:!!:19298:0:99999:7:::
[root@server ~]#
总结
/etc/passwd字段含义
usbmuxd:x:113:113:usbmuxd user:/:/sbin/nologin
usbmuxd---用户名
:x---用户加密后的密码
:113---uid---用户标识
:113---GID----用户所在组标识
:usbmuxd user:用户名备注描述
:/---用户家目录
:/sbin/nologin---当前用户与系统交互时所用的shell
/etc/shadow字段含义
bin:*:18367:0:99999:7:::
bin:----用户名
*:----用户加密后的密码
18367:最后一次修改密码距离1970年1月1日的天数
0:----密码最短可以使用的天数,0为不限制天数
99999:----密码最多可以使用的天数,99999标识不限制天数
7:----提前显示多少天提示密码将要过期
:----过期宽限时间,超过这个时间密码将无法再修改
:----账号过期时间
最后在末尾还有一个保留字段
/etc/group的特殊字段
daemon:x:2:
daemon:----用户组名
x:----用户组密码
2----用户组id(GID)
:-----以这个用户为附加组的成员,当加入后会显示用户成员
/etc/gshadow的字段含义
systemd-journal:!::
systemd-journal----用户组名
:!----组密码。!表示没有改过密码
:----组的管理员
:----附加组的成员