最近在看APUE,看到3.14节,fcntl的时候
#include <fcntl.h>
int fcntl(int fd, int cmd, .../* int arg */);
出错返回-1,具体返回值依赖于cmd参数。
其中提到一个CMD,FD_GETFD FD_SETFD所返回的文件描述符标志FD_CLOEXEC(当前的文件描述符标志只有这一个)
最8.10节 函数子进程调用exec是对打开文件的处理。
对于fork一个进程,子进程与父进程共享一些数据,包裹已打开的文件描述符(子进程复制了所有父进程打开的文件描述符)
fork后,经常地,会调用exec程序,执行另外的一些任务,将子进程的正文段、数据段、堆、栈等替换为新的程序内容。此时,若设置了FD_CLOEXEC标志,子进程对父进程的文件描述符副本,被关闭。否则,将不关闭。
默认情况下,子进程调用exec并不关闭这些文件描述符副本,除非显式地用fcntl(fd,FD_SETFL,1)进行设置。
对于目录流,POSIX.1明确要求将此标志设置为1,通常,由opendir函数调用fcntl实现。

4.14节:
与一个进程关联的ID有6个。
real uid/real gid < login时从登录文件取出,显然,你用什么用户登录系统,实际用户就是谁。
effective uid/effective gid/supplementary group IDs.
saved set-user-ID/saved set-group-ID 被exec函数保存的saved set-user-ID/saved set-group-ID。

当一个程序被加载到内存执行的时候,通常用的是exec函数中的一个。
通常情况下,real uid与effective uid是相同的,你以什么身份执行一个程序,这个进程就属于谁这个相当容易理解。
但是:当 set-user-ID位被设置,也就是文件权限位第三位是s的时候,exec将会:把进程的effective user id 设置为 文件所有者ID。
这个时候,如果不属于当前用户的文件被执行,其effective user id = 文件所有者ID。
同时,exec还会将此文件所有者ID进行保存,所以,才叫 saved set-user-id;
那么,当执行一个具有set-user-id位的程序的时候,进程的real user id 与 effective user id 是不一定相同的。

我们可以用一个小程序来验证是否属实。
这个程序打印 程序运行时候的 real user ID与effective user ID。
#include <stdio.h>
#include <unistd.h>
int
main(int argc, char *argv[])
{
puts("I am child process");
printf("userId=%d,euserId=%d\n",getuid(),geteuid());
return 0;
}

同时将其权限设置为 -rwsr-xr-x 中的's'就是saved-user-Id,当执行此程序时将以超级用户权限执行。要想验证很简单。
编译后执行他。获得输出:
I am child process
userId=500,euserId=0
-----------
同时,我们可以在程序中调用 int setuid (uid_t newuid) 函数来更改进程的real user id, effective user id;
但是我们必须明白:
1、只有root进程可以更改 real user id , saved set-user-id。
2、当root进程调用setuid函数时 real user id , effective user id , saved-user-id 都被设置为newuid;
3、如果一个不具有root权限的进程试图调用此函数,会出现什么呢?
如果 newuid == real user id or newuid == saved set-user-id
那么进程的 uid = newuid。
不然,出错。
同时,任何时候,进程都可以用setuid函数将,进程UID设置为:real user id 或者 saved set-user-id;

我们可以用 getuid() geteuid() 函数获取 real user id 和 effective user id,但我们无法用函数获得 save set-user-id;

转载于:https://www.cnblogs.com/dieangel/p/5616616.html

