文件权限的设置和文件的特殊权限及其命令使用

1. linux的系统管理员很重要的任务就是管理自己服务器的文件,对于权限设置等级森严的linux文件系统,文件系统的访问权限管理自然也是linux管理员必不可少的一项技能。

linux中文件的基本权限中:被分为三大项:文件拥有者,文件拥有组,其他人。

每一项中,用三位八进制的数字来代表文件是否可读,是否可写,是否可执行。并根据用户不同可以设置不同的umask值,来屏蔽文件的权限,umask值位数等于文件的权限位数,当umask的值为1,表示该位的权限就应该屏蔽掉。

后来在使用过程中发现,除了上面的几种分类之外,往往会出现第四种,第五种人,比如虽然是同一个组,但是权限却不能要求一样,或者后一个属于其他人的分组的一个人权限却要求更大,还有就是比如linux的密码文件,对于系统中的密码文件对于普通用户是不应该可见或更改的,但是在系统某些普通用户登录时又必须访问该文件,于是便出现了,文件的特殊权限以及文件的访问控制ACL

2. umask工作原理及其配置:

umask是从最大权限中屏蔽掉相应的权限位,从而得到相应的权限。

对于每个用户都有其默认的umask值的设定,对于rootumask值较大,默认022,其他人umask较小,因为root权限较大,umask值越大,屏蔽掉的权限也越多,默认创建的文件权限也就越小,对于系统来说,文件系统权限越小,相对来说也就是更高的安全。umask计算时可以用下面的方法计算:

默认权限=最大权限位 – umask屏蔽位。

上面的计算是目录时,最大权限是777,文件时最大权限是666,然后与umask位做差运算,如果是文件则结果就是文件的权限,如果是目录时则要看每一位的数值是奇数还是偶数,如果是奇数就需要该位上加一,偶数位则不变。

 

示例:

[root@centos7 ~]# ll f4.txt cd
-rwxr-xr-x. 1 root root 0 Aug 3 10:33 cd
-rw-r--r--. 1 root root 12 Jul 27 10:35 f4.txt

  有上面的文件可知f4.txt文件权限位中(第一个表示是文件类型,不属于文件权限位),每三个位表示一端,每一段中又分别是rwx三中权限,表示没有该权限位被屏蔽掉了。每一位若用二进制数字表示的话r100)表示4w010)表示2x001)表示1,文件最大umask权限默认是666是因为默认屏蔽掉x权限,表示执行的x权限对于系统来说有安全隐患,所以默认屏蔽掉了。

         umask值查看与设定:

[root@centos7 ~]# umask
0022
[root@centos7 ~]# umask -p
umask 0022
[root@centos7 ~]# umask -S
u=rwx,g=rx,o=rx

上面的三种查看方法当中,第一种没有加参数,可以直接显示umask的值,第二种加了-p选项后在umask值前面多了umask字样,可以用来编写脚本时使用,比如要把umask的值改变需要改变配置文件每一个用户的初始化配置文件~/.bashrc当中都有有关umask的值的设定,在/etc/bashrc下面有全局设定,在配置文件的末尾直接写 umask  0147 便将umask值修改为0111

umask值计算示例:

如将umask的值改为0147了此时

         目录:777-147=630  目录值算出多少就是多少

         文件:666-147=52(-1)  结果当中有奇数有偶数奇数加一偶数不变(加一是为了屏蔽掉执行权限)结果为620

测试结果如下

[root@centos7 ~]# umask 147
[root@centos7 ~]# touch aa
[root@centos7 ~]# ll aa
-rw--w----. 1 root root 0 Aug  3 10:59 aa
[root@centos7 ~]# mkdir aadir
 [root@centos7 ~]# ll aadir/ -d
drw--wx---. 2 root root 6 Aug  3 11:00 aadir/

可知,结果与计算相符,计算正确

注意:

文件权限是需要和文件系统关联的,假如将fat文件系统格式化的分区,该分区将不支持文件系统权限的,比如用fat32的优盘挂载至文件系统,通过lsblk列出块设备,df –T 查看文件系统确认分区格式和挂载点,修改文件权限,切至普通用户就会发现文件权限修改使没有生效的

3. 文件系统的特殊权限:SUID,SGID,STICKY

三种文件系统权限的都是文件系统权限的扩展,分别简写为sst。在通过ls  -l查看文件时第一位就是文件的特殊权限三个字母分别对应于原来的rwx三位,数值也是421

三种权限的含义:

SUID:对用户有效,并且需要是二进制的可执行文件,对于普通文件和脚本文件无效,当用户执行具有suid的可执行文件时,该用户将继承拥有该程序拥有者的权限执行该程序(可执行文件的运行身份是以发起该进程的用户身份的)

