文件的权限管理

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

    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)
上一篇 2016-11-23 20:10
下一篇 2016-11-23 20:38

相关推荐

  • 硬链接和软链接的区别

                        硬链接和软链接的区别     硬链接: 1.创建命令:ln或link 2.同一文…

    Linux干货 2016-12-05
  • 磁盘管理的相关知识

    1.设备文件:关联至一个设备驱动程序,进而与之相对应设备文件通信 2.设备号码:     主设备号:major number 标识文件类型     次设别号:minor number  同一类型下不同设备 3磁盘组成结构: .    &nb…

    Linux干货 2016-08-30
  • 用户和组管理类命令

    用户和组管理类命令 useradd useradd命令用于Linux中创建的新的系统用户 语法 useradd(选项)(参数) 选项 -c<备注>:加上备注文字。备注文字会保存在passwd的备注栏位中; -d<登入目录>:指定用户登入时的启始目录; -D:变更预设值; -e<有效期限>:指定帐号的有效期限; -f<…

    Linux干货 2018-03-18
  • 常用linux命令小计(1)

    关于linux那些事儿—常用命令小结(1) 系统相关信息 Uname –m显示处理器的架构 Uname –r显示正在使用的内核版本 cat /proc/cpuinfo显示cpu的具体信息 cat /proc/version显示内核的版本 cat /proc/swaps显示哪些分区被使用 data显示系统日期 cal –y显示当年的日历 date 021920…

    Linux干货 2017-02-19
  • 用户管理生产环境实践案例

    关于用户管理的命令回顾:visudo 用户管理生产环境实践案例 1. 关于用户管理命令的回顾 2. 正文 关于用户管理的命令回顾: <1> useradd命令 <2> 其他命令 (1)信息收集 (2)模拟用户测试 <1> 问题现状 <2> 需求分析 <3> 实现方针 <4>. 实施过程 …

    Linux干货 2016-10-18
  • Mariadb数据库备份恢复系列(三):xtrabackup物理备份工具之增量备份

       实验三:利用xtrabackup+二进制日志实现增量备份和恢复数据库 本例中实现的是将所有的增量日志都通过apply-log的步骤同步到完全备份文件中,如果希望利用增量日志还原到固定某次增量备份的数据,则不能使用本例中方式对所有的备份都进行apply-log操作,如果希望利用增量日志还原到固定哪次增量备份的数据,则将最初的完全备份的数据、和期望还原到某…

    Linux干货 2016-11-24