关于 Unix 用户权限及进程权限及 Saved set-user-id相关推荐

  1. linux 用户身份与进程权限

    基本概念 用户 对于支持多任务的 Linux 系统来说,用户就是获取资源的凭证. 权限 权限用来控制用户对计算机资源(CPU.内存.文件等)的访问,一般会分为认证和授权两步.比如用户先经过认证机制(a ...

  2. chmod 是一条在Unix系统中用于控制用户对文件的权限的命令

    chmod 是一条在Unix系统中用于控制用户对文件的权限的命令(change mode单词前缀的组合)和函数.只有文件所有者和超级用户可以修改文件或目录的权限.可以使用绝对模式,符号模式指定文件的权 ...

  3. linux 用户文件字段解释,0220自学Linux_逻辑理解用户进程权限相关+理解文件内各字段(passwd,shadow,group)(示例代码)...

    11 内核是真正意义上的操作系统 库有动态库也有静态库,Linux的动态库是.so后缀的,也称为共享库 库是不能够独立运行的,只能被调用 Window的动态库是.dll后缀的 我们平时所谓的安装操作系 ...

  4. (莱昂氏unix源代码分析导读-46)权限、管道

                                    by cszhao1980  1.    文件与权限控制 进程u结构中,身份相关的信息有: 0420: char u_uid; /* e ...

  5. 用户身份与文件的权限(普通权限、特殊权限、隐藏权限和文件控制列表ACL)

    用户身份 root用户是存在于所有类UNIX操作系统中的超级用户,它拥有最高的系统所有权.root用户的用户身份号码UID为0,UID相当于用户的身份证号码一样,具有唯一性.管理员用户(超级用户)UI ...

  6. linux下测试权限,Linux下进程权限分析

    在linux下,关于文件权限,大部分人接触比较多,也比较熟悉了解.但是对进程权限一般知之甚少.本文总结一下linux系统下进程权限问题和现象. 需要强调的是,本文是linux系统下讨论,因为linux ...

  7. Linux文件管理、标准I/O重定向和管道以及Linux用户、组和权限知识总结

    一.文件管理 1.1.Linux下的文件类型 ● -  普通文件 ● d 目录文件directory ● b 块设备blocks ● c字符设备character ● |符号链接文件link ●p管道 ...

  8. linux用户、组、权限问题

    用户.组.权限 一.权限:r, w, x 1.文件权限:       r:可读,可以使用类似cat等命令查看文件内容:       w:可写,可以编辑或删除此文件:       x: 可执行,eXac ...

  9. RtlAdjustPrivilege 一行代码提升进程权限

    前言:今天逆向一个非常实用的函数RtlAdjustPrivliege这个函数封装在NtDll.dll中(在所有DLL加载之前加载),被微软严格保密,就是说你在MSDN上查不到关于他的任何信息.先来看看 ...

  10. Linux权限和进程管理、网络配置、任务调度(四)

    目录 一.组管理和权限管理 1.Linux组基本介绍 2.文件/目录所有者 (1)查看文件的所有者 (2)修改文件所有者 3.组的创建 4.文件/目录所在组 (1)查看文件/目录所在组 (2)修改文件 ...

最新文章

  1. 初中计算机指导教师意见,初中信息技术教学计划(推荐3篇)
  2. CO-ACT物料分类账
  3. mysql 案例~mysql主从复制延迟处理(2)
  4. go语言中go+select的理解
  5. html自定义列表 嵌套,HTML 列表
  6. 根据父类id查询所有的父级_031、组函数和子查询
  7. 游戏美术是什么?真的有“钱”景吗?
  8. 万圣节海报设计没有思路?看看这些有趣的万圣节狂欢是如何完成的!
  9. linux上C++编译过程
  10. 确定两个日期范围是否重叠
  11. mysql查询季度数据统计_mysql按年度、季度、月度、周、日SQL统计查询代码
  12. 3des base64 java_java和c++中的DES\3DES\Base64
  13. 软件测试记录包括哪些,bug记录里通常包括哪些内容?
  14. 〖Python 数据库开发实战 - MySQL篇②〗- 一文通解关系型数据库与非关系型数据库
  15. Error launching IDEA
  16. 【思维导图】LAMPer技能树
  17. NUnit 入门知识
  18. window11无法启动您的相机,0xA00F429F<WindowShowFailed>(OxC00D36BB)
  19. Firefox 扩展插件
  20. 利用OpencvSharp计算工件移动后,机器人旋转中心(抓取位置)

热门文章

  1. 一个MYSQL PDO相对完整且功能强大的封装类
  2. 字符编码(1)——Unicode,utf-8
  3. 瀑布流式网页翻页爬取
  4. SOTA来啦!BERT又又又又又又魔改了!DeBERTa登顶GLUE~
  5. 【面试】不容错过的12个深度学习面试问题
  6. 值得拥有的手绘风格画图工具
  7. 每日算法系列【LeetCode 1006】笨阶乘
  8. leetcode—19.二叉树遍历相关题目leetcode总结
  9. python—IFrame:在jupyter notebook中展示某个网页的情况
  10. 【转载】Python中numpy 数组的切片操作