用户与组的相关知识

一、 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----用户组名

:!----组密码。!表示没有改过密码

:----组的管理员

:----附加组的成员
 

你可能感兴趣的:(linux,服务器,运维)