linux文件权限
文件权限符
[root@localhost /]# ll
总用量 60
lrwxrwxrwx. 1 root root 7 12月 12 08:36 bin -> usr/bin
dr-xr-xr-x. 6 root root 4096 12月 12 08:43 boot
drwxr-xr-x. 19 root root 3200 1月 12 22:39 dev
drwxr-xr-x. 84 root root 4096 1月 12 23:22 etc
drwxr-xr-x. 3 root root 4096 1月 12 23:22 home
lrwxrwxrwx. 1 root root 7 12月 12 08:36 lib -> usr/lib
lrwxrwxrwx. 1 root root 9 12月 12 08:36 lib64 -> usr/lib64
drwx------. 2 root root 16384 12月 12 08:36 lost+found
drwxr-xr-x. 2 root root 4096 4月 11 2018 media
drwxr-xr-x. 2 root root 4096 4月 11 2018 mnt
drwxr-xr-x. 3 root root 4096 12月 12 08:38 opt
dr-xr-xr-x. 101 root root 0 1月 12 22:39 proc
dr-xr-x---. 4 root root 4096 1月 12 21:23 root
drwxr-xr-x. 29 root root 880 1月 12 22:39 run
lrwxrwxrwx. 1 root root 8 12月 12 08:36 sbin -> usr/sbin
drwxr-xr-x. 2 root root 4096 4月 11 2018 srv
dr-xr-xr-x. 13 root root 0 1月 12 22:39 sys
drwxrwxrwt. 15 root root 4096 1月 12 23:23 tmp
drwxr-xr-x. 13 root root 4096 12月 12 08:36 usr
drwxr-xr-x. 20 root root 4096 12月 12 08:50 var
输出结果的第一个字段就是描述文件和目录权限的编码。这个字段的第一个字符代表了对象
的类型:
-
- 代表文件
-
d 代表目录
-
l 代表链接
-
c 代表字符型设备
-
b 代表块设备
-
n 代表网络设备
之后有3组三字符的编码。每一组定义了3种访问权限:
-
r 代表对象是可读的
-
w 代表对象是可写的
-
x 代表对象是可执行的
若没有某种权限,在该权限位会出现单破折线。这3组权限分别对应对象的3个安全级别:
-
对象的属主
-
对象的属组
-
系统其他用户
默认文件权限
你可能会问这些文件权限从何而来,答案是 umask 。 umask 命令用来设置所创建文件和目录的默认权限。
[root@localhost ~]# touch newfile
[root@localhost ~]# ll | grep newfile
-rw-r--r--. 1 root root 0 1月 12 23:29 newfile
touch 命令用分配给我的用户账户的默认权限创建了这个文件。 umask 命令可以显示和设置这个默认权限。
[root@localhost ~]# umask
0022
第一位代表了一项特别的安全特性,叫作粘着位(sticky bit)。后面的3位表示文件或目录对应的 umask 八进制值。要理解 umask 是怎么工作的,得先理解八进制模式的安全性设置。
八进制模式的安全性设置先获取这3个 rwx 权限的值,然后将其转换成3位二进制值,用一个八进制值来表示。在这个二进制表示中,每个位置代表一个二进制位。因此,如果读权限是唯一置位的权限,权限值就是 r-- ,转换成二进制值就是 100 ,代表的八进制值是 4 。
了解八进制模式权限是怎么工作的之后, umask 值反而更叫人困惑了。我的Linux系统上默认的八进制的 umask 值是 0022 ,而我所创建的文件的八进制权限却是 644 ,这是如何得来的呢?
umask 值只是个掩码。它会屏蔽掉不想授予该安全级别的权限。接下来我们还得再多进行一些八进制运算才能搞明白来龙去脉。
要把 umask 值从对象的全权限值中减掉。对文件来说,全权限的值是 666 (所有用户都有读和写的权限);而对目录来说,则是 777 (所有用户都有读、写、执行权限)。
所以在上例中,文件一开始的权限是 666 ,减去 umask 值 022 之后,剩下的文件权限就成了 644 。
安全性设置
权限 | 二进制值 | 八进制值 | 描述 |
---|---|---|---|
— | 000 | 0 | 没有任何权限 |
–x | 001 | 1 | 只有执行权限 |
-w- | 010 | 2 | 只有写入权限 |
-wx | 011 | 3 | 有写入和执行权限 |
r– | 100 | 4 | 只有读取权限 |
r-x | 101 | 5 | 有读取和执行权限 |
rw- | 110 | 6 | 有读取和写入权限 |
rwx | 111 | 7 | 有全部权限 |
改变权限
chmod 命令用来改变文件和目录的安全性设置。该命令的格式如下:
chmod options mode file
mode 参数可以使用八进制模式或符号模式进行安全性设置。八进制模式设置非常直观,直接用期望赋予文件的标准3位八进制权限码即可。
[root@localhost ~]# chmod 666 newfile
[root@localhost ~]# ll
总用量 8
-rw-rw-rw-. 1 root root 0 1月 12 23:29 newfile
改变文件所属关系
有时你需要改变文件的属主,比如有人离职或开发人员创建了一个在产品环境中需要归属在
系统账户下的应用。Linux提供了两个命令来实现这个功能: chown 命令用来改变文件的属主,chgrp 命令用来改变文件的默认属组。
chown 命令的格式如下。
chown options owner[.group] file
[root@localhost ~]# ll
总用量 8
-rw-rw-rw-. 1 root root 0 1月 12 23:29 newfile
[root@localhost ~]# chown shared01 newfile
[root@localhost ~]# ll
总用量 8
-rw-rw-rw-. 1 shared01 root 0 1月 12 23:29 newfile
[root@localhost ~]#
chown 命令也支持同时改变文件的属主和属组。
[root@localhost ~]# chown shared01.shared newfile
[root@localhost ~]# ll
总用量 8
-rw-------. 1 root root 1289 12月 12 08:43 anaconda-ks.cfg
-rw-------. 1 root root 1575 1月 12 21:23 anaconda-ks.cfg.bak
-rw-rw-rw-. 1 shared01 shared 0 1月 12 23:29 newfile
[root@localhost ~]#