我正在尝试在目录中创建一个文件,但我得到:
`touch`: cannot touch ‘test’: Permission denied
这是我的命令:
[user@xxx api]$ ls -l
total 184
...
drwxrwxr-x 2 root root 4096 2016-04-12 14:38 public
..
[user@xxx api]$ cd ./public
[user@xxx public]$ touch test
touch: cannot touch ‘test’: Permission denied
答案1
您无法编辑该内容民众目录(如果没有)写和执行使用权。
您表明您正在尝试创建一个新文件。如果该
test
文件尚不存在public
,touch
将尝试创建一个新文件。如果没有写和执行对父目录的权限。遍历目录需要execute;需要 write 来添加新文件的 inode 条目。显然,您没有其中一项或两项权限。如果
test
文件已经存在public
,touch
则默认更新文件的修改时间。仅有的写访问文件这是必需的,因为修改日期/时间存储在文件的索引节点中。如果文件已存在,您将需要使用命令检查文件的权限,例如ls -l public/test
确定您是否具有写入权限。
目录的权限位掩码 ,rwxrwxr-x
表示:
- 用户
root
,即目录的所有者,具有对该目录的写权限目录如第一个rwx
块所示。该用户还可以读取目录(r
位)并遍历它以访问其内容(x
位)。 - 该组的成员
root
(即目录上的组)本身不是用户root
,也具有类似的读取、写入和遍历目录的权限目录rwx
如第二个块所示
所有其他用户仅具有读取和执行权限,如最后一个r-x
块所示。如前所述,对于目录,执行权限允许您遍历该目录并访问其内容。看这个问题为了更清楚地了解这一点。
我如何获得权限?
您需要与您的系统管理员(可能是您!)联系以执行以下操作之一:
- 让你成为
public/
目录的所有者使用类似 的命令chown user public/
。如果您是唯一需要拥有编辑权限的用户,这将是合适的。 - 创建一个具有合适名称的新组,也许,并使用类似 的命令
publiceditors
将其设置为目录上的组。确保您和任何其他需要修改目录的用户都被列为该组的成员。此方法适用于多个用户需要编辑功能的情况。public/
chgrp publiceditors public/
- 让您的用户帐户成为
root
团体成员(不是我会推荐的)。 - 为您提供访问权限登录或伪装成
root
,例如使用sudo
或su
使用root
密码 - 改变目录权限到授予所有用户写入权限,使用类似 的命令
chmod o+w public
。请注意,这给出了每个人在框中可以编辑和删除公共目录中的文件。*您可能不想要这个!
*在没有其他访问控制强制执行的情况下,例如内核中的强制访问控制。
做什么读,写和执行权限在目录上下文中意味着什么?
假设您在 Linux 机器上的目录上,读取权限位允许您读取目录列表。写权限位允许您更新列出的目录,这是必需的创造一份文件*,编辑名称一个文件的,取消链接(删除)文件。执行位允许您遍历目录、访问其文件等。更多信息Linux目录权限。
* 实际上,您正在将文件链接到目录中。大多数情况下,您会在创建文件时执行此操作,但也有更复杂的示例。例如,创建到最初存在于文件系统中其他位置的文件的硬链接将需要对该链接的目标目录的写访问权限,尽管您没有创建新文件。
为什么写访问目录?
您需要能够写入目录,以添加对要添加的文件的相关 inode 的引用。
答案2
关于民众目录权限,只有root用户或者root组的成员才能写入。
配置的(drwxrwxr-x)意味着:
- root用户拥有读写执行权限
- root 组具有读写执行权限
- 其他具有读取执行权限
验证您的用户是否位于根组中或使用以下命令向“其他”授予写入权限:
chmod o+w public
答案3
我也遇到过类似的问题,我发现我是普通用户,没有任何创建文件的权限。因此,我已将用户切换为root
command:
su <root user>
它将要求输入密码,输入您的 root 密码(如果 kali Linux 密码太高)
这解决了我的问题
答案4
您的用户没有“写入”权限。使用以下命令更改权限
chmod o+w public**
否则,您可以使用以下命令为所有人(所有者/组/其他)设置读写执行权限。 (不推荐这个选项,要了解的可以按照这个)
chmod 777 public**