[denoland/deno]Deno.mkdir 使用 sudo 导致意外结果

2024-03-04 739 views
1

当我使用 sudo 和 use 运行 deno 时await Deno.mkdir("./foo.txt",{ mode: 0o777 }),文件权限是,drwxr-xr-x尽管预期结果是drwxrwxrwx.

在使用 sudo 运行 Deno 时,是否有解决方法可以获取我所需的权限?

回答

5

我怀疑这与 sudo 有关,我想这更多是因为默认的 umask,尝试在运行 mkdir 之前将其更改为 0,(使用 Deno.umask(0o000))

4

它肯定与 sudo 有关,因为我在没有 sudo 的情况下尝试了它,结果就是所需的结果。

5

umask 是否有效?

6

我不知道。我使用 sudo 和不使用 sudo 运行上述命令。它可以在没有 sudo 的情况下工作,并且在 Ubuntu 上不能与 sudo 一起工作。在我看来,这是一个 Deno bug,因为它不是预期的结果。

6

Sudo 和普通用户可以有不同的 umask 默认值。

如果您在 mkdir 之前运行 Deno.umask(0) 并且不起作用,那么我会感到惊讶。

这是 deno 中的 bug 的可能性很小,deno 只是转发到 rust,然后转发到执行 mkdir 系统调用的 libc。

0

sudo deno run -A mkdir.ts

错误:未捕获(承诺中) TypeError:Deno.umask 不是函数 Deno.umask(0);

但它适用于--unstable. 在不久的将来它会失去不稳定的状态吗?

您能否详细说明一下它的具体Deno.umask(0)作用、为什么它可以解决我的问题以及它是否会对我的服务器文件系统产生不良副作用?

非常感谢!

2

如果我传递 amodeDeno.mkdir仍然认为 deno 应该自动处理它。对我来说这是一个错误,否则你就不需要这个mode选项,这不是预期的结果。因此这是一个错误。

1

这就是 posix 的工作原理。我看到了命名约定,api 源自 posix,我期望作为用户的 posix 具有相同的行为,如果它不尊重 umask 那将是非常令人惊讶的。

8

但是mkdir -m 777 foo.txtsudo 在我的设备上可以工作,但await Deno.mkdir("./foo.txt",{ mode: 0o777 })不能。

7

mkdir 确实在内部调用 umask (您可以 strace 来检查),mkdir 只是一个 bash 函数,Deno.mkdir 不映射到它,它映射到实际的 posix 系统调用。

3

它应该就像 bash 中的 mkdir 一样。