- 浏览: 142449 次
文章分类
最新评论
与每一个进程相关联的 ID 有 6 个或更多,如下表所示:
其中:
(1) 实际用户 ID 和实际组 ID 标识我们究竟是谁。这两个字段在登录时取自口令文件中的登录项。通常,在一个登录回话期间这些值并不改变,但是超级用户进程有方法改变它们。
(2) 有效用户 ID、有效组 ID 和 附属组 ID 决定了我们的文件访问权限。通常,有效用户 ID 和有效组 ID 就等于实际用户 ID 和实际组 ID。
(3) 保存的设置用户 ID 和保存的设置组 ID 在执行一个程序时包含了有效用户 ID 和有效组 ID 的副本。
每个文件都有一个所有者和组所有者,分别由 stat 结构中的 st_uid 和 st_gid 来指定。通常,当执行一个程序文件时,有效用户 ID 和有效组 ID 就等于实际用户 ID 和实际组 ID。但可以在 stat 结构中的 st_mode 里设置一个特殊标志,表示“当执行此文件时,将进程的有效用户 ID 设置为文件所有者的用户 ID(st_uid)”。同理,可设置 st_mode 中的另一位将执行此文件的进程的有效组 ID 改为文件的组所有者 ID(st_gid)。在文件模式字(st_mode)中的这两位被称为设置用户 ID 位和设置组 ID 位,可分别用常量 S_ISUID 和 S_ISGID 来测试。
例如,若文件所有者是超级用户,而且设置了该文件的的设置用户 ID 位,那么当一个进程执行该文件时,该进程就具有超级用户权限,而不管该进程的实际用户 ID 是什么。passwd 命令程序就是一个设置用户 ID 程序,因为它允许任意用户进程将新口令写入只有超级用户才具有写权限的 /etc/passwd 或 /etc/shadow 口令文件中。由于运行设置用户 ID 程序的进程通常会得到额外的权限,所以编写这种程序时要特别谨慎。
st_mode 值也包含了对文件的访问权限位。所有文件类型都有访问权限,每个文件有 9 个访问权限位,可分成 3 类,如下表:
表中的 3 类访问权限(即读、写及执行)以各种方式由不同的函数使用,现将这些方式汇总如下:
1、当用某名字打开任意类型的文件时,对该名字中包含的每一级目录,包括它可能隐含的当前工作目录都应该具有执行权限。这就是为什么对于目录其执行权限位常被称为搜索位的原因。例如,为了打开文件 /usr/include/stdio.h,需要对目录 /、/usr 和 /usr/include 具有执行权限。然后,需要具有对文件本身的适当权限。如果当前目录是 /usr/include,那么需要对当前目录有执行权限,这是隐含当前目录的一个示例。引用隐含目录的另一个例子是,如果 PATH 环境变量指定了一个我们不具有执行权限的目录,那么 shell 绝不会在该目录下找到可执行文件。注意,目录的读权限和执行权限的意义是不同的。读权限允许我们读目录,获得在该目录中所有文件名的列表;而执行权限使我们可通过该目录(也就是搜索该目录,寻找一个特点的文件名)。
2、对一个文件的读权限决定了我们能否打开该文件进行读操作,这与 open 函数的 O_RDONLY 和 O_RDWR 标志相关。
3、对一个文件的写权限决定了我们能否打开该文件进行写操作,这与 open 函数的 O_WRONLY 和 O_RDWR 标志相关。
4、只有对某文件具有写权限,才能在 open 函数中对它指定 O_TRUNC 标志。
5、要在一个目录中创建新文件,必须对该目录具有写权限和执行权限。
6、要删除一个文件,必须对包含该文件的目录具有写权限和执行权限,而跟对该文件本身是否具有读、写权限无关。
7、如果要用 7 个 exec 函数中的任何一个执行某个文件,都必须对该文件具有执行权限,该文件还必须是一个普通文件。
进程每次创建、打开或删除一个文件时,内核就进行文件访问权限测试,而这种测试可能涉及文件的所有者(st_uid 和 st_gid)、进程的有效 ID(有效用户 ID 和有效组 ID)以及进程的附属组 ID(若支持的话)。两个所有者 ID 是文件的性质,而两个有效 ID 和附属组 ID 则是进程的性质。内核进行的测试具体如下:
1、若进程的有效用户 ID 是 0(超级用户),则允许访问。这给予了超级用户对整个文件系统进行处理的最充分的自由。
2、若进程的有效用户 ID 等于文件的所有者 ID(即进程拥有此文件),那么如果所有者适当的访问权限位被设置,则允许访问;否则拒绝访问。适当的访问权限位指的是,若进程为读而打开该文件,则用户读位应为 1;若为写而打开,则用户写位应为 1;若进程将执行该文件,则用户执行位应为 1。
3、若进程的有效组 ID 或进程的附属组 ID 之一等于文件的组 ID,那么如果组适当的访问权限位被设置,则允许访问;否则拒绝访问。
4、若其他用户适当的访问权限位被设置,则允许访问;否则拒绝访问。
对于新文件或新目录来说,它的用户 ID 被设置为进程的有效用户 ID,而组 ID 被设置为进程的有效组 ID 或它所在目录的组 ID(FreeBSD 8.0 和 Mac OS X 10.6.8 总是使用目录的组 ID作为新文件的组 ID。有些 Linux 文件系统允许使用 mount 命令选项来进行选择。对于 Linux 3.2.0 和 Solaris 10,默认情况下,新文件的组 ID 取决于它所在的目录的设置组 ID 位是否被设置。如果该位被设置,则新文件的组 ID 就被设置为目录的组 ID;否则设置为进程的有效组 ID)。
ID 类别 | 说明 |
实际用户ID和实际组ID | 我们实际上是谁 |
有效用户ID、有效组ID和附属组ID | 用于文件访问权限检查 |
保存的设置用户ID和保存的设置组ID | 由 exec 函数保存 |
其中:
(1) 实际用户 ID 和实际组 ID 标识我们究竟是谁。这两个字段在登录时取自口令文件中的登录项。通常,在一个登录回话期间这些值并不改变,但是超级用户进程有方法改变它们。
(2) 有效用户 ID、有效组 ID 和 附属组 ID 决定了我们的文件访问权限。通常,有效用户 ID 和有效组 ID 就等于实际用户 ID 和实际组 ID。
(3) 保存的设置用户 ID 和保存的设置组 ID 在执行一个程序时包含了有效用户 ID 和有效组 ID 的副本。
每个文件都有一个所有者和组所有者,分别由 stat 结构中的 st_uid 和 st_gid 来指定。通常,当执行一个程序文件时,有效用户 ID 和有效组 ID 就等于实际用户 ID 和实际组 ID。但可以在 stat 结构中的 st_mode 里设置一个特殊标志,表示“当执行此文件时,将进程的有效用户 ID 设置为文件所有者的用户 ID(st_uid)”。同理,可设置 st_mode 中的另一位将执行此文件的进程的有效组 ID 改为文件的组所有者 ID(st_gid)。在文件模式字(st_mode)中的这两位被称为设置用户 ID 位和设置组 ID 位,可分别用常量 S_ISUID 和 S_ISGID 来测试。
例如,若文件所有者是超级用户,而且设置了该文件的的设置用户 ID 位,那么当一个进程执行该文件时,该进程就具有超级用户权限,而不管该进程的实际用户 ID 是什么。passwd 命令程序就是一个设置用户 ID 程序,因为它允许任意用户进程将新口令写入只有超级用户才具有写权限的 /etc/passwd 或 /etc/shadow 口令文件中。由于运行设置用户 ID 程序的进程通常会得到额外的权限,所以编写这种程序时要特别谨慎。
st_mode 值也包含了对文件的访问权限位。所有文件类型都有访问权限,每个文件有 9 个访问权限位,可分成 3 类,如下表:
表中的 3 类访问权限(即读、写及执行)以各种方式由不同的函数使用,现将这些方式汇总如下:
1、当用某名字打开任意类型的文件时,对该名字中包含的每一级目录,包括它可能隐含的当前工作目录都应该具有执行权限。这就是为什么对于目录其执行权限位常被称为搜索位的原因。例如,为了打开文件 /usr/include/stdio.h,需要对目录 /、/usr 和 /usr/include 具有执行权限。然后,需要具有对文件本身的适当权限。如果当前目录是 /usr/include,那么需要对当前目录有执行权限,这是隐含当前目录的一个示例。引用隐含目录的另一个例子是,如果 PATH 环境变量指定了一个我们不具有执行权限的目录,那么 shell 绝不会在该目录下找到可执行文件。注意,目录的读权限和执行权限的意义是不同的。读权限允许我们读目录,获得在该目录中所有文件名的列表;而执行权限使我们可通过该目录(也就是搜索该目录,寻找一个特点的文件名)。
2、对一个文件的读权限决定了我们能否打开该文件进行读操作,这与 open 函数的 O_RDONLY 和 O_RDWR 标志相关。
3、对一个文件的写权限决定了我们能否打开该文件进行写操作,这与 open 函数的 O_WRONLY 和 O_RDWR 标志相关。
4、只有对某文件具有写权限,才能在 open 函数中对它指定 O_TRUNC 标志。
5、要在一个目录中创建新文件,必须对该目录具有写权限和执行权限。
6、要删除一个文件,必须对包含该文件的目录具有写权限和执行权限,而跟对该文件本身是否具有读、写权限无关。
7、如果要用 7 个 exec 函数中的任何一个执行某个文件,都必须对该文件具有执行权限,该文件还必须是一个普通文件。
进程每次创建、打开或删除一个文件时,内核就进行文件访问权限测试,而这种测试可能涉及文件的所有者(st_uid 和 st_gid)、进程的有效 ID(有效用户 ID 和有效组 ID)以及进程的附属组 ID(若支持的话)。两个所有者 ID 是文件的性质,而两个有效 ID 和附属组 ID 则是进程的性质。内核进行的测试具体如下:
1、若进程的有效用户 ID 是 0(超级用户),则允许访问。这给予了超级用户对整个文件系统进行处理的最充分的自由。
2、若进程的有效用户 ID 等于文件的所有者 ID(即进程拥有此文件),那么如果所有者适当的访问权限位被设置,则允许访问;否则拒绝访问。适当的访问权限位指的是,若进程为读而打开该文件,则用户读位应为 1;若为写而打开,则用户写位应为 1;若进程将执行该文件,则用户执行位应为 1。
3、若进程的有效组 ID 或进程的附属组 ID 之一等于文件的组 ID,那么如果组适当的访问权限位被设置,则允许访问;否则拒绝访问。
4、若其他用户适当的访问权限位被设置,则允许访问;否则拒绝访问。
对于新文件或新目录来说,它的用户 ID 被设置为进程的有效用户 ID,而组 ID 被设置为进程的有效组 ID 或它所在目录的组 ID(FreeBSD 8.0 和 Mac OS X 10.6.8 总是使用目录的组 ID作为新文件的组 ID。有些 Linux 文件系统允许使用 mount 命令选项来进行选择。对于 Linux 3.2.0 和 Solaris 10,默认情况下,新文件的组 ID 取决于它所在的目录的设置组 ID 位是否被设置。如果该位被设置,则新文件的组 ID 就被设置为目录的组 ID;否则设置为进程的有效组 ID)。
发表评论
-
打开伪终端设备
2018-07-09 20:50 1252在伪终端概述一节中已对 PTY进行了初步的介绍。尽管 ... -
伪终端概述
2018-06-02 11:05 1550伪终端就是指,一个应用程序看上去像一个终端,但事实上它 ... -
终端窗口大小和 termcap
2018-05-29 22:39 800多数 UNIX 系统都提供了一种跟踪当前终端窗口大小的 ... -
终端规范模式和非规范模式
2018-05-29 00:25 950终端规范模式很简单:发一个读请求,当一行已经输入后,终 ... -
终端标识
2018-05-23 11:18 569尽管控制终端的名字在多数 UNIX 系统上都是 /de ... -
波特率和行控制函数
2018-05-22 07:53 944虽然大多数终端设 ... -
终端属性和选项标志
2018-05-20 07:40 710tcgetattr 和 tcsetattr ... -
终端特殊输入字符
2018-05-17 06:33 815终端支持下表所示的特殊输入字符。 为了更改 ... -
终端 I/O 综述
2018-05-10 07:56 439终端设备可认为是由内核中的终端驱动程序控制的。每个终端 ... -
POSIX 信号量
2018-05-09 00:03 579在XSI IPC通信之信 ... -
XSI IPC 通信之共享存储
2018-04-25 07:18 947在XSI IPC通信之消息队列和XSI IPC通信之信 ... -
XSI IPC通信之信号量
2018-04-17 23:38 617在XSI IPC通信之消 ... -
XSI IPC通信之消息队列
2018-04-15 10:54 497消息队列是消息的链接表,存储在内核中,由消息队列标识符 ... -
XSI IPC 相似特征介绍
2018-02-08 23:48 485有 3 种称作 XSI IPC ... -
IPC 通信之 FIFO
2018-02-06 22:55 421FIFO 也被称为命名管道,未命名的管道只能在两个相关 ... -
IPC 通信之管道
2018-01-30 22:22 389管道是 UNIX 系统 IPC 的最古老但也是最常用的 ... -
readv/writev 函数及存储映射 I/O
2018-01-19 00:57 889readv 和 writev 函数可用于在一次函数调用 ... -
POSIX 异步 I/O
2018-01-16 21:33 455POSIX 异步 I/O 接口为对不同类型的文件进行异 ... -
fcntl 记录锁
2018-01-06 23:48 615记录锁的功能是:当有进程正在读或修改文件的某个部分时, ... -
守护进程惯例
2018-01-06 23:52 439UNIX 系统中,守护进程遵循下列通用惯例。 ...
相关推荐
Unix系统中,用户分为实际用户ID和有效用户ID,实际组ID和有效组ID。通常,进程的有效用户和组ID与其实际用户和组ID一致。但是,某些特殊ID位(设置用户ID和设置组ID)可以改变这一规则。`chown`命令允许改变文件的...
总的来说,Apple ID 是连接苹果所有服务的桥梁,熟悉其设置和使用方法对于苹果设备用户来说至关重要。无论您是初次使用 iPhone 还是希望更好地管理现有账户,以上步骤都提供了清晰的指导。祝您使用愉快,如有其他...
用户账户的属性包括用户名(唯一,可包含字母、数字和符号)、口令(加密存储)、用户ID(uid,唯一标识符,超级用户为0,普通用户从500开始)、组群ID(gid,通常与uid相同)、用户主目录(通常位于/home目录下)、...
对于68针的SCSI硬盘,数据接口和电源接口之间的一组跳线也可用于设置SCSI ID。这通常更方便,因为它们可以直接连接到盘架上的ID线,根据硬盘在盘架上的位置自动分配ID,省去了手动设置的麻烦。但需要注意,若同时...
这通常通过创建权限表实现,表中包含用户ID、用户组ID以及对应的权限字段。通过SQL查询,我们可以动态地根据用户登录信息获取其权限。 用户分组可以实现无限级别的分级,这意味着我们可以创建父级和子级用户组,子...
文档还提及了suid和guid,即设置用户ID和设置组ID的权限。这些权限使得用户在执行具有相应权限的程序时,具有程序所有者的权限,这在系统管理中非常有用,比如允许普通用户临时获得管理员权限。 “chown”和“chgrp...
组ID是一个非负整数,用于唯一地标识一个用户组。每个组都有一个唯一的GID,这使得系统能够区分不同的用户组,并为这些组分配特定的权限。 4. **第四字段:组中附加用户** 这个字段列出了属于该用户组的所有用户...
### Linux添加删除用户和用户组知识点详解 #### 一、添加用户 在Linux系统中,添加新用户是一项基本且重要的管理任务。通过`adduser`命令可以方便地创建新用户,并设置初始密码。 ##### 命令示例: ```bash ...
在UNIX中,文件访问权限是至关重要的,由st_mode中的位模式决定,包括读、写和执行权限,以及设置用户ID和设置组ID的特殊权限。chmod和fchmod函数用于改变这些权限,而umask函数设置默认权限掩码。文件所有权通过...
- S_ISUID和S_ISGID分别表示设置用户ID和设置组ID,用于提升执行文件时的权限。 权限位可以用数字表示,其中用户、组和其他人的权限位分别用三个数字表示,如数字10705表示用户具有读、写、执行权限,组没有权限,...
id命令可以显示真实有效的用户ID(UID)和组ID(GID)。UID 是对一个用户的单一身份标识。组ID(GID)则对应多个UID。id命令已经默认预装在大多数Linux系统中。要使用它,只需要在你的控制台输入id。不带选项输入id会...
- `id`: 显示用户ID、组ID以及所属的附加组。 - `whoami`: 显示当前登录的用户名。 - `cat /etc/passwd`: 查看所有用户信息,包括用户名、密码(以星号显示)、UID、GID、用户主目录和shell。 - `cat /etc/group...
**4.4 设置用户ID和设置组ID** - **特殊权限位:** 用于设置文件的特殊权限位。 **4.5 文件访问权限** - **权限模型:** UNIX文件系统的权限模型。 **4.6 新文件和目录的所有权** - **所有权继承:** 创建新...
Linux的用户信息存储在/etc/passwd文件中,包括用户名、用户ID(UID)、主组ID(GID)、用户全名或注释、用户主目录以及默认使用的shell程序。而用户的密码信息则存储在加密后的/etc/shadow文件中,这个文件还包含了...
3. /etc/group:此文件记录了所有组的信息,包括组名、GID(组ID)、组成员列表等。 4. /etc/gshadow:存储组的密码信息,只有root用户有权访问。 三、用户和组的创建与管理 1. 添加用户:使用`useradd`命令创建...
- **/etc/passwd**:存储用户的非加密信息,如用户名、用户ID(uid)、组ID(gid)等。 - **/etc/shadow**:存储加密的密码信息和其他敏感数据,如密码到期日期。 - **/etc/group**:存储组信息,包括组名、组ID(gid)...
- `/etc/passwd`:存储所有用户的基本信息,包括用户名、用户ID、组ID、主目录和shell类型。 - `/etc/group`:记录所有用户组及其成员信息。 - `/etc/shadow`:保存加密密码,提高系统安全性。 7. **用户环境...
- `/etc/passwd`:这是一个文本文件,用于存储系统中所有用户的登录信息,包括用户名、用户ID(UID)、组ID(GID)、用户家目录和shell信息。 - `/etc/shadow`:这是一个包含加密密码和用户账户状态信息的文件,仅...
这样程序以后增加功能只需在数据库表中增加模块id和模块名称就行了,不需要修改权限代码。 在FormActivate执行权限设置代码 程序其他代码删除 程序缺点:没实现树形结构,Actions循序不能随便更改,改了以后需要...
- `id` 命令用于显示用户或组的 ID 和成员关系。 ```bash finger username ``` - `finger` 命令用于显示用户的登录状态和其他信息。 ```bash cut -d: -f1 /etc/passwd ``` - `cut` 命令用于从文件中提取...