1、简述
大家都知道,Linux系统是一种典型的多用户系统,不同的用户处于不同的地位,拥有不同的权限。
为了保护系统的安全性,Linux系统对不同的用户访问同一文件(包括目录文件)的权限做了不同的规
定。有些文件及目录我们想要操作它们,就需要取得相应的权限,那么对于文件及目录来说,它们都有
哪些权限,需要运用什么命令去修改,具体又应该怎么操作呢,今天就来终结一下。
2、文件的基本权限(rwx)
权限可分为三种:读(r=4),读取文件内容;写(w=2),编辑、新增、修改文件内容, 但是不
包含删除文件,因为文件名和文件数据存放位置不同;执行(x=1),可进入目录。在这里需要注意:
对文件来讲,最高权限是 x; 对目录来讲,最高权限是 w。而rwx权限在文件跟在目录上,也有可能不
是单独存在的,它们有可能是一种或者多种搭配出现,那当它们搭配出现的时候,具体是什么含义呢,
我们可以总结一下:
(1)文件
当仅r权限作用在文件上的时候,表示可以读取该文件的内容
当仅w权限作用在文件上的时候,表示可以修改该文件的内容
当仅x权限作用在文件上的时候,无作用
当rw权限同时作用在文件上的时候,表示可以读写该文件
当rx权限同时作用在文件上的时候,表示可以读并能执行该文件
当wx权限同时作用在文件上的时候,权限等同于仅w权限
(2)目录
当仅r权限作用在目录上的时候,可以短列出目录的内容(子文件,子目录名)
当仅w权限作用在目录上的时候,无作用
当仅x权限作用在目录上的时候,可以进入该目录
当rw同时作用在目录上的时候,权限等同于仅r
当rx同时作用在目录上的时候,表示可以长列出,可以进入
当wx同时作用在目录上的时候,可以创建及删除文件或目录。
当rwx同时作用在目录上的时候,可以列出可以创建删除可以进入。
3、默认权限
(1)文件的默认权限(umask)
1、文件的默认权限不能建立可执行文件,必须手工赋予x执行权限,即文件的默认最大权限为666
2、创建文件后默认权限为666减去umask值,默认权限需要换算成字母再相减
3、修改默认权限的方法:1、umask 0002-临时修改 2、vi /etc/profile-永久修改
(2)目录的默认权限
1、目录的默认最大权限为777
2、建立文件之后的默认权限,为777减去umask值,默认权限需要换算成字母再相减
4、权限作用的对象
无论是文件还是目录,权限都主要针对三类对象进行定义:
owner:属主,简写为u
group:属组,简写为g
other: 其他,简写为o
5、权限操作命令 chmod
举例说明:假设创建一个目录名为house
显示house的默认权限
[root@centos6 app]# ll
drwxr-xr-x. 2 root root 4096 Jul 21 15:46 house
那么进行如下操作:
(1)chmod u-w house 就表示user减少了w权限,如
dr-xr-xr-x. 2 root root 4096 Jul 21 15:46 house
(2)chmod ug+w house 就表示user和group都增加了w权限,如
drwxrwxr-x. 2 root root 4096 Jul 21 15:46 house
(3)chmod ugo-x house 就表示user和group和others都减少了x权限,如
drw-rw-r--. 2 root root 4096 Jul 21 15:46 house
以上操作都不会影响到house目录的子目录,但如果是进行chmod -R操作,那它们的子目录权限都将
会被影响,应为-R代表递归。
6、特殊权限SUID SGID STICKY
(1)SUID
我们知道用户密码都保存在/etcshadow文件下,我们修改密码,实际上也就是在对shadow 文件进行操作,但当我们打开shadow文件时,你会发现实际上普通用户是没有权限的,那我们为什么还可以修改密码呢,这不是自相矛盾吗,其实不然,这里就牵扯到了SUID的问题,首先我们先看一下/etcshadow文件的默认属性
[liubei@centos6 ~]$ ll /usr/bin/passwd
-rwsr-xr-x. 1 root root 30768 Nov 24 2015 /usr/bin/passwd
仔细看你就会发现/usr/bin/passwd的权限为:-rwsr-xr-x. 在此“owner”位是s权限,这个意思就是我们要说的SUID啦
SUID:当对于一个可执行的二进制文件作用了suid之后,任何人在执行该文件时,临时拥有其所有人的权限。也就是说passwd命令具有SUID权限,所有者为root,而当普通用户使用passwd更改自己密码的时候,临时就拥有了命令所有者root的权限,从而当然就可以将密码写入/etc/shadow文件,命令执行完成后该身份也随之消失。具体命令操作为 chmod u+s
(2)SGID
其实,SGID基本与SUID相同,无非也就是一个设置所有者的权限,SGID为设置所属组的特殊权限!区别点在于:SUID也可以设置目录的相关SUID权限! 具体命令操作为 chmod g+s
1.当对于一个可执行的二进制文件作用了sgid之后,任何人在执行该文件时,临时拥有其所有组的权限
2.当对于一个目录作用了sgid权限之后,任何人在该目录下所创建的文件的所属组,均与该目录的所属组相同
(3) STICKY
对于一个目录作用了 STICKY权限后,该目录下的文件仅其所属人和目录的所属人及root可以删除。具体命令操作为 chmod o+s
7、ACL简介
ACL即除文件所有者,所属组和其他人,可以对更多的用户设置权限,简单来说就是用来解决用户身份不足的问题。其中要注意,不用系统组,不要使某用户的多个组都设置不同的ACL group 权限 。ACl权限判断顺序为 owner > acl user > group > other
设定acl权限
setfacl 选项 文件名
-m 设定ACL权限 例如
[root@centos6 app]# setfacl -M acl.txt testdir/
-x 删除指定的ACL权限 例如
[root@centos6(nanyibo) app]# setfacl -x u:guanyu testdir/
[root@centos6(nanyibo) app]# setfacl -x g:weiguo testdir/
-b 删除所有的ACL权限 例如
[root@centos6 app]# setfacl -b testdir
-d 设定默认ACL权限 例如
[root@centos6 app]#setfacl -m d:u:liubei:rwx testdir/
-k 删除默认ACL权限 例如
[root@centos6 app]# setfacl -k testdir
-R 递归设定ACL权限 例如
[root@centos6 app]#setfacl -Rm d:u:liubei:rwx testdir/
举例说明:要求在/testdir/dir里创建的新文件自动属于g1组,组g2的成员如:alice能对这些新文件有读写权限,组g3的成员如:tom只能对新文件有读权限,其它用户(不属于g1,g2,g3)不能访问这个文件夹。
首先,我们分别创建g1、g2、g3组,然后在创建用户,让用户alice属于g2组,用户tom属于g3组,并创建目录/testdir/dir
[root@centos6 app]# groupadd g1
[root@centos6 app]# groupadd g2
[root@centos6 app]# groupadd g3
[root@centos6 app]# useradd -g g2 alice
[root@centos6 app]# useradd -g g3 tom
[root@centos6 app]# mkdir -p testdir/dir
然后我们可以看到文件dir的权限为755
[root@centos6 testdir]# ll
drwxr-xr-x. 2 root root 4096 Jul 21 17:46 dir
然后我们设置该文件的所属组为g2,设置该文件的SGID权限,设置ACL权限使g2组对新建文件有读写权限、g3组对新文件有读权限
[root@centos6 LI testdir]# chgrp g1 dir
[root@centos6 LI testdir]# chmod g+s dir
[root@centos6 LI testdir]# setfacl -Rm d:g:g2:rw dir
[root@centos6 LI testdir]# setfacl -Rm d:g:g3:r dir
现在我们再看一下该文件的权限
[root@centos6 LI testdir]# getfacl dir
file: dir
owner: root
group: g1
flags: -s-
user::rwx
group::r-x
other::---
default:user::rwx
default:group::r-x
该文件的用户为root,所属组为g2具有SGID权限,从而使得g2组下alice用户,可以在新建文件下继承所属组g2的读写权限,而g3组用户tom对新文件只有读权限,而其他用户由于”other::---“,所以不具有任何权限,也就不能访问这个文件夹。