Linux用户权限管理

Linux用户主要分为三类:超级用户、普通用户、虚拟用户

Posted by shrmars on April 5, 2024

一、 用户与角色分类

超级用户:拥有对系统的最高管理权限,默认是root用户。 普通用户:只能对自己目录下的文件进行访问和修改,具有登录系统的权限,例如www用户、ftp用户等。 虚拟用户:也叫“伪”用户,这类用户最大的特点是不能登录系统,它们的存在主要是方便系统管理,满足相应的系统进程对文件属主的要求。例如系统默认的bin、adm、nobody用户等

二、用户和组以及关系

一对一:即一个用户可以存在一个组中,也可以是组中的唯一成员。 一对多:即一个用户可以存在多个用户组中。那么此用户具有多个组的共同权限。 多对一:多个用户可以存在一个组中,这些用户具有和组相同的权限。 多对多:多个用户可以存在多个组中。其实就是上面三个对应关系的扩展。

如下图所示:

三、用户和组相关的配置文件

/etc/passwd文件

系统用户配置文件,是用户管理中最重要的一个文件。这个文件记录了Linux系统中每个用户的一些基本属性,并且对所有用户可读。

/etc/shadow文件

用户影子文件,由于/etc/passwd文件是所有用户都可读的,这样就导致了用户的密码容易出现泄露,因此,linux将用户的密码信息从/etc/passwd中分离出来,单独的放到了一个文件中,这个文件就是/etc/shadow,该文件只有root用户拥有读权限。

/etc/group文件

用户组配置文件,用户组的所有信息都存放在此文件中。

/etc/login.defs文件:

用来定义创建一个用户时的默认设置,比如指定用户的UID和GID的范围,用户的过期时间、是否需要创建用户主目录等等。

/etc/default/useradd文件

定义了新建用户的一些默认属性,比如用户的主目录、使用的shell等等,通过更改此文件,可以改变创建新用户的默认属性值。

/etc/skel文件

目录定义了新建用户在主目录下默认的配置文件,更改/etc/skel目录下的内容就可以改变新建用户默认主目录的配置文件信息。

四、用户组操作命令

groupadd命令 用来新建一个用户组。语法格式为: groupadd -g gid groupname -g:指定新建用户组的GID号,该GID号必须唯一,不能和其它用户组的GID号重复。

真实情况下此命令使用的不多,因为创建用户的时候会自动创建组

newgrp命令 如果一个用户同时属于多个用户组,那么用户可以在用户组之间切换,以便具有其他用户组的权限,newgrp主要用于在多个用户组之间进行切换。

groupdel命令 表示删除用户组,语法格式为: groupdel [群组名称] 当需要从系统上删除用户组时,可用groupdel指令来完成这项工作。如果该用户组中仍包括某些用户,则必须先删除这些用户后,然后才能删除用户组。

1
2
3
4
5
6
7
8
9
10
# 创建用户 linux1 并指定gid 10020
[root@linux-171 ~]# groupadd -g 10020 linux1
# 查看组 linux1
[root@linux-171 ~]# more /etc/group|grep linux1
linux1:x:10020:
# 删除组 linux1
[root@linux-171 ~]# groupdel linux1
# 再次查看组已不存在
[root@linux-171 ~]# more /etc/group|grep linux1
[root@linux-171 ~]# 

五、用户命令

用户新增:useradd 命令 useradd [-u uid [-o]] [-g group] [-G group,…] [-d home] [-s shell] [-c comment] [-f inactive] [-e expire ] name

各个选项具体含义如下:  -u uid:即用户标识号,此标识号必须唯一,默认可不指定  -g group:指定新建用户登录时所属的默认组,或者叫主组。此群组必须已经存在。一个用户只能有一个主组。也可不指定,如果不指定,则会创建一个和用户名称一样的组。  -G group:指定新建用户的附加组,此群组必须已经存在,一个用户可以同时有多个附加组。附加组是相对与主组而言的,当一个用户同时是多个组中的成员时,登录时的默认组成为主组,而其它组称为附加组。  -d home:指定新建用户的默认主目录,如果不指定,系统会在/etc/default/useradd文件指定的目录下创建用户主目录。  -s shell:指定新建用户使用的默认shell,如果不指定,系统以/etc/default/useradd文件中定义的shell作为新建用户的默认shell。

用户修改:usermod 命令 usermod用来修改用户的账户属性信息,使用语法如下: usermod [-u uid [-o]] [-g group] [-G group,…] [-d 主目录 ] [-s shell] [-L|-U] Name 各个选项具体含义如下:  -u uid:指定用户新的UID值,此值必须为唯一的ID值,除非用-o选项。  -g group:修改用户所属的组名为新的用户组名,此用户组名必须已经存在。  -G group:修改用户所属的附加组。  -d 主目录:修改用户登录时的主目录。  -s shell:修改用户登录系统后默认使用的shell  -L:锁定用户密码,使密码无效。  -U:解除密码锁定。

删除用户:userdel 命令 Userdel用来删除一个用户,若指定“-r”参数不但删除用户,同时删除用户的主目录以及目录下的所有文件。语法格式为: userdel [-r] [用户帐号]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# 创建用户linux2
[root@linux-171 ~]# useradd linux2
# 查看 /home 目录下linux2的根目录
[root@linux-171 ~]# ls /home
linux2  ruoli
# 查看linux2分组,创建linux2用户时会自动创建 linux2分组
[root@linux-171 ~]# more /etc/group|grep linux2
linux2:x:1001:


# 创建用户linux3 
# 指定主组为linux2,副组为wheel
# 指定用户根目录为 /opt/linux3
[root@linux-171 ~]# useradd -g linux2 -G wheel -d /opt/linux3 linux3
# 查看默认的/home目录下没有生成用户根目录
[root@linux-171 ~]# ls /home
linux2  ruoli
# 查看 /opt 目录下有生成用户目录
[root@linux-171 ~]# ls /opt
firefox  linux3  patch_workspace
[root@linux-171 ~]# cd /opt/linux3/
# 在用户根目录下查看隐藏文件,这些文件就是从 、**/etc/skel目录中复制过来
[root@linux-171 linux3]# ls -al
总用量 12
drwx------ 3 linux3 linux2  78  4月  4 15:04 .
drwxr-xr-x 5 root   root    58  4月  4 15:04 ..
-rwxr-xr-x 1 linux3 linux2  75  1月 10  2020 .bash_logout
-rwxr-xr-x 1 linux3 linux2  71  3月 19  2020 .bash_profile
-rwxr-xr-x 1 linux3 linux2 138  1月 10  2020 .bashrc
drwxr-xr-x 4 linux3 linux2  39  4月  4 05:55 .mozilla

# 查看用户linux3和组的映射关系
# 可以查看到用户的主组为linux2,副组为wheel
[root@linux-171 linux3]# id linux3
用户id=1002(linux3) 组id=1001(linux2)=1001(linux2),10(wheel)

#修改linux2用户的主组为nginx
[root@linux-171 linux3]# usermod -g nginx linux2

# 删除用户 linux2,默认情况下不会删除主目录
[root@linux-171 linux3]# userdel linux2
# 主目录依然存在
[root@linux-171 linux3]# ls /home
linux2  ruoli
# -r 命令指定删除主目录
[root@linux-171 linux3]# userdel -r linux3
# 查看主目录已不存在
[root@linux-171 linux3]# ls /opt
firefox  patch_workspace