文件的权限管理

提问:可执行文件的标准格式是什么?

    Linux下面,目标文件、共享对象文件、可执行文件都是使用ELF文件格式来存储的。程序经过编译之后会输出目标文件,然后经过链接可以产生可执行文件或者共享对象文件。Linux下面使用的ELF文件和Windows操作系统使用的PE文件都是从Unix系统的COFF文件格式演化来的。

我们先来了解一些基本的想法。

首先,最重要的思路是一个程序从人能读懂的格式转换为供操作系统执行的二进制格式之后,代码和数据是分开存放的,之所以这样设计有这么几个原因:

1、程序执行之后,代码和数据可以被映射到不同属性的虚拟内存中。因为代码一般是只读的,而数据是可读可写的;

2、现代CPU有强大的缓存体系。程序和代码分离可以提高程序的局部性,增加缓存命中的概率;

3、还有最重要的一个原因是当有多个程序副本在运行的时候,只读部分可以只在内存中保留一份,这样大大节省了内存。

ELF的定义中,把他们分开存放的地方称为一个 Section ,就是一个段。一个ELF文件中重要的段包括:

.text 段:存储 只读程序    .data 段:存储 已经初始化的全局变量和静态变量

.bss 段:存储 未初始化的全局变量和静态变量,因为这些变量的值为0,所以这个段在文件当中不占据空间

.rodata 段:存储 只读数据,比如字符串常量

下面我们谈一谈文件的权限管理。

一、文件权限

    文件的权限主要针对三类对象进行定义:

owner:  属主, u       group:  属组, g       other:  其他, o

v  每个文件针对每类访问者都定义了三种权限:

r: Readable        w: Writable         x: eXcutable

文件权限的操作

chmod  who所有者  opt选择  per权限  file文件

who :u,g,o,a     opt:+,-,=   o+rwx    per:rwx

a=所有人不给权限,但是对root除了x权限,其他的读写都没影响。

   chgrp sales testfile   改变testfile的属组为sales

v chown root:admins testfile   改变testfile 的属主为root,属组为admins

v chmod u+wx,g-r,o=rx file   增加file的属主权限wx,属组减少x;其他人改为rx

v chmod -R g+rwX /testdir   

           改变/testdir权限,属主和其他人都没有读的权限,属组都有权限但是对目录下文件没修改权限

v chmod 600 file        改变file的权限为600rw- — —

v chown mage testfile  改变testfile的属主为mage

1.1 文件

r:可读取此文件的实际内容,如读取文本文件文字内容等

w:可以编辑、新增或是修改该文件的内容(但不含删除该文件)

x:该文件具有可以被系统执行的权限

1.2 目录

r表示具有读取目录结构列表的权限,所以当你具有r读取一个目录的权限,表示你可以查询该目录下的文件名    据,可以用ls将目录下的内容列表显示出来。

w具有更改该目录结构列表的权限:

     新建新的文件与目录;删除已经存在的文件和目录(不论该文件的权限如何)

     将已经存在的文件或目录进行重命名;转移该目录内的文件、目录位置。

x表示用户能够进入该目录成为工作目录。

X目录加执行权限,而不给目录下的文件加执行权限(考虑文件容易感染病毒,故一般不加执行文件,以保证安全),但文件x权限的话,目录下文件也加了执行权限  

   如果没有给目录执行权限,用户就不能读取目录下文件的内容。

   没有读权限,看不了,就不能用tab补全

   执行权限是一个基本的权限 :能不能删除目录下的文件目录下的文件的权限无关,只与目录执行权限有关这也是只读文件不能够被修改,但可以被删除(目录的权限)

    这儿理解cp –f 删除之后重新建立文件这时候的文件的所有者,所以组可能会改变

可以用逗号隔开两个设置

   可以写文件在以后的企业操作中也有,不一定要能

二、新建文件和目录的默认权限

    umask掩码  可以用来保留在创建文件权限

   默认新建文件的最大权限666目录的最大权限是777  umask+default =dir777 [file666]

非特权用户的umask022rootumask002

 rootumask一般普通用户偏大,则创建的文件权限偏小那么其他用户访问root里的文件的权限就会小得多

