Linux下文件权限(一)用户ID和用户组ID
最近在读《unix环境高级编程》,看到文件权限这里比较糊涂,主要设计多个用户ID和用户组ID,包括下面两个:
(1)实际用户ID和实际用户组ID:这一部分表示我们究竟是谁。这两个字段在登录时取自口令文件中的登录项。通常,在一个登录会话期间这些值并不改变,但是超级用户进程有办法改变他们。简单来说,实际用户ID是登录用户的uid,实际用户组Id是登录用户的gid。
(2)有效用户ID和有效用户组ID:这一部分用于文件的权限检查。一般情况下,有效用户ID等于实际用户ID,有效用户组ID等于实际用户组ID。当设置用户ID位(SUID)被设置时,有效用户ID等于文件所有者的uid而不是实际用户组ID;当设置用户组ID(SGID)位,有效用户组ID等于文件所有者的gid,而不是实际用户组ID。
下面在linux下测试上述结论:
在root超级用户下新建test.c文件,并编译生成test程序
#include "apue.h" int main()
{
printf("uid=%d,gid=%d,euid=%d,egid=%d\n",getuid(),getgid(),geteuid(),getegid());
exit(0);
}
查看文件属性

通过id命令查看当前登录用户为root。程序进程并未设置SUID和SGID,执行程序可以看出,实际用户ID,实际用户组ID都是0,有效用户ID,有效用户组ID也是0(等于实际用户ID,实际用户组ID)
下面修改test的用户和用户组,再看结果

结果没有发生变化,仍然是有效用户ID等于实际用户ID,有效用户组ID等于实际用户组ID(这是因为设置用户ID位SUID,设置用户ID位SGID没有被设置)
下面给test程序设置SUID

发现设置SUID位之后,test进程有效用户ID(1000)不等于实际用户ID(0)了,而是等于文件所有者的uid(yangang的uid为1000)
如果设置程序的SGID ,会出现类似的结果:
SUID
这样程序就只能访问只有yangang才能访问的资源
若文件的所有者是超级用户,而且设置了该文件的设置用户ID位,那么当该程序文件的一个进程执行时,该进程拥有超级用户权限。不管执行此文件的进程的实际用户是什么。例如passwd 命令允许任一用户改变其口令,该程序是一个设置用户ID的程序,因此该程序能将用户新口令写入口令文件中(只有超级用户才具有对该文件的写权限)。
Linux下文件权限(一)用户ID和用户组ID的更多相关文章
- linux下文件权限的介绍
linux操作系统下,使用ll查看该目录下所有文件及其文件权限,以下是对文件权限的介绍 d代表的是目录(或称之为文件夹) 红框内的这3个是代表3个组的权限每组都是3个 第一组rwx代表是本用户的权 ...
- Linux下文件权限的设置
文件/目录权限设置命令:chmod 这是Linux系统管理员最常用到的命令之一,它用于改变文件或目录的访问权限.该命令有两种用法: 用包含字母和操作符表达式的文字设定法 ) 其语法格式为:chmod ...
- linux下文件权限更改(转载)
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/qq_33571752/article/d ...
- linux 下 文件权限和文件主
文件与文件夹的权限和所有者 1.chmod -R 755 file 777 含义与来源: 777含义:分别为:所有者.同组用户.其他用户 7的来源:文件有三种操作模式:读4.写2.执行1,分别值为42 ...
- (转载) linux下文件权限设置中的数字表示
chmod ABC file 其中A.B.C各为一个数字,分别表示User.Group.及Other的权限. A.B.C这三个数字如果各自转换成由“0”.“1”组成的二进制数,则二进制数的每一位分别代 ...
- Linux之文件权限、用户管理
世界真美好!
- Linux下文件的权限
一.Linux下查看文件属性 命令为: [root@localhost ~]# ls -al 结果: ls是『list』的意思,重点在显示文件的文件名与相关属性.而选项『-al』则表示列出所有的文件详 ...
- 关于linux下文件的权限问题
今天在linux更新服务中的启动文件时,直接把更新的启动文件拷贝过来执行,报错:can't be execute 后来想了下列出了文件的详细信息中发现拷贝过去的执行文件是-r--r--r--(表示只有 ...
- linux之文件权限+用户权限
chmod 文件权限命令: 文件权限: r是否能查看文件内容 w是否能修改文件的内容,需要与r权限配合使用 只有w的时候vim强制修改文件内容,会导致源文件内容清空 x是否能运行命令或脚本权限,需 ...
随机推荐
- 关于Spring注解@Async引发其他注解失效
概述 在前面一篇文章中,介绍,在一个Bean中注入自己,如果有@Async和@Transaction,如果使用@Autowire注入自身,会报循环依赖,如果使用BeanFactoryAware注入自己 ...
- Spring MVC的handlermapping之BeanNameUrlHandlerMapping初始化
先介绍一下: BeanNameUrlHandlerMapping是基于配置文件的方式; 所有处理器需要在XML文件中,以Bean的形式配置. 缺点:配置繁琐; 如果多个URL对应同一个处理器,那么需要 ...
- DB2开发系列之四——触发器
1.触发器类型 1)BEFORE 触发器:在对表插入或更新之前执行该触发器,允许使用CALL 和 SIGNAL SQL 语句: 2)BEFORE DELETE 触发器:在删除操作之前执行该触发器: 3 ...
- Django--入门篇:下载与项目生成
django作为python web应用开发最火的框架,没有之一,今天就给大家介绍django的一些入门知识. 我们选择pycharm工具,首先得要有django. 1.下载django --pip ...
- Java8学习(4)-Stream流
Stream和Collection的区别是什么 流和集合的区别是什么? 粗略地说, 集合和流之间的差异就在于什么时候进行计算.集合是一个内存中的数据结构,它包含数据结构中目前所有的值--集合中的每个元 ...
- 敏捷冲刺每日报告——Day4
1.情况简述 Alpha阶段第一次Scrum Meeting 敏捷开发起止时间 2017.10.28 00:00 -- 2017.10.29 00:00 讨论时间地点 2017.10.28晚9:30, ...
- Beta开始前准备
Beta准备 1. 讨论组长是否重选的议题和结论. 经过讨论,我们认为,经过一段时间的磨合,现任组长是不需要更换的. 2. 下一阶段需要改进完善的功能. 增加关于征信的功能,贴近选题主题 美化界面,尽 ...
- 第二十八条:利用有限制通配符来提升API的灵活性
如第二十五条所述,参数化类型是不可变的.类型Type1和Type2而言,不管Type1与Type2的关系,List<Type1>既不是List<Type2>的子类型,也不是也不 ...
- vue 的模板编译—ast(抽象语法树) 详解与实现
首先AST是什么? 在计算机科学中,抽象语法树(abstract syntax tree或者缩写为AST),或者语法树(syntax tree),是源代码的抽象语法结构的树状表现形式,这里特指编程语言 ...
- nyoj 正数性质
整数性质 时间限制:500 ms | 内存限制:65535 KB 难度:1 描述 我们知道,在数学中,对于任意两个正整数a和b,必定存在一对整数s.t使得sa+tb=gcd(a,b). 输 ...