如:

[root@centos7 ~]# ll `which vim`
-rwxr-xr-x. 1 root root 2289656 Jun 10  2014 /usr/bin/vim
[root@centos7 ~]# ll `which vim`
-rwxr-xr-x. 1 root root 2289656 Jun 10  2014 /usr/bin/vim
[root@centos7 ~]# chmod u+s `which vim`
[root@centos7 ~]# ll `which vim`
-rwsr-xr-x. 1 root root 2289656 Jun 10  2014 /usr/bin/vim
[root@centos7 ~]# su - jack
Last login: Tue Aug  2 21:43:24 CST 2016 on pts/1
[jack@centos7 ~]$ ll /etc/shadow
----------. 1 root root 1309 Aug  2 21:47 /etc/shadow
 [jack@centos7 ~]$ vim /etc/shadow
[jack@centos7 ~]$ echo $?
0
[jack@centos7 ~]$ exit
logout
[root@centos7 ~]# chmod u-s `which vim`
[root@centos7 ~]# ll `which vim`
-rwxr-xr-x. 1 root root 2289656 Jun 10  2014 /usr/bin/vim

通过给/usr/bin/vim添加suid权限,普通用户可以编辑对于任何用户都不能查看或编辑的shadow文件,最后给vim减去suid权限。

 

SGID:类似于suid,目标也是针对可执行的二进制文件有效,对拥有sgid权限的程序,可以拥有可执行文件的组内的权限,使用较少,用法与suid类似,此处不在赘述

sgid作用在目录上的特殊功能:当对目录拥有sgid位时,该目录内新建的文件或目录的所属组自动集成该目录的所属组

示例:在添加了sgiddir目录中,其他用户创建的目录和文件都会变成jack所属组

[root@centos7 testdir]# mkdir dir
[root@centos7 testdir]# chown jack.jack dir
[root@centos7 testdir]# chmod g+s dir
[root@centos7 testdir]# cd dir
[root@centos7 dir]# touch a.txt
[root@centos7 dir]# mkdir a_dir
[root@centos7 dir]# ll
total 0
drwxr-sr-x. 2 root jack 6 Aug  3 16:02 a_dir
-rw-r--r--. 1 root jack 0 Aug  3 16:02 a.txt

 

sticky:又叫粘滞位,该位在
普通文件的sticky位会被linux内核忽略,目录的sticky位表示这个目录里的文件只能被ownerroot删除 。粘滞位出现执行许可的位置上,用t表示。但是该目录下的目录不继承该权限,要再设置才可使用。   

示例:tmp目录

[root@centos7 ~]# ll /tmp -d
drwxrwxrwt. 24 root root 4096 Aug  3 11:22 /tmp

 
那么原来的执行标志x到哪里去了呢? 系统是这样规定的, 假如本来在该位上有x, 则这些特别标志 (suid, sgid, sticky) 显示为小写字母 (s, s, t).
 否则, 显示为大写字母 (S, S, T)     

 

chattr:在文件系统的层面为文件添加属性,保护特殊文件,防止误操作,在系统中root可以把本已对任何人都没有权限的文件,执行操作

在操作系统层面上,文件的属性有:

 

a:让文件或目录仅供附加用途;

b:不更新文件或目录的最后存取时间;

i:不得任意更动文件或目录;

u:预防意外删除。
示例:

[root@centos7 testdir]# ls
adir  a.txt
[root@centos7 testdir]# chattr +a  a.txt //添加a属性
[root@centos7 testdir]# chattr +i adir/
[root@centos7 testdir]# echo aa > a.txt//不能修改
-bash: a.txt: Operation not permitted
[root@centos7 testdir]# echo aa >> a.txt//只能增加内容
[root@centos7 testdir]# rm -rf adir/  //不能删除目录
rm: cannot remove ‘adir/’: Operation not permitted

 

文件访问控制列表ACL(Access Control ListACL)对文件权限进行精确匹配,包括组和用户,都可以进行匹配:

选项:

 

-b,--remove-all:删除所有扩展的acl规则,基本的acl规则(所有者,群组,其他)将被保留。
-m给文件添加acl规则
-M 根据规定好的acl格式的文件(存放acl规则的文件),为需要添加acl的文件添加acl
-x 给文件移除规则
-X 类似于-M也是根据文件移除acl权限

 

 

