快速掌握linux的文件权限管理
快速掌握linux的文件权限管理
1、文件的基本权限:r w x (UGO)
2、文件的特殊权限:suid sgid sticky和文件扩展权限ACL
1.1.权限的作用
我们通过文件设备权限可以达到以下三种访问权限的方式:
1) 只允许用户自己访问
2)允许一个预先指定的用户组中用户访问
3)允许系统中的任何用户访问
1.2如何查权限
root@localhost ~]# ll
total 20
-rw-r--r-- 1 root root 223 Feb 21 21:05 aa
-rw-------. 1 root root 1621 Oct 29 08:49 anaconda-ks.cfg
-rw-r--r-- 1 root root 0 Feb 29 22:59 bb
-rw-------. 1 root root 1208 Oct 29 08:49 original-ks.cfg
-rw-r--r-- 1 root root 1539 Feb 26 23:32 pass
-rw-r--r-- 1 root root 1503 Feb 21 21:09 passwd
drwxr-xr-x 2 root root 6 Oct 29 00:54 perl5
d |
rw- |
r-x |
r-x |
2 |
root |
root |
Feb 21 21:09 |
passwd |
| 文件类型 | 拥有者权限 | 所属组的权限 | 其他人的权限 | 大小 | 这个文件拥有者 | 属组 | 最后修改的时间 | 文件对象 |
文件类型,可以为p、d、l、s、c、b和 –
p表示命名管道文件
d表示目录文件
l表示符号连接文件
-表示普通文件
s表示socket套接口文件,比如我们启用mysql时,会产生一个mysql.sock文件
c表示字符设备文件,例: 虚拟控制台 或tty0
b表示块设备文件 例: sda, cdrom
这里有颜色的区分文件的内型
1.3 权限说明
对于文件来说:
r:读(4) w:写(2) x:执行(1)
对于目录来说:
r:读(看到目录里面有什么) ls
w:在目录里面建文件,删除,移动 touch mkdir rm mv cp
x:进入 cd cat
1.3常见几种文件权限组成
- rwx --- ---:文件所有者对文件具有读取、写入和执行的权限。
- rwx r-- r--: 文件所有者具有读、写与执行的权限,用户组里用户及其他用户则具有读取的权限
- rw- rw- r-x:文件所有者与同组用户对文件具有读写的权限,而其他用户仅具有读取和执行的权限。
drwx--x --x: 目录所有者具有读写与进入目录的权限,其他用户近能进入该目录,却无法读取任何数据。
drwx------: 除了目录所有者具有完整的权限之外,其他用户对该目录完全没有任何权限。
这中间如自己创建的文件或目录,自动成为该文件的所属主和组
1.4 更改文件的属主和属组
chown:可以用来改变文件(或目录)的属主
chgrp:可以用来改变文件(或目录)的默认属组
如果你要对目录进行操作,加参数 -R 递归权限
chown 语法
chown user:group filename chown hk:hk bb 把文件的属主和属组改为hk
chown user filename 比如:chown hk bb 把文件的属主改为hk用户
chown :group filename 比如: chown :hk bb把文件的属组改为hk这个组
chown user: filename 比如:chown hk: bb #把bbt文件的属主和属组改为hk用户
-R :递归(目录下的所有内容都更改,否则只修改目录)
一个文件只有读的权限,拥有者是可以写这个文件
文件所有者一定可以写文件。 就像root可以对shadow强制写。 因shadow的拥有者是root
1.5 修改权限
1.5.1 使用字符设定
修改权限用的命令:chmod
作用:修改文件,目录的权限
语法:chmod [对谁操作] [操作符] [赋于什么权限] 文件名
对谁操作:
u----> 用户user,表示文件或目录的所有者
g---->用户组group,表示文件或目录所属的用户组
o---->其它用户others
a---->所有用户all
操作符:
+ #添加权限 ; - # 减少权限 ; = #直接给定一个权限
权限:r w x
|
u-w |
user |
拥有者 |
|
g+x |
group |
组 |
|
o=r |
other |
其他人 |
|
a+x |
all |
所有 |
chmod u-w bb 给bb 的拥有者加一个写的权限
chmod g+x bb 给bb 的组加一个执行的权限
chmod a+x bb 给bb 所有人都加一个执行权限,一般情况在SHELL 脚本会用到
chmod a=rwx bb 给bb 的(UGO) 的权限加成rwx
1.5.2 使用八进制(0-7)数字表示权限法
|
权限 |
二进制值 |
八进制值 |
描述 |
|
--- |
000 |
0 |
没有任何权限 |
|
--x |
001 |
1 |
只有执行权限 |
|
-w- |
010 |
2 |
只有写入权限 |
|
-wx |
011 |
3 |
有写入和执行权限 |
|
r-- |
100 |
4 |
只有读取权限 |
|
r-x |
101 |
5 |
有读取和执行权限 |
|
rw- |
110 |
6 |
有读取和写入权限 |
|
rwx |
111 |
7 |
有全部权限 |

