1. 实际用户ID和实际组ID:标示了我们究竟是谁,这两个字段在登录时取自口令文件中的登录项
  2. 有效用户ID和有效组ID以及附属组ID:决定了我们的文件的访问权限(通常有效用户ID等于实际用户ID,有效组ID等于实际组ID)
  3. 保存的设置用户ID和保存的设置组ID:在一个程序执行时包含了有效用户ID和有效组ID的副本

  针对可执行程序文件,进程通常有效用户ID等于实际用户ID,有效组ID等于实际组ID,但可以在文件模式字st_mode中设置一个特殊标志(当执行次文件时,将其进程的有效用户ID设置为文件所有者的用户ID(st_uid),将其进程的有效组ID设置为文件所有者的组ID(st_gid))

文件访问权限

  在st_mode中包含文件的类型(4位);set_uid,set_gid,黏着位(3位);访问权限(9位)

S_IFMT           文件类型的位遮罩
S_IFSOCK         socket
S_IFLNK          符号链接(symbolic link)
S_IFREG          一般文件
S_IFBLK          区块装置(block device)
S_IFDIR          目录
S_IFCHR          字符装置(character device)
S_IFIFO          先进先出(fifo)
S_ISUID          文件的(set user-id on execution)位
S_ISGID          文件的(set group-id on execution)位
S_ISVTX          文件的sticky位
S_IRWXU            文件所有者的遮罩值(即所有权限值)
S_IRUSR            文件所有者具可读取权限
S_IWUSR            文件所有者具可写入权限
S_IXUSR            文件所有者具可执行权限
S_IRWXG            用户组的遮罩值(即所有权限值)
S_IRGRP            用户组具可读取权限
S_IWGRP            用户组具可写入权限
S_IXGRP            用户组具可执行权限
S_IRWXO            其他用户的遮罩值(即所有权限值)
S_IROTH            其他用户具可读取权限
S_IWOTH            其他用户具可写入权限
S_IXOTH            其他用户具可执行权限
  1. 当用名字打开任意一类型文件时,对该名字中包含的每一个目录包括他可能隐含的当前工作目录都应该具有执行权限位(即搜索位:搜索该目录,寻找特定的文件名)
  2. open一个文件O_TRUNC标志时,必须对该目录有些权限
  3. 在目录创建新文件时必须有目录的写权限和执行权限
  4. 删除文件时必须有目录的写权限和执行权限,对文件本身不需有读写权限
  5. exec系列函数中任何一个执行某个文件都必须对该文件有执行权限,该文件必须是一个普通文件

unix内核执行权限测试

  1. 如果当前进程的有效用户id为0(超级用户),允许访问
  2. 在当前进程的有效用户id等于文件所有者ID(即进程拥有该文件),如果相应的用户访问权限位(解释:如果当前进程为读访问而打开文件,那么用户读权限位必须设置1;如果当前进程为写访问而打开文件,那么用户写权限位必须设置1)已设置,那就允许访问,否则拒绝访问(即:如果当前进程拥有某个ipc对象,那么访问权的授予与拒绝只依赖用户访问权限——组访问权限不会考虑,类似,如果当前进程不拥有该ipic对象,但它属于某个合适的组,那么访问权限的授予与拒绝只依赖于组访问权限——其他用户访问权限绝不会考虑)
  3. 在当前进程的有效组id或它的某个辅助组id等于该ipc对象的组id的前提下,如果相应的组id访问权限位已设置,那么允许访问,否则拒绝访问
  4. 如果相应的其他用户访问相应的权限位已设置,那么就允许访问,否则拒绝访问

黏着位

  早期:

  如果一个可执行程序文件的黏着位被设置了,那么当程序第一次被执行时,当期终止时,程序正文部分的一个副本仍被保留在交换分区(程序的正文部分通常是机器指令),这使得下次程序执行时能较快的装入内存。愿意:在unix系统中,文件的各块数据是被随机存放的,相比较而言,交换分区被作为一个连续的文件来处理,在系统自举前,文件的正文部分总是在交换分区中。

  现在:针对目录设置黏着位

  如果对一个目录设置黏着位,只有对该目录写权限的的用户并且满足下列条件之一,能删除或重命名该目录下的文件:

  1. 拥有此文件
  2. 拥有此目录
  3. 是超级用户

