Linux-权限详解
简介
我们总说Linux系统是相对安全可靠的,这与Linux系统有着严格的权限管理这一点是密不可分的。关于权限方面Linux有很多限制机制,包括我们常说的文件基本权限rwx
, 访问控制权限ACL
还有美国国防部参与开发的极为复杂的SELINUX
等 。不过我们最常用的,也必须掌握的就是这个文件的基本权限了。如果权限过高会增加服务器的风险。所以对于了解各种权限以及给用户、文件分配合理的权限十分重要!
查看文件rwx权限
# ls -l 命令的第一列
[root@God /]# ls -l
lrwxrwxrwx. 1 root root 7 Jun 21 11:20 bin -> usr/bin
drwxr-xr-x. 76 root root 8192 Jun 24 19:51 etc
drwxrwxrwt. 8 root root 283 Jun 24 19:53 tmp
...
# stat 命令查看
[root@God /]# stat -c %A /
dr-xr-xr-x
[root@God /]# stat -c %a /
555
# 解释一下这一串字符串的意思
# drwxr-xr-x
# 0123456789
# 第 0 位: 代表文件类型,常用的有 - 普通文件 d 目录 l 软链接(快捷方式)等
# 第123位: 代表文件所属用户(u表示)的 rwx 权限
# 第456位: 代表文件所属组用户(g表示)的 rwx 权限
# 第789为: 代表其他用户(o表示)的 rwx 权限
# - 代表无此项权限
# r=4 代表读权限
# w=2 代表写权限
# x=1 代表可执行权限
# 7 = 4 + 2 + 1 即代表拥有读、写、可执行权限
# 6 = 4 + 2 即代表拥有读、写权限
# 5 = 4 + 1 即代表拥有读、可执行权限
# 以此类推...
-
对于文件
r
表示可以读取文件中的内容w
表示可以修改文件中的内容和文件的一些属性x
表示可以执行文件,普通用户还需要有r
权限才能正常执行
-
对于目录
r
表示可以查询目录下的内容w
表示可以修改目录结构的权限,如新建文件或目录,删除文件或目录等x
目录没有执行一说,所以x
表示可以进入目录
-
删除文件、修改文件名的权限是受父目录的
w
权限控制的,和文件自身的权限无关 -
root
用户对所有文件和目录具有r
读权限 -
root
用户对所有目录具有x
可执行权限,即进入目录的权限 -
root
用户可以更改所有文件或目录的r
w
x
权限
修改文件rwx权限
chmod
命令可用于更改文件的r
读、w
写、x
执行权限
-
语法
chmod [选项] rwx的权限分值 文件或目录
- 权限分值 r=4, w=2, x=1
chmod [选项] 身份标识(+|-)(r|w|x) 文件或目录
- 身份标识 u=user所属用户 , g=group所属组, o=other其他用户, a=all(u+g+o)所有用户
-
选项
-R
递归处理,将指定目录下所有文件及子目录一并处理
# 更改文件/local/myscript.sh的权限 # 文件拥有者权限=7(r+w+x) 同组用户权限=5(r+x) 其他用户权限=5(r+x) chmod 755 /local/myscript.sh # 去掉其他用户对文件/local/myscript.sh的写权限 chmod o-w /local/myscript.sh # 去掉其他用户对文件/local/myscript.sh的写权限,给同组用户加上执行权限 chmod o-w,g+x /local/myscript.sh # 更改目录/local的权限 chmod -R 754 /local
默认权限设置 umask
Linux下创建文件和目录时会有一个默认的权限,一般来讲,我们认为相对安全的权限值为:
-
文件
644
-
目录
755
[root@God ~]# touch testfile
[root@God ~]# stat -c %a testfile
644
[root@God ~]# mkdir testdir
[root@God ~]# stat -c %a testdir/
755
那么为什么默认的权限值会是这样的呢?就是因为umask
权限掩码决定的!下面就好好讲一下这个umask
# 查看umask值
[root@God ~]# umask
0022
# 设置umask值,临时设置,仅针对本次会话
[root@God dir2]# umask 0011
[root@God dir2]# umask
0011
# 永久修改-全局设置-针对所有用户 修改 /etc/profile 文件
# 永久修改-针对当前用户 在 ~/.bashrc 文件设置
首先,我们先来了解一下什么是最大权限值
- 用户创建文件,因为文件有
x
权限“很危险”,则不给x
执行权限,所以文件默认的最大权限值
为666
- 用户创建目录,则由于
x
权限与是否可以进入目录有关,即默认最大的权限值
为777
umask
的系统默认值是0022
说一下0022
的第一位数0
,网上有百分之八十的文章都说是表示的特殊权限或粘滞位,然后说一般不予考虑。屁!你倒是考虑考虑啊,我是搜了很多资料,也没找到到底怎么使用(如果谁知道怎么用,请告诉我 = =)。其实,umask
的本质就是一个不大于十进制512的八进制数字,所以第一位只能是0
,至于为什么是不大于512? 你去换算一下十进制511的八进制数是多少……是不是感觉瞬间就明白了?而且,你如果设置umask
的第一位不等于0
时,会报错,而这个错的意思就是八进制越界!
[root@God dir2]# umask 1000
-bash: umask: 1000: octal number out of range
所以我们只看后三位022
,我们用十进制算法用最大权限值
去对应着位置去减,就得到了文件或目录的默认权限
- 文件
666 - 022 = 6-0 6-2 6-2 = 644
- 目录
777 - 022 = 7-0 7-2 7-2 = 755
那么有人(对,没错,就是我!)会问了,如果设置umask
中的值有1
,3
或5
,比如0035
那按照这个算法,则文件默认不就有执行权限了么,岂不”很危险”?
- 文件
666 - 035 = 6-0 6-3 6-5 = 631
对!所以,当文件根据umask
计算默认权限时,如果遇到奇数,那么就会给这个数自动加1
。也就意味着你无论umask
的值设置为多少,新建的文件默认都不会有执行权限的!是不是很哇塞?
- 文件
666 - 035 = 6-0 6-3 6-5 = 63(+1)1(+1) = 642