【问题标题】:`fs.mkdir` is creating the directory with different permissions than those specified`fs.mkdir` 正在创建与指定权限不同的目录
【发布时间】:2023-04-05 13:07:01
【问题描述】:

由于我的节点程序使用的模块,它需要 root 才能运行。这是因为它必须在端口 80 上运行 HTTP 服务器(如您所知,像这样的较低端口需要 root 才能使用)。

但是,该程序还使用fs 方法来创建文件。只要我可以更改权限,我不介意root是否是所有者......但这正是我遇到的问题。

我正在使用fs.mkdir 函数来创建一个目录,如下所示:

(假设这个文件名为create.js

fs.mkdir(__dirname + "/.loud", 0777, function(err){
  if (err) console.log("Failed to create file at " + __dirname + "/.loud");
});

当执行它时(记住,通过 sudo,sudo node create.js)它实际上创建了文件夹...但是提供的权限(0777)是错误的!...

如果我没记错的话,7 表示读、写和执行。将它用于 3 个字段(777 + 前导 0 将其表示为八进制)应该意味着每个人都可以在此文件夹中读取、写入和执行...但这是我在检查文件夹时得到的权限:

[imac] jamen : ~/Tests/mkdir $ ls -a -l .
...
drwxr-xr-x 2 root  root  4096 Jun 12 22:27 .loud

所以,让我们分开开始权限部分:

d, rwx, r-x, r-x

所以,我不知道 d 是什么意思(请随时在 cmets 中告诉我),所以我想我们可以把它扔掉。这是另一个意思:

  1. 所有者可以读取、写入和执行(如预期)
  2. 该组可以读取和执行(什么?!我们指定7,这意味着它也应该可以写入???)
  3. 其他人都可以读和执行(再次……我们还指定了7,应该每个人也可以写吗?)

所以,为了解决这个问题,我去冒险了found this post on SE.Unix,看了之后觉得还不如尝试指定十进制格式的权限,而不是八进制格式...

这是我更改 create.js 文件的方式:

fs.mkdir(__dirname + "/.loud", 511, function(err){
  if (err) console.log("Failed to create file at " + __dirname + "/.loud");
});

(由于八进制的 0777 表示为十进制的 511)

但是,不幸的是,这给出了完全相同的结果(是的,我确实在再次运行之前删除了该文件夹,否则 NodeJS 会在回调中传递一个错误):

[imac] jamen : ~/Tests/mkdir $ ls -a -l .
...
drwxr-xr-x 2 root  root  4096 Jun 12 22:35 .loud

我对 Unix 的权限方案有什么误解,还是我在 NodeJS 中犯了一个错误?

我将如何解决此问题,以便文件夹获得权限0777,这意味着所有者为 rwx 权限,该组具有 rwx 权限,其他所有人都具有 rwx 权限...?

【问题讨论】:

    标签: node.js unix permissions fs


    【解决方案1】:

    因为它将umask 应用于您的模式。在控制台中输入umask,您将看到 022 或 0022。

    您可以使用process.umask(newmask); 为您的节点进程覆盖它

    【讨论】:

    • 那么,在这种情况下,我想做process.umask(0)?因为我读到 umask 行为有点像这样(或者至少在我的场景中):0777 - 0022 = 0755...?
    • 没错,它是一个二进制文件,并且已应用
    • 还有一个问题,您认为在代码本身中包含 umask 是否明智(就像您在 process.umask 中提供的那样),还是取决于库的用户? (例如,他们必须自己在~/.bashrc 或其他地方设置 umask)
    • 您不应更改库中的全局变量。由用户承担这些责任。
    • 我真的不明白这个答案在说什么
    猜你喜欢
    • 2016-12-29
    • 1970-01-01
    • 2017-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多