umask配置文件 /etc/.bashrc ~/.bashrc最后的一行加上umask  #(权限值)

     文件默认权限=666-umask=有奇数+1   目录的默认权限=777-umask

   umask u=rwxg=ro= 直接该边创建的文件目录权限

 umask –p >> ~/.bashrc 直接umask至追加到配置文件中

 

三、Linux文件系统的特殊权限

SUIDSGIDSticky(粘滞键)

SUDSGID二进制程序,不是文本,file查看)当普通用户去执行一个SUID权限的二进制程序文件,他将 

    临时切换所有者身份root,(u+ssuid默认权限对应的数字为4

    当普通用户去执行一个SGID权限的二进制程序文件,他将临时加入所有组中,有对应的权限   sgid默认权限对应的数字是2

    sgid权限对目录的作用:新建文件的所属组自动继承目录的所属组。

    如果cat的路径/sbin/cat  chmod u+s 那么cat就相当管理运行的,就可以看原本没有权限的文件。

3.1 安全上下文

前提进程有属主和属组,文件有属主和属

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

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

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

    a进程的发起者,同文件的属主,

   b进程的发起者,属于文件属组;

   c应用文件其他权限

3.2 可执行文件上SUID的权限

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

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

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

   权限设定:chmod u+s FILE…   chmod u+s FTLE…   

3.3 可执行文件SGID权限

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

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

   权限设定:chmod g+s FILE…    chmod g-s FILE…

3.4目录上的SGID权限

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

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

v  通常用于创建一个协作目录

v  权限设定:chmod g+s DIR…    ;    chmod g-s DIR…

3.5 Sticky

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

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

sticky设置在文件上无意义

  作用于目录(文件夹chmod o+t dir:只能删除目录下自己创建的文件

     就算别人创建的文件others有执行权限,也删除不了

3.6设定文件的特定属性

chattr  +i   file 固定文件不能删除修改改名,只能读取,cp之后属性消失

chattr  +a  file  只能追加内容至文件,不能修改删除

 lsattr  a  显示特定属性

四、ACL访问控制列表

    ACLAccess Control List实现灵活的权限管理,给不同的用户不同的权限

       除了文件的所有者所属组和其他人,可以对更多的用户设置权限

CentOS7.0默认创建的xfs ext4文件系统有ACL功能

CentOS7.X之前的版本,默认手工创建的ext4文件系统无ACL功能,需要用下面的来手工添加

            tune2fs –o acl /dev/sdb1       mount –o acl /dev/sdb1 /mnt

ACL的生效顺序:所有者,自定义用户,自定义组,其他人

    rm  urwX  只对目录有执行权限,对的文件没有执行权限 

   mask 只影响除了所有other之外的人和组的最大权限mask需要与用户的权限进行逻辑与运算之后,才能变成有效的权限Effective Permission

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

setfacl –m mask::r f1 这样定义的文件mask就相当于一个限制器任何人所拥有的权限不能超过mask即只读权限。任何人:除所有者和other之外的人和组

   ——set 选项会把原有的ACL 项都删除,用新的替代,需要注意的是一定要包含UGO 的设置,不能象-m 一样只是添加ACL 就可以   如:setfacl – -set u: : rw,u : wang:rw, g: :r,o ::- file1

getfacl file | dir  查看文件或目录的特殊权限:flags

4.1 setfacl设置ACL

setfacl –m u:wang:rwx file | dir  指定用户文件或目录的权限

 setfacl -Rm g:sales:rwX directory  针对文件目录加X,目录下的文件x

 setfacl -M file.acl file|directory

 setfacl -m g:salesgroup:rw file| directory  指定用户文件或目录的权限

 setfacl -m d:u:wang:rx directory

 setfacl -x u:wang file |directory  删除使用者使用文件或目录的记录

setfcal –X file.acl dir

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

getfacl 可以看到特殊权限:flags

base  ACL 不能删除

v  setfacl -k dir  删除默认ACL 权限

v  setfacl -b file1 清除所有ACL 权限

getfacl file 1 | setfacl –set-file=- file2  复制file1aclfile2  

4.2备份和恢复acl

  主要的文件操作命令cpmv都支持acl,但cp命令需要加上-p参数。但是tar等常见的备份工具是不会保留目录和文件的ACL信息
#getfacl -R /tmp/dir1 > acl.txt   /tmp/dir1acl权限的文件覆盖到acl.txt文件中  

#setfacl -R -b /tmp/dir1         清除/tmp/dir1所有有acl权限 文件    

#setfacl -R –set-file=acl.txt  /tmp/dir1   重新设置/tmp/dir1下的文件有acl权限   

#setfacl –restore acl.txt          重新保存acl.txt权限文件

#getfacl -R /tmp/dir1             查看/tmp/dir1下的acl权限的文件。

4.3 整理:权限和命令之间的关系

1.用户进入某目录成为可工作目录基本权限是什么?

可以使用的命令:例如cd等切换工作目录命令

目录所需的权限:用户对这个目录至少需要x权限

额外要求:用户想在这个目录内使用ls查阅文件名,则用户对此目录还需要r权限

2.用户在某一个目录内读取一个文件的基本权限是什么?

可使用的命令:例如catlesshead

目录所需权限:用户这个目录至少需要x权限

文件所需权限:用户对此目录下的文件至少需要r权限

3.用户可以修改一个文件的基本权限是什么?

使用的命令:例如nanovi

目录所需权限:用户对文件所在的目录至少要有x权限

文件所需权限:用户多文件至少需要rw权限

4.一个用户可以创建一个文件的基本权限是什么

目录所需权限:用户在该目录要具有wx权限,重点在w

5.让用户进入某目录并执行该目录下的命令的基本权限是什么?

目录所需权限:用户在该目录下至少需要x权限

文件所需权限:用户在该文件下至少需要x权限


原创文章,作者:lyx,如若转载,请注明出处:http://www.178linux.com/60542

(0)
lyxlyx
上一篇 2016-11-23
下一篇 2016-11-23

相关推荐

  • 文本处理之sed

     sed:是一种行编辑器,它在处理行时会把要处理的行读入模式空间中,处理的是模式空间的内容,一行一行的处理,然后把处理结果显示在屏幕中,不对原文做修改,除非强制重定向。   好处:可同时编辑一个或多个文件,简化了对文件的反复操作。 sed用法:   格式: sed [options ]…'script&#0…

    Linux干货 2016-08-15
  • 重定向和管道

     重定向    程序:指令+数据    读入数据:Input    输出数据:Output  linux给程序提供三种I/O设备    标准输入(stdin)-0 默认接受来自键盘的输入    标准输出(stdinout)-1默认输出到终端…

    Linux干货 2016-08-10
  • 理解Inode

    inode是一个重要概念,是理解Unix/Linux文件系统和硬盘储存的基础。 我觉得,理解inode,不仅有助于提高系统操作水平,还有助于体会Unix设计哲学,即如何把底层的复杂性抽象成一个简单概念,从而大大简化用户接口。 下面就是我的inode学习笔记,尽量保持简单。 一、inode是什么? 理解inode,要从文件储存说起。 文件储存在硬盘上,硬盘的最…

    Linux干货 2015-03-20
  • 8-5作业

    4、取本机ip地址 ifconfig | grep -o "1[0-9]\+\.[0-9]\+\.[0-9]\+\.[1-2][0-5][0-4]" 5、取各分区利用率的数值 df | grep "/dev/sda"|tr -s ' ' |cut -d" " -f5 |tr -d…

    Linux干货 2016-08-10
  • N22-第三周课堂练习

    — 1.列出当前系统上所有已经登录的用户的用户名,注意:用一个用户登录多次,则只显示一次即可。     who | awk '{print $1}' | uniq 2.取出最后登录到当前系统的用户相关信息。   last | head -n 1 3.取出当前系统上被用户当作其默认shell的最多的…

    Linux干货 2016-08-30
  • 0804正则表达式作业

    用正则表达式表示IP地址         首先来分析一下,制IP地址是一个32位的二进制数,通常被分割为4个“8位二进制数”(也就是4个字节)。IP地址通常用“点分十进制”表示成(a.b.c.d)的形式,其中,a,b,c,d都是0~255之间的十进制整数。例:点分十进IP地址(1…

    Linux干货 2016-08-10