[英]unsuccessfully call external shell script as non-root user
我希望A用户做为B用户的一些工作。 如果B是root用户,则可以,但非root用户失败。 以下是基本代码:
root.c:
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
int main()
{
setuid( 0 );
system( "/tmp/script_of_root.sh" );
return 0;
}
script_of_root.sh:
#!/bin/sh
echo $RANDOM >> /tmp/file_of_root
播放 :
$ cd /tmp
$ cc root.c -o root
$ su -
# chown root.root /tmp/root
# chmod 4755 /tmp/root
# exit
$ ./root
执行“ ./root”后,文件“ / tmp / file_of_root”将被更新。 但是,如果我将相同的内容应用于非root用户,则无法使用。 代码:
foobar.c但是:
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
int main()
{
setuid( 1001 ); // uid of user "foobar"
system( "/tmp/script_of_foobar.sh" );
return 0;
}
script_of_foobar.sh:
#!/bin/sh
echo $RANDOM >> /tmp/file_of_foobar
播放 :
$ cd /tmp
$ cc foobar.c -o foobar
$ su -
# chown foobar.users /tmp/foobar
# chmod 4755 /tmp/foobar
# exit
$ ./foobar
如果我以其他普通用户身份(而不是“ foobar”本身)运行“ ./foobar”,那将是错误的:
/tmp/script_of_foobar.sh: line 2: file_of_foobar: Permission denied
我很困惑。 为什么第二种情况不起作用?
最好的祝福。
仅当您是root用户或有效UID为1001时,foobar.c中的setuid调用才会成功。
所以。 如果您不是root用户,则setuid(1001)将失败,并且您将没有必需的权限来覆盖“ foobar”拥有的文件。
从输出看来,您的非root用户可以执行script_of_foobar.sh,但无法写入/ tmp / file_of_foobar。 / tmp的权限是否可能关闭? 我认为应该将其设置为1777。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.