我的作业中的问题是这样说的:
创建一个临时目录,为所有人提供所有权限,且不能删除
并将hello.sh复制到该目录中,为每个人提供执行权,但hello.sh将以所有者身份执行。
所以我创建了一个名为 temp 的目录并授予了如下权限:
chmod 555 temp
但是当我尝试 cp hello.sh 到 temp 时,我收到错误,因为 temp 的权限为 555。教授在这里到底想问什么?如何不允许删除目录但将文件复制到其中?
答案1
鉴于这是一项家庭作业,我不会给出确切的答案,但请考虑一下:如果给您分配了这项作业,则意味着已经向您解释了setuid
和位。sticky
这些知识应该足以完成这项任务。
答案2
Linux 将权限设置分为 3 组:
- 所有者 - 拥有该文件的用户
- 组 - 用户集
- 世界 - 不是所有者,也不是集团的一部分
可以授予以下权限:
- 读
- 写
- 执行
您可以使用命令通过向每个组应用所需的 ( ) 标签来chmod
设置每个组 ( ) 的权限。用于设置权限的数字实际上是每个组设置的二进制 ( ) 标志的十进制表示形式。例如,您想要设置允许以下操作的权限:Owner/User/World
Read/Write/Execute
0/1
- 所有者 - 读、写和执行
- 组 - 读取和执行(但不写入)
- 世界 - 没有权限
因此,在这种情况下,Owner
我们将拥有:read=1
,write=1
并execute=1
获得许可:
111 -> 7
将Group
具有:read=1
,write=0
并execute=1
获得许可:
101 -> 5
最后World
将有:read=0
,write=0
并execute=0
获得许可:
000 -> 0
此外,您可以设置一个所谓的粘性位到一个目录。它将阻止其他用户删除或重命名该目录中的文件。只有所有者才能删除或重命名该目录中的文件。因此,在您的情况下,正确的chmod
命令将如下所示:
chmod 1777 temp
其中777
允许read/write/execute
所有三个组,附加的1
是粘性位。