linux基础知识-12

Posted 老陌的博客

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux基础知识-12相关的知识,希望对你有一定的参考价值。

一、目录权限

前面学习了文件的权限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

以上是关于linux基础知识-12的主要内容,如果未能解决你的问题,请参考以下文章

VSCode自定义代码片段12——JavaScript的Promise对象

片段 getActivity 不起作用

逆向及Bof基础实践

[linux][c/c++]代码片段01

20155307刘浩《网络对抗》逆向及Bof基础

[linux][c/c++]代码片段02