如何通过 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 配置。