权限解析

一、文件权限

用户的创建的每个文件,都有自己特定的属性信息,比如文件类型,文件的权限,文件的所有者和所属组,以及文件的修改日期等属性组成。

文件的权限即是指文件本身赋予了用户什么样的权力,也就是说用户能不能打开文件,能不能修改文件这些属性都是由文件权限标记和赋予的。文件的权限一般包括读、写、执行三种权限。读也就是用户有读文件的能力,八进制表示为4;写表示用户有修改文件的能力,八进制表示为2;执行权限对目录而言是可以进入此目录,对文件而言是可执行文件,八进制表示为1;

r(readable) w(writable) x(eXcuable) u(owner) g(group) o(other) a(all)
执行 所有者 所属组 其他人(来宾) 所有人
4 2 1
000 001 010 011 100 101 110 111
--- --x -w- -wx r-- r-x rw- rwx
0 1 2 3 4 5 6 7
640:rw- r-- ---    7:--- --- rwx 755:rwx r-x r-x       0:--- --- ---

文件

r: 可使用文件查看类工具获取其内容

w: 可修改其内容

x: 可以把此文件提请内核启动为一个进程

目录

r: 可以使用ls 查看此目录中文件列表

w: 可在此目录中创建文件,也可删除此目录中的文件

x: 可以使用ls -l 查看此目录中文件列表,可以cd 进入此目录

X:递归修改目录执行权限时,只给所有的目录x 权限,而不给文件x执行权限,但是如果文件中有任何一个人有执行权限,则文件将会全部加上执行权限

目录若只有读写权限,只能查看目录文件列表,不能访问文件和cd进目录(查看,删除),如果只有执行权限,可以cd进目录,但是不能ls列出文件列表,可以执行目录中的文件,执行是基础去权限,若知道文件名,可以直接访问目录中的文件;写权限,需配合x权限才能生效。

当用户需要访问文件时,按照匹配顺序依次匹配,如果普通用户文件的所有者和所属组其中一个有执行权限,-o没有-x权限,尽管root用户不属于该文件所有者和所有组,root用户依然可以借用-X执行权限。

chmod 修改文件权限

-R: 递归修改权限

chmod [OPTION]... MODE[,MODE]... FILE...

MODE:

修改一类用户的所有权限:

u= g= o= ug= a= u=,g=

修改一类用户某位或某些位权限

u+ u- g+ g- o+ o- a+ a- + -

chmod [OPTION]... --reference=RFILE FILE...

参考RFILE 文件的权限,将FILE 的修改为同RFILE

若用户没有任何权限,则设置权限为空,赋值权限也可直接赋八进制数字

文件权限设置:

chmod u+wx,g-r,o=rx file

chmod -R g+rwX /testdir

chmod 600 file


用户新建文件和目录时一般都会有默认的权限设置,比如root管理员用户创建文件的默认权限为644,创建目录的默认权限为755,普通用户的创建文件的默认权限为664,创建目录的权限为775,因为root是管理员用户,所以为了安全,通常都是只有文件所有者才具有写的权限。文件的默认权限是由umask掩码决定的,修改文件的umask掩码,即可修改文件创建的默认权限。

普通用户umask值为002,root管理员用户的的umask值为022,umask设置在全局文件 /etc/bashrc中或则用户设置文件~/.bashrc中。

umask掩码:从777或666中,将文件对应的权限位去掉,从而得出默认权限

umask值:可以用来保留在创建文件权限

新建文件或目录的权限为: 666-umask或777-umask

如果所得结果某位存在执行(奇数)权限,则将其权限+1

umask值得计算方法为

文件的完整权限666或777与umask值二进制计数的每一位比较,当umask的二进制位为0时,文件的权限二进制位保留,当umask二进制位为1时,文件的权限二进制位置为0,计算之后的最终权限即为文件的默认权限。
    umask: 查看umask值

umask #: 设定umask值

umask 002

umask –S 模式方式显示

二、文件的三种特殊权限

    Suid 和 guid 的特殊权限及sticky位

suid 当在一个二进制文件上应用了suid后,那么任何人在执行该命令时临时拥有命令拥有人的权限,只能应 用在可执行文件上。

u+s

sgid 当在一个二进制文件上应用了sgid后,那么任何人在执行该命令时临时拥有命令拥有组的权限,只能应用在可执行文件上,如果在一个目录上应用了sgid后,那么任何人在该目录创建文件/目录的拥有组会继承目录本身的组

g+s

Sticky 如果在一个目录上应用了sticky权限后,那么该目录中的文件仅文件拥有人和root用户能删除

o+t

进程和文件都有属主和属组,而属主和属组的判定有以下几种情况:

(1) 任何一个可执行程序文件能不能启动为进程, 取决发起者对程序文件是否拥有执行权限

(2) 启动为进程之后,其进程的属主为发起者, 进程的属组为发起者所属的组

(3) 进程访问文件时的权限,取决于进程的发起者