[root@localhost ~]# chmod 700 bb
[root@localhost ~]# ll bb
-rwx------ 1 root root 0 Feb 29 22:59 bb
1.6权限对文件和目录的影响
有三种权限可以应用:读取,写入与执行,这些权限对访问文件和目录的影响如下:
|
权限 |
对文件的影响 |
对目录的影响 |
|
r(读取) |
可以读取文件的内容 |
可以列出目录的内容(文件名) |
|
w(写入) |
可以更改文件的内容 |
可以创建或删除目录中的任意文件 |
|
x(执行) |
可以作为命令执行文件 |
可以访问目录的内容(取决于目录中文件的权限) |
1.8 补码
创建的文件的权限是644
实际linux中:文件默认权限=666 ,目录默认权限=777
主要由于umask
我们一般在/etc/profile、$ [HOME]/.bash_profile或$[HOME]/.profile中设置umask值。
永久生效,编辑用户的配置文件vim .bash_profile
vim /etc/profile

UID大于199 且用户的组名和用户名一样,那么 umask值为002,否则为022.
如果需要临时生效,
umask 权限补码
umask 044
权限的算法:一般情况是:目录默认权限-umask 值
666-022=644
777-022=755
这种方法可用但是不科学
权限科学的计算方法:
1、将默认权限(目录777,文件666)和umask值都转换为2进制
2、对umask取反
3、将默认权限和umask取反后的值做与运算
4、将得到的二进制值再转换8进制,即为权限,
umask 为022
6 6 6 umask 0 2 2
110 110 110 000 010 010 # 转成二进制
111 101 101 # umask取反的值
110 110 110 与 #第二步,默认权限和umask取反后的值做与运算
111 101 101 # umask取反的值
110 100 100
6 4 4 #转成8进制
umask 为022
6 6 6 umask 0 2 2
110 110 110 000 010 010 #转成二进制
111 101 101 # umask取反的值
110 110 110 与 #第二步,默认权限和umask取反后的值做与运算
111 101 101 # umask取反的值
110 100 100
6 4 4 #转成8进制
2 文件的特殊权限:suid sgid sticky和文件扩展权限ACL
其实文件与目录设置不止这些,还有所谓的特殊权限。由于特殊权限会拥有一些“特权”.
特殊权限:
2.1 文件的特殊权限:suid sgid sticky
1、SUID(set uid设置用户ID):限定:只能设置在二进制可执行程序上面。对目录设置无效
功能:程序运行时的权限从执行者变更成程序所有者的权限
2、SGID:限定:既可以给二进制可执行程序设置,也可以对目录设置
功能:在设置了SGID权限的目录下建立文件时,新创建的文件的所属组会,继承上级目录的所属组
3、Stickybit:粘滞位权限是针对目录的,对文件无效,也叫防删除位
功能:在一个公共目录,每一个用户都可以创建文件,但是只能够删除属于自己文件,不能删除其他用户的文件
这3个特殊权限对应的数值为
|
SUID |
SGID |
Stickybit |
|
u+s或u=4 |
g+s或g=2 |
o+t或o=1 |
UID属性一般用在可执行文件上,当用户执行该文件时,会临时拥有该执行文件的所有者权限。使用”ls -l” 或者”ll” 命令浏览文件时,如果可执行文件所有者权限的第三位是一个小写的”s”,就表明该执行文件拥有SUID属性。比如/usr/bin/passwd文件
[hk@localhost root]$ ll /usr/bin/passwd
-rwsr-xr-x. 1 root root 27832 Jun 10 2014 /usr/bin/passwd
举个例 子:
我们用一个用户hk,正常情况下,这个hk是不能查看到/etc/shadow这个文件,现在我们用root 给一个less 命令的权限再访问
[hk@localhost root]$ less /etc/shadow /etc/shadow: Permission denied [root@localhost ~]# chmod 4755 /usr/bin/less 等同于 chmod u+s /usr/bin/less [root@localhost ~]# su hk [hk@localhost root]$ less /etc/shadow root:$1$YnDObia6$DqEc9x5iTHVHQ212Cjgde1::0:99999:7::: [hk@localhost root]$ ll /usr/bin/less -rwsr-xr-x. 1 root root 158240 Jul 31 2015 /usr/bin/less
SGID:
限定:既可以给二进制可执行程序设置,也可以给目录设置。
功能:在设置了SGID权限的目录下建立文件时,新创建的文件的所属组会继承上级目录的权限。
还是举例:
[root@localhost ~]# mkdir t1
[root@localhost ~]# ll -d t1
drwxr-xr-x 2 root root 6 Mar 1 09:39 t1
[root@localhost ~]# chmod g+s t1
[root@localhost ~]# ll -d t1
drwxr-sr-x 2 root root 6 Mar 1 09:39 t1
[root@localhost ~]# !ll
ll -d t1
drwxr-sr-x 2 root root 6 Mar 1 09:39 t1
[root@localhost ~]# cd t1
[root@localhost t1]# ll
total 0
[root@localhost t1]# cd ..
[root@localhost ~]# chown :bin t1/
[root@localhost ~]# touch t1/aa.txt
[root@localhost ~]# ll t1
total 0
-rw-r--r-- 1 root bin 0 Mar 1 09:41 aa.txt
Stickybit
限定:只作用于目录
功能:目录下创建的文件只有root、文件创建者、目录下的所有者的文件进行删除。
[root@localhost tmp]# chmod o+t /tmp/test [root@localhost tmp]# ll drwxr-xr-t 2 root root 6 Mar 1 09:46 test
2.2 文件扩展权限ACL
简单 的说是就给特定的用户开启或关闭一个文件目录的使用权限
setfacl 设置权限 get 查看权限
给让hk对bbb有读写执行的权限
[root@localhost ~]# getfacl bbb # file: bbb # owner: root # group: root user::rwx group::r-x other::r-x [root@localhost ~]# setfacl -m u:hk:rwx /root/bbb [root@localhost ~]# getfacl /root/bbb getfacl: Removing leading '/' from absolute path names # file: root/bbb # owner: root # group: root user::rwx user:hk:rwx group::r-x mask::rwx other::r-x
给目录加扩展权限
# mkdir /tmp/test #setfacl -m d:u:hk:rwx /tmp/test # -d default 设置默认acl,对目录有效,此目录下新建的目录或文件都继承此acl权限 # getfacl /tmp/test/ getfacl: Removing leading '/' from absolute path names # file: tmp/test/ # owner: root # group: root user::rwx group::r-x other::r-x default:user::rwx default:user:hk:rwx
给目录下所有文件都加扩展权限
# setfacl -R -m u:lee:rw- testdirectory/ #-R一定要在-m前面,表示目录下所有文件
# setfacl -x u:mk /tmp/a.txt # 去掉单个用户的权限
# setfacl -b /tmp/a.txt # 去掉所有acl权限
扩展:
内核检测访问者与文件的权限过程:
没开启facl权限:owner ---> group ---> other
开启facl权限: owner ---> facl,user---> group ---> facl,group ---> other

浙公网安备 33010602011771号