我正在尝试使用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);
}
});
与往常一样,任何评论都非常欢迎和赞赏。