-m和-x后边跟以acl规则。多条acl规则以逗号(,)隔开。选项-M和-X用来从文件或标准输入读取acl规则。 选项–set和–set-file用来设置文件或目录的acl规则,先前的设定将被覆盖。 选项-m(–modify)和-M(–modify-file)选项修改文件或目录的acl规则。 选项-x(–remove)和-X(–remove-file)选项删除acl规则。
当使用-M,-X选项从文件中读取规则时,setfacl接受getfacl命令输出的格式。每行至少一条规则,以#开始的行将被视为注释。 当在不支持ACLs的文件系统上使用setfacl命令时,setfacl将修改文件权限位。如果acl规则并不完全匹配文件权限位,setfacl将会修改文件权限位使其尽可能的反应acl规则,并会向standard error发送错误消息,以大于0的状态返回

 

 


一般示例:

[root@centos7 testdir]# ll
total 4
drwxr-xr-x. 2 root root 6 Aug  3 16:17 adir
-rw-r--r--. 1 root root 9 Aug  3 16:31 a.txt
[root@centos7 testdir]# setfacl -m u:jack:rwx a.txt //给用户jack添加rwx权限
[root@centos7 testdir]# getfacl a.txt //查看文件的acl权限
# file: a.txt
# owner: root
# group: root
user::rw-
user:jack:rwx
group::r--
mask::rwx
other::r—
[root@centos7 testdir]# setfacl -x u:jack:  a.txt 
[root@centos7 testdir]# getfacl a.txt
# file: a.txt
# owner: root
# group: root
user::rw-
group::r--
mask::r--
other::r--
[root@localhost ~]# getfacl ./test.txt 
# file: test.txt 
# owner: root 
# group: admin user::rw- 
user:john:rw- group::rw- 
group:dev:r-- mask::rw- 
other::r—

前面三个以#开头的定义了文件名,file owner和group。

user::rw- 定义了ACL_USER_OBJ, 说明file owner拥有read and write permission

user:jack:rwx 定义了ACL_USER,这样用户jack就拥有了对文件的读写执行权限,实现了我们一开始要达到的目的

group::rw- 定义了ACL_GROUP_OBJ,说明文件的group拥有read and write permission group:dev:r– 定义了ACL_GROUP,使得dev组拥有了对文件的read permission mask::rw- 定义了ACL_MASK的权限为read and write other::r– 定义了ACL_OTHER的权限为read

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

(0)
jack_cuijack_cui
上一篇 2016-08-05 16:18
下一篇 2016-08-05 16:18

相关推荐

  • LVM逻辑卷管理

    为什么要用LVM?     想象一个示例,如果我们给定的分区是50G,过段时间发现空间不够用,此时我们就要重新加一块新硬盘,重新分区格式化,将原来分区上的数据复制过来,再重新挂载,整个过程会非常麻烦,LVM可以很有效的解决这个问题 LVM简介     及逻辑卷(Logical V…

    Linux干货 2016-09-01
  • Linux 内存管理

    1.Linux 进程在内存数据结构      可以看到一个可执行程序在存储(没有调入内存)时分为代码段,数据段,未初始化数据段三部分:      1) 代码段:存放CPU执行的机器指令。通常代码区是共享的,即其它执行程序可调用它。假如机器中有数个进程运行相同的一个程序,那么它们就…

    Linux干货 2015-04-13
  • Linux基础命令之文本命令

    关于文本的命令:     1.文件查看命令:        a.cat:查看文件,实现参数给的内容一个个显示出来            -n:显示行号(显示的空行的行号)          …

    Linux干货 2016-08-07
  • 磁盘管理、文件管理、系统管理

    分区管理工具:fdisk,parted,sfdisk fdisk:MBR模式,对于一块硬盘来说,最多只能管理15个分区; # fdisk -l [-u] [device…]:查看 # fdisk device 子命令:管理功能 p:显示已有分区 n:新建分区 d:删除 w:写入磁盘并退出 q:放弃更改并退出 m:获取帮助 l:列出分区id t:调…

    Linux干货 2017-12-15
  • 用一条命令’pwd’判断并证明系统命令的执行顺序。

    一、命令分类        在Linux系统中命令分为两类:            1.内部命令:shell buildin 每次启动系统都会重新加载入内存。        2.外部命令:即某目录下的…

    Linux干货 2017-09-03
  • 马哥教育首届IT技术博客大赛–结果揭晓

    号外、号外!!马哥教育首届博客大赛已圆满结束。感谢小伙伴们的积极参与! 噼里啪啦,小伙伴们掌声响起来,啤酒烤鸭high起来~~咳咳,跑题了,小编好像忘了一件很重要的事: 马帮博客大赛就是与众不同,全银河系也就仅此一家,为啥这么说呢,您看啊,咱就喜欢原创,鼓励原创,酷爱原创,以原创博客作为技术交流的平台供大家随意围观和吐槽,您看看,除了马哥这里,哪里还有这么自…

    Linux干货 2016-06-22