【问题标题】:node.js with mkdir/mkdirp and setuid带有 mkdir/mkdirp 和 setuid 的 node.js
【发布时间】:2015-02-16 14:27:20
【问题描述】:

我正在尝试使用 node.js mkdirp 在另一个用户区创建目录。

换句话说,我有用户 foo 和 bar。我希望 mkdirp 以用户 foo 的身份运行,但在 bar 区域创建一个目录。

从之前的 SO 帖子中,经过大量试验,看来这是无法做到的。我尝试通过 usermod 将两个 bar 放入 foo 的组,将 foo 放入 bar 的组,并广泛使用 setfacl

这对我来说有点奇怪,考虑到我能够 su foo; 并在 bar 的目录中创建目录、触摸、删除等。

我什至尝试过使用常规的 fs.mkdir 命令,但也有同样的问题(可能并不奇怪)——代码如下。

当节点程序第一次启动时,我使用 setuid/setgid 将运行权限从用户“root”降级为用户“foo”。

我的问题:是否有可能以某种方式保留 root 权限,但将 root 权限限制得足够长,只为了运行 mkdirp 命令而没有别的?

感谢大家的时间和考虑。我的实验代码如下:

fs = require('fs') ;
process.setgid(556);  // foos groupid
process.setuid(560);  // foos userid

fs.mkdir('/test1/test2/testTester/', 0770, function(err){
   if (err) console.error(err)   else console.log('works!');
});

id foo;

uid=560(foo) gid=556(foo) groups=556(foo),512(bar)

标识栏;

uid=515(bar) gid=512(bar) groups=512(bar)

【问题讨论】:

    标签: node.js mkdir


    【解决方案1】:

    我找到了一个变通的解决方案(目前) - 使用 visudo 并授予用户 foo mkdir 权限:

    visudo ; ## 包括以下行:

    foo ALL=(ALL) NOPASSWD: /bin/mkdir,/bin/chown

    这是我的工作 node.js 测试脚本:

    exec = require('exec');
    
    process.setgid(556);  // foo's groupid
    process.setuid(560);  // foo's userid
    
    exec('sudo /bin/mkdir --parents /test1/test2/testTester/; ', function(error,stdout,stderr){
        if (error == '' ) {     // null does not work here for some reason
            exec('sudo /bin/chown bar:bar  /test1/test2/testTester/; ', function(error,stdout,stderr){
                if (error != '' ) {
                     console.log('chown exec error: ' + error);       
                }
            });
        } else {
            console.log('mkdir exec error: ' + error);
        }
    });
    

    一如既往,欢迎和赞赏任何 cmets。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-11-18
      • 2012-03-03
      • 2013-11-03
      • 2021-12-30
      • 2012-09-02
      • 2011-12-27
      • 2019-05-25
      相关资源
      最近更新 更多