300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > Linux 上如何让任意普通用户执行拥有root权限的特定脚本或者程序

Linux 上如何让任意普通用户执行拥有root权限的特定脚本或者程序

时间:2022-03-06 16:43:20

相关推荐

Linux 上如何让任意普通用户执行拥有root权限的特定脚本或者程序

问题描述

有一个脚本,只能是具有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 << "CMD is not supported!" << std::endl;}return 1;}

[demo@zzz tmp]$ sudo g++ test.cpp -o test[demo@zzz tmp]$ sudo chmod u+s test //Add setUID permission[demo@zzz tmp]$ ls -trl-rwsr-xr-x 1 root root 25264 Dec 17 15:40 test[demo@zzz tmp]$ sudo touch 1.txt-rw-r--r-- 1 root root 0 Dec 17 15:45 1.txt[demo@zzz tmp]$ ./test /usr/bin/chmod 777 1.txt-rwxrwxrwx 1 root root 0 Dec 17 15:45 1.txt

另一种更简单的方法,但不推荐

使用root权限给特定的可执行程序开启SetUID权限,且只有开启SETUID权限的命令可以被普通用户执行,这种方法局限性较多,如在开启SetUID权限的程序或者脚本执行没有开启权限的程序仍会遇到“Permission denied”,且不容易监控和维护。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。