(a) 进程的发起者,同文件的属主:则应用文件属主权限

(b) 进程的发起者,属于文件属组;则应用文件属组权限

(c) 应用文件‘其他’权限

可执行文件上的SUID权限

任何一个可执行程序文件能不能启动为进程:取决发起者对程序文件是否拥有执行权限

启动为进程之后,其进程的属主为原程序文件的属主

SUID 只对二进制可执行程序有效;SUID 设置在目录上无意义

权限设定:

chmod u+s FILE...

chmod u-s FILE...

可执行文件上的SGID权限

任何一个可执行程序文件能不能启动为进程:取决发起者对程序文件是否拥有执行权限

启动为进程之后,其进程的属主为原程序文件的属主

权限设定:

chmod g+s FILE...

chmod g-s FILE...

 目录上的SGID权限

默认情况下,用户创建文件时,其属组为此用户所属的主组

一旦某目录被设定了SGID ,则对此目录有写权限的用户在此目录中创建的文件所属的组为此目录的属组

权限设定:

chmod g+s DIR...

chmod g-s DIR...

Sticky位

具有写权限的目录通常用户可以删除该目录中的任何文件,不管该文件的权限或拥有权

在目录设置Sticky 位,只有文件的所有者或root可以删除该文件

sticky设置在文件上无意义

权限设定:

chmod o+t DIR...

chmod o-t DIR...

八进制表示权限位:

SUID:4 SGID:2 STICKY:1

    权限位映射:

SUID: user, 占据属主的执行权限位

s:属主拥有x 权限

S:属主没有x 权限

SGID: group, 占据属组的执行权限位

s:group 拥有x 权限

S:group 没有x 权限

Sticky: other, 占据other 的执行权限位

t:other 拥有x 权限

T:other 没有x 权限

三、ACL访问控制列表

ACL:Access Control List ,实现灵活的权限管理,即除了文件的所有者,所属组和其它人以外,可以对某一个单独的用户设置访问权限。

ACL权限设置的生效顺序为:所有者,自定义用户,自定义组,其他

getfacl 查看文件的acl属性

setfacl设置文件的acl属性

-m:创建cal

u:用户

g:组

o:其他人

-x:删除acl权限 eg:

-R:递归

-b:清除所有的acl设置

-m:设置mask的值

setfacl -k dir 删除默认ACL 权限

setfacl –b file1 清除所有ACL 权限

getfacl file1 | setfacl --set-file=- file2 复制file1的acl 权限给file2

对passwd文件添加danran用户rwx权限,setfacl -m u:danran:rwx passwd

用户或组的设置必须存在于mask 权限设定范围内才会生效

setfacl -m mask::rx file

--set 选项会把原有的ACL 项都删除,用新的替代,需要注意的是一定要包含UGO 的设置,不能象-m 一样只是添加ACL就可以

ACL设置:

setfacl -M file.acl file|directory 利用编辑好的acl设置文件批量设置acl

setfacl -m g:salesgroup:rw file| directory 创建某组的acl权限

setfacl -m d:u:wang:rx directory 对目录创建默认的acl权限


       setfacl -x u:danran file |dir 删除danran用户的acl权限

ACL文件上的group权限是mask值(自定义用户,自定义组,拥有组的最大权限), 而非传统的组权限。

mask是影响除所有者和other 的之外的人和组的最大权限。

mask 需要与用户的权限进行逻辑与运算后,才能变成有限的权限(Effective Permission)。

通过ACL 赋予目录默认x 权限,目录内文件也不会继承x 权限。

只能删除ACL权限,不能删除默认权限。

备份和恢复ACL

主要的文件操作命令cp 和mv 都支持ACL ,只是cp 命令需要加上-p  参数。但是tar 等常见的备份工具是不会保留目录和文件的ACL 信息

getfacl -R /tmp/dir1 > acl.txt    将tmp/dir1目录下所有文件的权限导入到act.txt文件中保存

setfacl -R -b /tmp/dir1             删除/tmp/dir1目录下所有文件的权限

 setfacl -R --set-file=acl.txt /tmp/dir1       根据act.txt文件中记录的acl权限还原/tmp/dir1目录下所有文件的acl权限

setfacl --restore acl.txt     根据act.txt文件中记录的acl权限还原当前目录下所有文件的acl权限

getfacl -R /tmp/dir1      查看当前目录下所有文件的ACL权限

时间: 2024-10-02 20:02:45

权限解析的相关文章

Java中的访问权限解析

在Java中不同的对象和类拥有不同的访问权限,所以在java中对不同的类和对象进行权限的设置显得尤为重要. java中的权限主要分为四种,public,protect,private,和default在声明类和对象的时候如果没有注明权限则为默认的即(default).下面将对这四种权限仅向简单的解析,部分为网上博主的总结再加上个人总结 1.权限解析Java有四种访问权限, 其中三种有访问权限修饰符,分别为private,public和protected,还有一种不带任何修饰符.private:

