一、目录权限
前面学习了文件的权限rwx,对于文件来说可以阅读文件的内容(r),修改文件内容(w),把文件当作为脚本或应用程序执行(x)。对于目录呢?
linux中目录也是一种文件,与常规文件不同:
- r权限:表示可以浏览目录中的内容,即用ls可以查看目录中的内容。
- w权限:表示可以在目录中添加文件和删除文件,即可写权限。
- x权限:由于目录与执行没有关系,但为了统一我们也叫执行权限。表可可以搜索这个目录中的文件及可以进入目录中。
没有了x权限,老陌测试中发现:进不了目录中,ls 目录时能看到目录中的文件名,但文件的属性(比如时间,权限等)都无法读取,也就是无法查找,相当于啥也干不了,所以目录必须有x权限才可以用。
(一)新目录默认权限
当我们新建立一个目录时,发现目录的权限是rwxrwxr-x,这表示:
- 其它人有读取目录中的内容的权限
- 其它人有搜索,进入目录的权限。
- 只有文件所有者和组所有者有修改和删除目录中的内容的权限。
(二)主目录的权限
我用centos测试,创建一个用户后权限是rwx------,这说明主目录是受保护的,其它人是不可以查看和修改的,即使此主目录中的子目录权限是rwxrwxrwx,外面的用户也无法访问,相当于门关上了。
在linux中只有在主目录里和/tmp目录中才可以创建文件夹,其它位置都没有权限,除非管理员在其它位置给用户分配一个目录。
二、文件权限的八进制表示法
rwx可以用八进制数表示,如图:
每个位rwx对应一个数字,这些数字和就代表了rwx,如果是空位-,则用0表示。
分析: rwxr-xr-x
rwx = 4 + 2 + 1 = 7
r-x = 4 + 0 + 1 = 5
r-x = 4 + 0 + 1 = 5
最终:rwxr-xr-x可以表示为755
如果我们要设置file文件的权限为rwxr-xr-x,可以直接写成:
chmod u=rwx,g=rx,o=rx file
chmod 755 file
我们发现第二种方式很方便,而且对于chmod o-x file这种方式,字面上用户并不能知道整个文件的权限,而通过数字可以分析出文件的权限。
分析:644的文件权限
6 = 4 + 2 + 0 = rw-
4 = 4 + 0 + 0 = r--
4 = 4 + 0 + 0 = r--
所以644的权限就是 rw-r--r--
三、控制默认权限
当我们新建立一个文件或目录时会有一个默认的权限,文件的默认权限是664(rw-rw-r--),目录的默认权限是775(rwxrwxr-x)。
默认的权限:对于文件来说有读写权限,其它人只读。对于目录来说有读写权限,其它人只能读和搜索文件,不能在文件夹里创建和删除文件。
文件及文件夹的默认权限通过umask来确定,umask的值决定着创建文件及文件夹时的默认权限。linux内核创建文件的默认最大权限是666(rw-rw-rw-),创建目录的默认最大权限是777(rwxrwxrwx), 之后用这个默认的最大权限减去umask得到最终的默认权限。
- 最终文件权限为:666减去umask的值
- 最终目录权限为:777减去umask的值
注意这里的减法,有自己的运算规则。对于目录来说直接相减,对于文件来说则不同:
- umask 的值是022(全是偶数),则用666-022 = 644
- umask 的值是123(部分位是奇数),则666-123=644,本来应该是:543,但奇数位减完后要加1,所以结果是:644
四、修改umask
#显示当前的umask值
umask
#设置umask的值
umask 022
例:我想创建文件,得到的默认权限是:rw-rw----
由于文件默认最大权限是666,而6就是rw-权限,所以umask的前两位是00,最后一位要把所有权限去掉,直接减去6就行了,所以umask的值应该是: 006
设置完umask的值对创建目录也是有影响的,由于目录的最大默认权限是777,所以其它人的权限变成了1, 也就是--x。当然我不想这样,我的目录不想让别人看到,所以应该把umask设置为7, 这样文件和目录其它人都不可用了。
当退出登录时umask设置的值就消失了,所以我们应该加到~/.bashrc中。这个文件当用户登录时调用, 把umask的值写到这个文件里,用户一登录就设置umask了。
echo "umask 007" >> ~/.bashrc
最后说一下系统默认的umask值是022