文件的权限管理

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

    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:r,w,x

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的权限为600(rw- — —)

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]

非特权用户的umask是022,root的umask是002

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

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

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

   umask u=rwx,g=r,o= 直接该边创建的文件或目录权限

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

 

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

SUID,SGID,Sticky(粘滞键)

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

    临时切换所有者身份为root,(u+s)suid默认权限对应的数字为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访问控制列表

    ACL:Access Control List;实现灵活的权限管理,给不同的用户不同的权限

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

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

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

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

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

    –rm  u:rwX  只对目录有执行权限,对其的文件没有执行权限 ?

   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  复制file1的acl给file2  

4.2备份和恢复acl

  主要的文件操作命令cp和mv都支持acl,但cp命令需要加上-p参数。但是tar等常见的备份工具是不会保留目录和文件的ACL信息
#getfacl -R /tmp/dir1 > acl.txt   把/tmp/dir1下acl权限的文件覆盖到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.用户在某一个目录内读取一个文件的基本权限是什么?

可使用的命令:例如cat,less,head等

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

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

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

可使用的命令:例如nano,vi等

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

文件所需权限:用户多文件至少需要r,w权限

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

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

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

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

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


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

赞 (0)
lyxlyx
上一篇 2016-11-23 20:10
下一篇 2016-11-23 20:38

相关推荐

  • History的作用及调用历史命令的快捷方式

    History的作用及调用历史命令的快捷方式 M21-陆东贵 CentOS 7.2 命令历史:shell进程会在其回话中保存此前用户提交执行过的命令; history命令:命令历史; 命令语法:history [-c] [-d 偏移量] [n] 或           …

    Linux干货 2016-10-19
  • Week9’s homework

    Week9's homework 1、写一个脚本(1)判断当前系统上所有用户的shell是否为可登录shell(即用户的shell不是/sbin/nologin)(2)分别统计两类用户的个数;通过字符串比较来实现。 #!/bin/bash # for i in $(cat /etc/passwd |…

    Linux干货 2016-12-24
  • Linux文件系统上的权限

    Linux文件系统上的权限 首先我们来看一下如何修改文件的属主和属组 修改文件的属主:chown chown [OPTION]… [OWNER][:[GROUP]]FILE… 用法 OWNER修改属主 OWNER:GROUP修改属主:属组 :GROUP修改属组 命令中的冒号可以用.替换 -R:递归 chowen [OPTION]&#8…

    Linux干货 2016-08-04
  • Bash编程之条件测试

    Bash 包含强大的编程功能,其中包括丰富的可测试文件类型和属性的函数,以及在多数编程语言中可以使用的算术和字符串比较函数。理解不同的测试并认识到 shell 还能把一些操作符解释成 shell 元字符,是学好Bash编程的重要一环。 一、测试命令 Bash中一条命令退出状态码可作为测试条件,执行成功返回0,代表布尔类型true;反之执行失败返回1-255之…

    Linux干货 2016-08-21
  • 文件查找

    文件查找: locate查找:     locate:     依赖于事先构建好的索引库,操作系统刚完成没有       系统自动实现(周期性任务);      &nbs…

    Linux干货 2016-08-15
  • CentOS下获取帮助

    CentOS中获取帮助 在使用和学习CentOS系统时,我们可能会遇上不熟悉的命令,需要获取帮助。在很多情况下,我们无法通过网络获取帮助,这个时候我们就需要自己通过查看系统帮助文档来解决问题。下面就来介绍获取帮助的方法: 1、 获取简单的帮助信息:whatis COMMAND   2、获取比较详细的命令帮助信息:help COMMAND;COMMA…

    2017-07-15