SVN权限解析规则详解

最近在做一个操作SVN的Web系统,涉及到了很多东西,包括apache执行命令.配置文件解析等:编码过程中发现svn的权限解析过程和我所了解到的不大相同,在网上查了一些资料,但好像都是怎么配置svn,没有详细讲解权限的生效过程,而我开发系统需要考虑到各种情况,所以我自己通过一部分资料和动手实验总结了下面的svn权限解析规则.如果这些内容不是很全面或者有错误,可以提出来,我也会在后面修改补充. 首先创建一个版本库后,会生成最初的目录结构和基本的配置文件,本文主要分析“authz”文件的内容:我们先

Android6.0执行时权限解析,RxPermissions的使用,自己封装一套权限框架

Android6.0执行时权限解析,RxPermissions的使用.自己封装一套权限框架 在Android6.0中,新添加了一个执行时的权限,我相信非常多人都已经知道了.预计也知道怎么用了,这篇博客非常easy.就是告诉大家怎样去申请执行时权限和RxPermission这个权限框架的使用.同一时候依据现有的技术封装思想,去封装一个自己可用的权限框架,好的,我们继续往下看 一.Android M 执行时权限介绍 关于Android M的更新变化,我就不啰嗦了,有兴趣的能够看下Android M更

Linux的文件与目录权限解析

在Linux中,万事万物皆文件,普通文件是文件,目录是文件,硬件设备也是文件,因此学习了解Linux中的文件非常重要. Linux中有三种文件类型: (1) 普通文件:又分为文本文件和二进制文件 (2) 目录文件:目录文件存储了一组相关文件的位置.大小等与文件有关的信息. (3) 设备文件:I/O设备在Linux中也被看成文件,与普通文件一样处理,这样使文件与设备的操作尽可能统一. 一.Linux文件属性 Linux的文件有很多属性,要查看文件的属性可以用ls -l命令,为了后续的讲解中有操作的

nginx、php-fpm、mysql用户权限解析

这篇文章我们就特别来讲解下,nginx.php-fpm以及mysql运行在各个用户下的配置. 先来做个说明:nginx本身不能处理PHP,它只是个web服务器.当接收到客户端请求后,如果是php请求,则转发给php解释器处理,并把结果返回给客户端.如果是静态页面的话,nginx自身处理,然后把结果返回给客户端. Nginx下php解释器使用最多的就是fastcgi.一般情况nginx把php请求转发给fastcgi管理进程处理,fastcgi管理进程选择cgi子进程进行处理,然后把处理结果返回给

烂泥:nginx、php-fpm、mysql用户权限解析

本文首发于烂泥行天下. 前几天学习了,在nginx下搭建wordpress博客.在<烂泥:使用nginx利用虚拟主机搭建WordPress博客>文章中,我们特别提到了有关程序运行在哪个用户下面. 这篇文章我们就特别来讲解下,nginx.php-fpm以及mysql运行在各个用户下的配置. 先来做个说明:nginx本身不能处理PHP,它只是个web服务器.当接收到客户端请求后,如果是php请求,则转发给php解释器处理,并把结果返回给客户端.如果是静态页面的话,nginx自身处理,然后把结果返回

【转】PHP网站(nginx、php-fpm、mysql) 用户权限解析

这篇文章我们就特别来讲解下,nginx.php-fpm 以及 mysql 运行在各个用户下的配置. 先来做个说明:nginx本身不能处理PHP,它只是个web服务器.当接收到客户端请求后,如果是php请求,则转发给php解释器处理,并把结果返回给客户端.如果是静态页面的话,nginx自身处理,然后把结果返回给客户端. Nginx下php解释器使用最多的就是fastcgi.一般情况nginx把php请求转发给fastcgi(即 php-fpm)管理进程处理,fastcgi管理进程选择cgi子进程进

访问权限PPP(public、private、protected、default)之成员变量、成员变量权限解析

首先,我们需要清楚一下方法是由哪些部分构成的: [权限修饰符列表][别的修饰符列表] 返回值类型 方法名(参数列表){   方法体:} 然后我们需要知道成员变量和成员方法访问有几种情况:1.当前包同一个类  2.当前包里面别的类  3.别的包里别的类  4.自己包继承关系的类  5.从别的包里有继承关系的类 第一步先创建一个别的类的代码,示例: package com.java; public class admin{ //成员变量的访问权限 public int i1 = 10; protec

protect权限解析

用private修饰的成员函数和属性能在类的内部使用,但不能在类的外部使用 用protect修饰的成员函数和属性能在包的内部使用,但不能在包的外部使用(见补充说明) 用public修饰的成员函数和属性能在全局中使用 ----------------------------- 针对第二点,父类对象被protect修饰的属性,在不同包时,不能由父类对象调用,只能靠继承关系实现调用. 版权声明:本文为博主原创文章,未经博主允许不得转载.