Linux 操作系统对多用户的管理,是非常繁琐的,所以用组的概念来管理用户就变得简单,每个用户可以在一个独立的组,每个组也可以有零个用户或者多个用户。
Linux 系统用户是根据用户 ID 来识别的,默认 ID 长度为 32 位,从默认 ID 编号从 0 开始,但是为了和老式系统兼容,用户 ID 限制在 60000 以下,Linux 用户分总共分为三种,分别如下:
- root 用户 (ID 0)
- 系统用户 (ID 1-499)
- 普通用户 (ID 500 以上)
Linux 系统中的每个文件或者文件夹,都有一个所属用户及所属组,使用 id 命令可以显示当前用户的信息,使用 passwd 命令可以修改当前用户密码。Linux 操作系统用户的特点如下:
- 每个用户拥有一个 UserID,操作系统实际读取的是 UID,而非用户名;
- 每个用户属于一个主组,属于一个或多个附属组,一个用户最多有 31 个附属组;
- 每个组拥有一个 GroupID;
- 每个进程以一个用户身份运行,该用户可对进程拥有资源控制权限;
- 每个可登陆用户拥有一个指定的 Shell 环境。
Linux 用户管理
Linux 用户在操作系统可以进行日常管理和维护,涉及到的相关配置文件如下:
/etc/passwd
保存用户信息/etc/shdaow
保存用户密码(以加密形式保存)/etc/group
保存组信息/etc/login.defs
用户属性限制,密码过期时间,密码最大长度等限制/etc/default/useradd
显示或更改默认的 useradd 配置文件
如需创建新用户,可以使用命令 useradd
,执行命令 useradd test1
即可创建 test1 用户,同时会创建一个同名的组 test1 ,默认该用户属于 test1 主组。
Useradd test1
命令默认创建用户 test1,会根据如下步骤进行操作:
在
/etc/passwd
文件中添加用户信息;如使用 passwd 命令创建密码,密码会被加密保存在
/etc/shdaow
中;为 test1 创建家目录:/home/test1;
将
/etc/skel
中的 .bash 开头的文件复制至/home/test1
家目录;创建与用户名相同的 test1 组,test1 用户默认属于 test1 同名组;
test1 组信息保存在
/etc/group
配置文件中。
在使用 useradd 命令创建用户时,可以支持如下参数:
1 | useradd [选项] 用户名 |
Linux 组管理
所有的 Linux 或者 Windows 系统都有组的概念,通过组可以更加方便的管理用户,组的概念应用于各行行业,例如企业会使用部门、职能或地理区域的分类方式来管理成员,映射在 Linux 系统,同样可以创建用户,并用组的概念对其管理。
Linux 组有如下特点:
每个组有一个组 ID;
组信息保存在 /etc/group 中;
每个用户至少拥有一个主组,同时还可以拥有 31 个附属组。
通过命令 groupadd
、groupdel
、groupmod
来对组进行管理,详细参数使用如下:
groupadd 用法:
1 | groupadd [选项] 组名 |
groupmod 用法:
1 | groupmod [选项] 组名 |
groupdel 用法:
1 | groupdel admin # 删除admin组; |
Linux 权限管理
Linux 权限是操作系统用来限制对资源访问的机制,权限一般分为读、写、执行。系统中每个文件都拥有特定的权限、所属用户及所属组,通过这样的机制来限制哪些用户或用户组可以对特定文件进行相应的操作。
Linux 每个进程都是以某个用户身份运行,进程的权限与该用户的权限一样,用户的权限越大,则进程拥有的权限就越大。
Lnux 中有的文件及文件夹都有至少权限三种权限,常见的权限如表 5-1 所示:
权限 | 对文件的影响 | 对目录的影响 |
---|---|---|
r(读取) | 可读取文件内容 | 可列出目录内容 |
w(写入) | 可修改文件内容 | 可在目录中创建删除内容 |
x(执行) | 可作为命令执行 | 可访问目录内容 |
目录必须拥有 x 权限,否则无法查看其内容 |
Linux 权限授权,默认是授权给三种角色,分别是 user、 group 、 other , Linux 权限与用户之间的关联如下:
U代表User,G代表Group,O代表Other;
每个文件的权限基于 UGO 进行设置;
权限三位一组(rwx),同时需授权给三种角色,UGO;
每个文件拥有一个所属用户和所属组,对应 UGO,不属于该文件所属用户或所属组使用 O 来表示;
在 Linux 系统中,可以通过 ls –l
查看 peter.net
目录的详细属性
1 | drwxrwxr-x 2 peter1 peter1 4096 Dec 10 01:36 peter.net |
peter.net 目录属性参数详解如下:
- d 表示目录,同一位置如果为 - 则表示普通文件;
- rwxrwxr-x 表示三种角色的权限,每三位为一种角色,依次为 u,g,o 权限,如上则表示 user 的权限为 rwx,group 的权限为 rwx,other 的权限为 r-x;
- 2 表示文件夹的链接数量,可理解为该目录下子目录的数量;
- 从左到右,第一个 peter1 表示该用户名,第二个 peter1 则为组名,其他人角色默认不显示;
- 4096 表示该文件夹占据的字节数;
- Dec 10 01:36 表示文件创建或者修改的时间;
- peter.net 为目录的名,或者文件名。
Chmod 用户及组权限
修改某个用户、组对文件夹的权限,用命令 chmod 实现,其中以代指 ugo,、-、= 代表加入、删除和等于对应权限,具体案例如下:
授予用户对 peter.net 目录拥有 rwx 权限
script 1
chmod –R u+rwx peter.net
授予组对 peter.net 目录拥有 rwx 权限
script 1
chmod –R g+rwx peter.net
授予用户、组、其他人对 jpeter.net 目录拥有 rwx 权限
script 1
chmod –R u+rwx,g+rwx,o+rwx peter.net
撤销用户对 peter.net 目录拥有 w 权限
script 1
chmod –R u-w peter.net
撤销用户、组、其他人对 peter.net 目录拥有 x 权限
script 1
chmod –R u-x,g-x,o-x peter.net
授予用户、组、其他人对 jpeter.net 目录只有 rx 权限
script 1
chmod –R u=rx,g=rx,o=rx peter.net
chmod 二进制权限
1 | Linux权限默认使用rwx来表示,为了更简化在系统中对权限进行配置和修改,Linux权限引入二进制表示方法,如下代码; |
使用二进制方式来修改权限案例演示如下,其中默认 peter.net 目录权限为 755:
授予用户对 peter.net 目录拥有 rwx 权限
script 1
chmod -R 755 peter.net
授予组对 peter.net 目录拥有 rwx 权限
script 1
chmod -R 775 peter.net
授予用户、组、其他人对 peter.net 目录拥有 rwx 权限
script 1
chmod -R 777 peter.net
Linux 特殊权限及掩码
Linux 权限除了常见的 rwx 权限之外,还有很多特殊的权限,细心的读者会发现,为什么 Linux 目录默认权限 755,而文件默认权限为 644 呢,这是因为 Linux 权限掩码 umask
导致。
每个 Linux 终端都拥有一个 umask
属性,umask
熟悉可以用来确定新建文件、目录的默认权限,默认系统权限掩码为 022。在系统中每创建一个文件或者目录,文件默认权限是 666,而目录权限则为 777,权限对外开放比较大,所以设置了权限掩码之后,默认的文件和目录权限减去 umask
值才是真实的文件和目录的权限。
对应目录权限为:777-022=755;
对应文件权限为:666-022=644;
执行 umask 命令可以查看当前默认的掩码,umask -S 023 可以设置默认的权限掩码。
在 Linux 权限中,除了普通权限外,还有如下表 5-2 所示,三个特殊权限:
权限 | 对文件的影响 | 对目录的影响 |
---|---|---|
suid | 以文件的所属用户身份执行,而非执行文件的用户 | 无 |
sgid | 以文件所属组身份去执行 | 在该目录中创建任意新文件的所属组与该目录的所属组相同 |
sticky | 无 | 对目录拥有写入权限的用户仅可以删除其拥有的文件,无法删除其他用户所拥有的文件 |
Linux 中设置特殊权限方法如下:
设置 suid:
chmod u+s peter.net
设置 sgid:
chmod g+s peter.net
设置 sticky:
chmod o+t peter.net
特殊权限与设置普通权限一样,可以使用数字方式表示:
1 | SUID = 4 |
可以通过 chmod 4755 peter.net
对该目录授予特殊权限为 s 的权限,Linux 系统中 s 权限的应用常见包括:su
、passwd
、sudo
,