用户id,组id和文件访问权限的更多相关文章

  1. [apue] linux 文件访问权限那些事儿

    前言 说到 linux 上的文件权限,其实我们在说两个实体,一是文件,二是进程.一个进程能不能访问一个文件,其实由三部分内容决定: 文件的所有者.所在的组: 文件对所有者.组用户.其它用户设置的权限访 ...

  2. 文件访问权限:更改用户ID

    本文来探讨一下通过更改用户ID来获取合适的文件访问权限.由于更改组ID的规则与用户ID相同,我们在这里只探讨用户ID. 纸上得来终觉浅 先了解以下几个基本知识: 用户ID包括:实际用户ID.有效用户I ...

  3. linux用户(组)及文件权限说明

    写在前面: 在liunx系统中一切都是文件(文件夹和外设是特殊的文件),如果有可能尽量使用文本文件,文本文件是人.机都能够理解的文件.linux的用户(组)和权限完美的解决了linux系统的安全问题. ...

  4. Linux下进程的文件访问权限

    本文转自 http://blog.csdn.net/chosen0ne/article/details/10581883 对进程校验文件访问权限包括两个部分,一是确定进程的角色(属于哪个用户或者组), ...

  5. 《UNIX环境高级编程》笔记--文件访问权限和新文件、目录所有权

    1.与进程关联的用户ID和组ID 与一个进程关联的ID有一下几个: 实际用户ID和实际组ID标识我们究竟是谁.通常在一个会话间值是不会改变的,但是超级用户进程有方法改变 他们,在以后的进程控制中会进行 ...

  6. UNIX环境编程学习笔记(9)——文件I/O之文件访问权限的屏蔽和更改

    lienhua342014-09-10 1 文件访问权限 在文件访问权限和进程访问控制中,我们已经讲述过文件访问权限位,为了方便,我们重新列在下面, 表 1: 文件的 9 个访问权限位  st_mod ...

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

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

  8. [Z] Linux下进程的文件访问权限

    原文链接:http://blog.csdn.net/chosen0ne/article/details/10581883 对进程校验文件访问权限包括两个部分,一是确定进程的角色(属于哪个用户或者组), ...

  9. Linux的文件访问权限及修改权限命令chmod

    http://www.linuxso.com/command/chmod.html Linux的文件访问权限及修改权限命令chmod Mxx000 Mxx000 人赞同了该文章 Linux的文件访问权 ...

随机推荐

  1. MySQL简单的查询语句

    1.查询特定列:select 列名 from 表名:(必须先进入数据库)或者 select 列名 from 数据库.表名: 2.查询多个列:select 列1,列2,... from 表名: 3.除去 ...

  2. js中获取时间new Date()详细介绍

    var myDate = new Date();myDate.getYear(); //获取当前年份(2位)myDate.getFullYear(); //获取完整的年份(4位,1970-????)m ...

  3. ACE + TAO工程中的Messenger启动过程

    1.启动NameService服务 F:\ACESource\ACE_wrappers\TAO\orbsvcs\Naming_Service>tao_cosnaming.exe -o F:\AC ...

  4. Shell 有类型变量

    1.通过 declare 和 typeset 命令 declare 和 typeset 两者等价 declare 和 typeset 都是用来定义变量类型的 下面以 declare 进行总结 2.de ...

  5. .net 服务因为GC时遇到的问题和解决办法

    1.问题: .net单一服务中,大量的请求访问后台服务,多线程处理请求,但每个线程都可能出现超时的现象.记录超时日志显示,超时可能在序列化时,Socket异步发送AsyncSend数据时,普通业务处理 ...

  6. [转载] java多线程总结(三)

    转载自: http://www.cnblogs.com/lwbqqyumidi/p/3821389.html 作者:Windstep 本文主要接着前面多线程的两篇文章总结Java多线程中的线程安全问题 ...

  7. python—函数

    # 函数:1.减少重复代码:# 2.使程序变的可扩展# 3.使程序变的易维护# 永远只能且返回一个值#def 定义内容# a,b = 5,8# c = a** b# print(c)## def ca ...

  8. JAVA对mysql的基本操作

    一.了解几个概念(了解) 1.DriverManager 1)必须知道它是管理数据库的所有驱动程序 2)它的所有方法都是静态的,其中最重要的是getConnection()方法,我们可以通过它获取一个 ...

  9. 【Java】关于项目启动大请求量高负载时如何确保db等资源不出错的问题

      如果一个项目启动时(单机), 瞬间来了1000个访问, 如何确保db等资源不会压垮呢? 现在想想我当时回答的并不好, 而现在看公司框架才发现其实有针对于这一块做过专门的优化的.下面就来分享下公司关 ...

  10. 使用sed在匹配行之后增加一行数据

    需求:在原来大量的shell文件中,给出了错误信息打印,现在要求打印错误后直接退出脚本. if [ $? -eq 0 ];then echo_green "done!" else ...