我从来没有真正知道chmod如何工作直到今天.我按照一个教程解释了一件大事.
例如,我读过你有三个不同的权限组:
>所有者(你)
>组(g)
>每个人(o)
基于这三个群体,我现在知道:
>如果文件归用户所有,则用户权限将确定访问权限.
>如果文件组与用户组相同,则组权限确定访问权限.
>如果用户不是文件所有者,并且不在组中,则使用其他权限.
我还了解到你已获得以下权限:
>读(r)
>写(w)
>执行(x)
我创建了一个目录来测试我新获得的知识:
mkdir test
然后我做了一些测试:
chmod u+rwx test/
# drwx------
chmod g+rx test/
# drwxr-x---
chmod u-x test/
# drw-r-x---
在搞砸了一段时间后,我想我终于得到了chmod的挂起以及你使用这个命令设置权限的方式.
但…
我还有几个问题:
>一开始的d代表什么?
>包含插槽的名称和用途是什么以及它可以包含哪些其他值?
>我该如何设置和取消设置?
>这个d的价值是多少? (因为你只有7 = 4 2 1 7 = 4 2 1 7 = 4 2 1)
>为什么人们有时会使用0777而不是777来设置权限?
但是,由于我不应该提出多个问题,我会尝试在一个问题中提出这个问题.
在基于UNIX的系统中,例如所有Linux发行版,关于权限,第一部分(d)代表什么,以及这部分权限的用途是什么?
我想补充一点,我是整个Unix / Linux平台的新手,如果这是一个愚蠢的问题,请原谅我问.
解决方法:
我将分三部分回答您的问题:文件类型,权限和各种形式的chmod的用例.
文件类型
ls -l输出中的第一个字符表示文件类型; d表示它是一个目录.它无法设置或取消设置,具体取决于文件的创建方式.您可以在ls documentation中找到完整的文件类型列表;那些你可能会遇到的是
> – :“常规”文件,使用任何可以写入文件的程序创建
> b:可以使用mknod创建阻止特殊文件,通常是磁盘或分区设备
> c:字符特殊文件,也可以用mknod创建(参见/ dev示例)
> d:目录,可以使用mkdir创建
> l:符号链接,可以使用ln -s创建
> p:命名管道,可以用mkfifo创建
> s:socket,可以使用nc -U创建
> D:door,由Solaris / openindiana上的某些服务器进程创建.
权限
chmod 0777用于在一个chmod执行中设置所有权限,而不是将更改与u等组合.四个数字中的每一个都是表示一组权限的八进制值:
> suid,sgid和“sticky”(见下文)
>用户权限
>组权限
>“其他”权限
八进制值计算为权限的总和:
>“阅读”是4
>“写”是2
>“执行”是1
对于第一个数字:
> suid是4;具有此位集的二进制文件作为其所有者用户(通常为root)运行
> sgid是2;具有此位集的二进制文件作为其所有者组运行(这用于游戏,因此可以共享高分数,但是当与游戏中的漏洞结合时通常存在安全风险),并且在具有此位集的目录中创建的文件属于默认情况下目录的所有者组(这对于创建共享文件夹很方便)
>“粘性”(或“限制删除”)为1;具有此位设置的目录中的文件只能由其所有者,目录所有者或root删除(有关此常见示例,请参阅/ tmp).
有关详细信息,请参见the chmod manpage.请注意,在所有这些中,我忽略了可以改变用户对文件的权限的其他安全功能(SELinux,文件ACL ……).
根据文件类型(常规文件或目录)和底层系统,特殊位的处理方式不同. (这在chmod联机帮助页中提到.)在我用来测试它的系统上(在ext4文件系统上使用coreutils 8.23,运行Linux内核3.16.7-ckt2),行为如下.对于文件,除非明确设置,否则特殊位始终被清除,因此chmod 0777等效于chmod 777,并且两个命令都清除特殊位并为每个人提供对该文件的完全权限.对于目录,特殊位永远不会使用四位数字形式完全清除,因此实际上chmod 0777也等同于chmod 777但它有误导性,因为一些特殊位将保持原样. (此答案的先前版本错误.)要清除目录上的特殊位,您需要使用我们,gs和/或显式或指定负数值,因此chmod -7000将清除目录上的所有特殊位.
在ls -l输出中,suid,sgid和“sticky”出现在x条目的位置:suid是s或S而不是用户的x,sgid是s或S而不是组的x,而“sticky”是t或者T而不是其他人的x.小写字母表示特殊位和可执行位都已设置;大写字母表示仅设置了特殊位.
各种形式的chmod
由于上面描述的行为,使用chmod中的完整四位数可能会令人困惑(至少事实证明我很困惑).想要设置特殊位和权限位时,它很有用;否则,如果您正在操作文件,则清除这些位,如果您正在操作目录,则会保留这些位.所以chmod 2750确保你至少得到sgid和u = rwx,g = rx,o =;但是chmod 0750不一定会清除特殊位.
使用数字模式而不是文本命令([ugo] [= – ] [rwxXst])可能更多的是习惯和命令的目的.一旦习惯使用数字模式,通常更容易指定完整模式;能够使用数字模式考虑权限很有用,因为许多其他命令可以使用它们(install,mknod …).
一些文本变体可以派上用场:如果您只是想确保任何人都可以执行文件,那么无论其他权限是什么,chmod a x都会执行此操作.同样,只有在已设置执行权限之一或文件是目录时,X才会添加执行权限.这对于全局恢复权限非常方便,无需特殊情况文件v.目录.因此,chmod -R ug = rX,u w,o =等效于将chmod -R 750应用于所有目录和可执行文件,并将chmod -R 640应用于所有其他文件.
标签:linux,permissions,chmod,ls
来源: https://codeday.me/bug/20190808/1621938.html