问题描述:
有一个脚本,只能是具有root执行权限的用户来执行。这意味着只有root用户和拥有sudo权限的用户才能执行,但我们的需求是让普通用户在没有取得root权限的情况下也能执行,那么就开发另一个可执行程序,以支持普通用户拥有执行此脚本的能力。
解决方案:
1. 编写一个可执行程序用来执行只有root用户才能执行的操作,例如修改root用户所属文件的权限,并限制可以执行拥有root命令的范围,否则会造成灾难(任何用户都具有root权限),在这个程序中去执行真正需要root权限执行的脚本。而setuid的作用是“让执行该程序的用户以该程序的拥有者的权限去执行”。
2. 将该可执行程序的执行权限加上s (chmod u+s 可执行程序), 即让执行文件的用户以该文件所属组的权限去执行。
An example:
#include <iostream>
#include <set>
#include <stdlib.h>
#include <unistd.h>
int main(int argc, char** argv)
{
std::set<std::string> reservedCmd;
reservedCmd.insert("/usr/bin/chmod");
if (reservedCmd.count(std::string(argv[1])) != 0)
{
return execl(argv[1], argv[1], argv[2], argv[3], NULL);
} else {
std::cout <&