相关疑难解决方法(0)

从setuid root C程序调用脚本 - 脚本不以root身份运行

我需要以root身份运行bash脚本(无密码sudo或su不可行),因为你无法在Linux中设置脚本,我想从可执行文件调用它并使其成为 setuid:

$ cat wrapper.c
int main(void)
{
        system("/bin/bash ./should_run_as_root.sh");
}
$ gcc -o wrapper wrapper.c
$ sudo chown root wrapper
$ sudo chmod ug+s wrapper
$ ll wrapper
-rwsr-sr-x 1 root users 6667 2009-02-17 11:11 wrapper
$
Run Code Online (Sandbox Code Playgroud)

这有效 - 就像正确运行脚本一样 - 但脚本以执行"./wrapper"的用户身份运行.

为什么?以及如何正确实现这一点?

谢谢!

c scripting setuid

25
推荐指数
2
解决办法
4万
查看次数

如何在if语句中使用按位运算符?

我想写这样的东西:

if [[ ( releases["token"] & $MASK ) -eq 1 ]]; then
Run Code Online (Sandbox Code Playgroud)

但我得到的错误是:

意外的令牌"&",预期的条件二元运算符

如何在if语句中使用按位运算符?

bash shell bit-manipulation

15
推荐指数
2
解决办法
2万
查看次数

如果目录在nodejs中可写,最便携的方法是什么?

一位朋友问我这个问题,我给了事实上两个选择.

第一种方法,测试文件权限:

//adapted from https://stackoverflow.com/questions/11775884/nodejs-file-permissions#answer-11781404
var fs = require('fs')

function canWrite(directory) {
 var stat = fs.statSync(directory)

 // 2 is the octal value for chmod -w-
 return !!( 2 & (stat.mode & parseInt('777', 8)).toString(8)[0] ) //first char is the owner
}
Run Code Online (Sandbox Code Playgroud)

如果user(process.uid)不是文件系统所有者(stat.uid)也不在它的group(process.gid vs stat.gid)中怎么办?它仍然会获得644权限并且无法写入.

我们怎样才能真正知道(使用nodejs)当前用户属于文件系统组(stat.gid)?容易在bash中,但可移植它会是与一个的NodeJS乱七八糟.

第二种方式,懒惰:

var fs = require('fs')
var canWrite = true

try {
  fs.writeFileSync('./test')
  fs.unlinkSync('./test')
} catch(e) {
  canWrite = false
}

if(canWrite) {
 //go …
Run Code Online (Sandbox Code Playgroud)

node.js

9
推荐指数
1
解决办法
3728
查看次数

标签 统计

bash ×1

bit-manipulation ×1

c ×1

node.js ×1

scripting ×1

setuid ×1

shell ×1