最近在看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;

关于 Unix 用户权限及进程权限及 Saved set-user-id的更多相关文章

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

    在学习 Linux 系统权限相关的主题时,我们首先关注的基本都是文件的 ugo 权限.ugo 权限信息是文件的属性,它指明了用户与文件之间的关系.但是真正操作文件的却是进程,也就是说用户所拥有的文件访 ...

  2. UNIX环境编程学习笔记(7)——文件I/O之文件访问权限与进程访问控制

    lienhua342014-09-02 1 文件的设置用户 ID位 和设置组 ID位 与进程相关联的 ID 如下表所示, 表 1: 与进程相关联的用户 ID 和组 ID 实际用户 ID 我们实际上是谁 ...

  3. linux下进程权限分析

    转自http://blog.chinaunix.net/uid-27105712-id-3349522.html 在linux下,关于文件权限,大部分人接触比较多,也比较熟悉了解.但是对进程权限一般知 ...

  4. 网卡配置文件详解 用户管理与文件权限篇 文件与目录权限 软连接 tar解压命令 killall命令 linux防火墙 dns解析设置 计划任务crond服务 软件包安装 阿里云 yum源 安装

    Linux系统基础优化及常用命令 Linux基础系统优化 引言没有,只有一张图. Linux的网络功能相当强悍,一时之间我们无法了解所有的网络命令,在配置服务器基础环境时,先了解下网络参数设定命令. ...

  5. Windows下提升进程权限

    windows的每个用户登录系统后,系统会产生一个访问令牌(access token) ,其中关联了当前用户的权限信息,用户登录后创建的每一个进程都含有用户access token的拷贝,当进程试图执 ...

  6. linux概念之用户,组及权限

    Linux 是一个多用户.多任务的操作系统:我们应该了解单用户多任务和多用户多任务的概念 单用户多任务一个beinan用户,为了完成工作,执行了几个任务:当然beinan这个用户,其它的人还能以远程登 ...

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

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

  8. Linux入门:增加用户,并赋予权限

    一.增加用户 1.增加用户,并指定主目录 # useradd –d /usr/sam -m sam此命令创建了一个用户sam,其中-d和-m选项用来为登录名sam产生一个主目录/usr/sam(/us ...

  9. linux上如何让other用户访问没有other权限的目录

    目前遇到一个问题,一个other用户要访问一个目录,他需要在这个目录下创建文件,因此这个目录需要一个写权限,于是就给了这个目录777的权限,这样这个权限有点太大了,很容易出现安全问题,那我们应该怎么办 ...

随机推荐

  1. Linux命令基本格式及目录处理命令

    命令提示符 [root@localhost ~]# root:当前登录用户 localhost:主机名 ~:当前所在的目录,此处为"家"目录 #:root超级用户的提示符,如果是普 ...

  2. 在代码中调用gdb

    转载:http://blog.csdn.net/hanchaoman/article/details/5583457 在SIGSEGV的handler中调用gdb, 命令gdb [exec file] ...

  3. 凯撒密码加密C语言简单实现

    凯撒加密(Julius Caesar)该方法把一条消息中的每个字母用字母表中固定距离之后的那个字母代替.(如果超越了字母Z,会绕道字母表的起始位置.例如,如果每个字母都用字母表中两个位置之后的字母代替 ...

  4. XAF响应式布局皮肤界面展示

    XAF为了对手机.平板电脑的支持,增加了新的响应式布局皮肤支持,这个功能已经出来很久了,对于平板电脑.PC的支持已经很不错了,对于手机的界面还不是很完美. 本篇展示一下当前的效果,让有需要的同学.还没 ...

  5. jquery总结05-常用事件03-键盘事件

    键盘事件 .keydown() 键盘按下触发,返回的的是键盘按键代码 .keyup() 键盘松手触发,返回的是键盘按键代码 .keypress() 键盘按下触发,返回的是敲击的字符的ASCII码

  6. Java开发高薪之路__大纲篇

    本人小白,现对java开发做出以下总结,内容将从初级开始,逐步完善与摸索. 基础篇 网页篇 Android篇 高级建设篇 数据篇 系统篇

  7. JavaEE开发环境搭建(1)---(jdk的安装)

    ----------我是前言---------- 有时候从网上找资料真的是一件很开(dan)心(teng)的事情, 因为很多你想要了解的东西总是很巧妙的被略去了... 或者... 根本没有... 真是 ...

  8. Security » Authentication » Identity介绍

    Introduction to Identity¶ By Pranav Rastogi, Rick Anderson, Tom Dykstra, Jon Galloway and Erik Reita ...

  9. java的concurrent用法详解

    我们都知道,在JDK1.5之前,Java中要进行业务并发时,通常需要有程序员独立完成代码实现,当然也有一些开源的框架提供了这些功能,但是这些依然没有JDK自带的功能使用起来方便.而当针对高质量Java ...

  10. Linux系统资源监控命令

    转自http://www.51testing.com/html/16/271416-149128.html 衡量CPU性能的指标: 1,用户使用CPU的情况:CPU运行常规用户进程CPU运行niced ...