node.js - `fs.mkdir` 正在创建与指定权限不同的目录

标签 node.js unix permissions fs

由于我的 Node 程序使用的模块,它需要 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 是什么意思(请随时在评论中告诉我),所以我认为我们可以放弃它。这是另一个的意思:

  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 permissoins,组有 rwx permissoins,其他人都有 rwx 权限......?

最佳答案

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

您可以使用 process.umask(newmask);

为您的 Node 进程覆盖它

关于node.js - `fs.mkdir` 正在创建与指定权限不同的目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30815154/

相关文章:

linux - cron 任务不写入文件

c++ - 如何使用 fgets 获取整行

android - 安全异常 : Permission Denial: reading (only on emulator)

c++ - RegOpenKeyEx 访问拒绝读取 HKEY_LOCAL_MACHINE

javascript - Mocha 的 beforeEach() 和 did() 函数不起作用

javascript - Node.js 无法请求 squarespace 站点?

c - 应用程序正在使用哪些环境变量

mysql - 要插入数据库的数千条记录

node.js - db.getCollectionInfos 不是函数

mongodb - Calipso安装权限问题