我们总说Linux系统是相对安全可靠的,这与Linux系统有着严格的权限管理这一点是密不可分的。关于权限方面Linux有很多限制机制,包括我们常说的文件基本权限rwx
, 访问控制权限ACL
还有美国国防部参与开发的极为复杂的SELINUX
等 。不过我们最常用的,也必须掌握的就是这个文件的基本权限了。如果权限过高会增加服务器的风险。所以对于了解各种权限以及给用户、文件分配合理的权限十分重要!
# 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
权限
chmod
命令可用于更改文件的r
读、w
写、x
执行权限
语法
chmod [选项] rwx的权限分值 文件或目录
chmod [选项] 身份标识(+|-)(r|w|x) 文件或目录
选项
-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
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
?
原文:https://www.cnblogs.com/qq1207501666/p/13190725.html