咱们总说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 即表明拥有读、可执行权限 # 以此类推...
对于文件shell
r
表示能够读取文件中的内容w
表示能够修改文件中的内容和文件的一些属性x
表示能够执行文件,普通用户还须要有r
权限才能正常执行对于目录安全
r
表示能够查询目录下的内容w
表示能够修改目录结构的权限,如新建文件或目录,删除文件或目录等x
目录没有执行一说,因此x
表示能够进入目录删除文件、修改文件名的权限是受父目录的w
权限控制的,和文件自身的权限无关bash
root
用户对全部文件和目录具备r
读权限服务器
root
用户对全部目录具备x
可执行权限,即进入目录的权限code
root
用户能够更改全部文件或目录的r
w
x
权限递归
chmod
命令可用于更改文件的r
读、w
写、x
执行权限ip
语法开发
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