gpt4 book ai didi

使用具有 u+s 权限的重启的 C 程序

转载 作者:行者123 更新时间:2023-12-04 18:29:20 25 4
gpt4 key购买 nike

...我是 Ubuntu 上的 C 编程新手,所以如果我太菜鸟,请多多包涵。

我有一个 C 文件,在编译时分配给特定用户( testUser ),并在他们作为 shell 登录时运行。用户对相关系统没有 sudo 权限。基本上,这个 shell 允许用户在登录时更新文件(/var/wwww/testfile),然后重新启动系统。当然,重新启动给我带来了一些问题,因为他们没有 super 用户权限。

//file: testShell.c
#include <unistd.h>
//#include <linux/reboot.h>

int main(void)
{
execl("/usr/bin/nano", "nano", "/var/www/testfile", NULL);
execl("/usr/bin/shutdown", "shutdown", "-h 0", NULL);
//reboot(LINUX_REBOOT_CMD_RESTART);
return 0;
}
  • 该文件编译得很好 测试壳
  • chown root:root testShell
  • 使用 授予 SetUID chmod u+s testShell
  • 复制文件 cp testShell/bin
  • 更新用户帐户以使用 shell chsh -s/bin/testShell testUser

  • 我已经阅读了有关关机的手册页并尝试在程序本身中使用 reboot能够重新启动系统(目前是 Ubuntu 12.04)。我什至尝试过发布的“init 6”系统调用 here ,但一切都无济于事。我还读到使用 system() 调用并不是一个特别好的主意:我已经尝试过了,但仍然没有乐趣。

    我的理解是,如果我正确分配权限然后 SetUID 文件,运行该文件的任何人都将隐含地在所有者权限下运行它,在这种情况下为 root。事实上,testUser 正在更新的/var/www/testfile 归 root 所有,所以有些东西可以正常工作。

    有什么想法我哪里出错了吗?

    最佳答案

    很简单:直接使用execl启动 nano 并且......如果它正常工作,永远不要从它返回!

    您应该使用 fork - exec-wait。

    您将在 SO https://stackoverflow.com/a/19099707/3545273 的其他帖子中找到完整示例

    关于使用具有 u+s 权限的重启的 C 程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25669481/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com