linux-shell 脚本

linux-shell 脚本

如何通过 sh 文件登录 Linux 中的 root 权限(举例)?

答案1

通常,你会有一个包含以下内容的文件:

#! /bin/sh
# This requires you to know the root password
su -

这将显示一个密码提示(除非您已经是 root 用户),并且一旦您输入了 root 密码,您将进入 root shell,就像您最初以 root 身份登录一样。

答案2

我猜你要求的是 setuid shell 脚本。也就是说,从普通用户 shell 中,以 root 权限执行 shell 脚本。setuid 脚本无法按预期工作,因为操作系统真正执行的是使用你的脚本作为参数调用的 shell 程序。Shell 不遵守你脚本上的 setuid 位。因此,这不会按你的意愿工作:

cia@pinkpony:~$ cat /tmp/iamweasel.sh 
#!/bin/sh
echo `id -u`
cia@pinkpony:~$ ls -la /tmp/iamweasel.sh 
-rwsr-sr-x 1 root root 23 2010-10-13 11:49 /tmp/iamweasel.sh

该脚本由 root 拥有,已设置 setuid 位,并且应该将我的有效用户 ID 打印为 0。但事实并非如此

cia@pinkpony:~$ /tmp/iamweasel.sh 
1000

您需要做的是使用二进制 setuid 包装器来执行脚本

包装器:

#include <unistd.h>
#include <stdio.h>
const char *shell="/bin/sh";

int main(int argc, char **argv)
{
    int rc = 0;
    /*dirty argv hack, close your eyes */
    argv[0] = shell;
    /*thank you*/
    seteuid(0);
    setegid(0);
    execv(shell,argv);
}

编译它

gcc -o wraproot wraproot.c

chown 和 setuid:

sudo chown root:root /home/cia/wraproot
sudo chmod oug+s /home/cia/wraproot

执行 shell 脚本:

cia@pinkpony:~$ id -u
1000
cia@pinkpony:~$ /home/cia/wraproot /tmp/iamweasel.sh 
0

但是您可能想使用 sudo,因为上面描述的解决方案的安全隐患……有点大。对于应该以 root 身份运行的自动执行任务,您可以在授予安全管理员用户的 sudoers 文件中使用 NOPASSWD 配置。

相关内容