zoukankan      html  css  js  c++  java
  • Linux系统中程序进程对文件的访问权限

    对于一个进程,它每次打开、创建或者删除一个文件时,内核就要对该进程进行文件访问权限测试,而在对具体某个文件进行测试时,还需要测试其对目录(也就是文件路径)进行权限测试。比如要修改/usr/include/stdio.h,需要对/、/usr和/usr/include这三个目录进行权限测试,保证有对这三个目录的执行权限(目录索引需要执行权限,读权限只是显示)。

    进行访问权限测试的过程如下【涉及文件所有者(st_uid和st_gid)和进程的有效ID(有效用户ID及有效组ID)】:

    (1)若进程有效用户ID为0(超级用户),则有所有权限

    (2)若进程的有效用户ID=文件所有者ID,表明该进程拥有该文件,此时有适当的访问权限(在访问时用O_RDONLY,O_WRONLY等标识,文件所有者的访问权限被设置),则允许访问。

    (3)若进程的有效组ID 等于文件的组ID,同2.

    (4)若其他用户适当的访问权限被设置,也允许访问。

    但是这些除了超级用户外,都是通过设置访问权限位去改变进程对文件的访问权限,比如sudo gedit /usr/include/stdio.h,本身如果单独使用gedit /usr/include/stdio.h是只读,不能进行编辑,但加上sudo后,就改变了访问权限位,拥有了文件修改权限。

    设置文件访问权限位相当于一个壳,通过给进程加壳而改变了进程的权限范围。

    在Linux中,access函数可以进行去壳测试,查看进程本来面目的权限,原型为:int access ( const char *path, int mode);就是看path文件是否有mode权限。

  • 相关阅读:
    初始化ArrayList的两种方法
    MySQL最大连接数设置
    页面按钮的语义和可访问性
    H5+App开发框架汇总
    JS使用模板快速填充HTML控件数据
    Meta标签中的format-detection属性及含义
    java中@Qualifier("string")是什么用法
    MySQL 当记录不存在时insert,当记录存在时update
    美国40岁以上的程序员在干啥
    老程序员都去哪了?
  • 原文地址:https://www.cnblogs.com/SaraMoring/p/14520231.html
Copyright © 2011-2022 走看看