node.js with mkdir/mkdirp and setuid



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

换句话说,我有用户Foo和Bar。 我希望让 MKDIRP 以用户 foo 身份运行,但在酒吧区域中创建一个目录。

从之前的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!');
});

傅;

uid=560(foo( gid=556(foo( 组=556(foo(,512(bar(

身份证栏;

UID=515(柱( GID=512(柱( 组=512(柱(

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

维苏多 ; ## 包括以下行:

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

这是我的工作节点.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);
    }
});

与往常一样,任何评论都非常欢迎和赞赏。

最新更新