问题描述

有一个脚本,只能是具有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”,且不容易监控和维护。

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

  1. linux无需管理员运行sh,linux下权限问题,如何让无root管理员权限的用户执行需root权限执行的脚本文件...

    匿名用户 1级 2013-07-12 回答 看了前面几位回答者我觉得应当采取一种简单的方法. 看你的意图允许任何人挂载/dev/sda5并且访问它 那么可以如此,任何人都可以挂载硬盘而无需密码,包括其 ...

  2. 记录ubuntu建立新用户并赋予root权限

    一.建立新用户 1. 登录root用户 su root 2. 创建新用户 sudo useradd -r -m -s /bin/bash 用户名 其中参数的意义如下:         -r:建立系统账 ...

  3. Java:Linux上java -jar xxx.jar命令执行jar包时出现Error: Invalid or corrupt jarfile xxx.jar解决方案

    Java:Linux上java -jar xxx.jar命令执行jar包时出现Error: Invalid or corrupt jarfile xxx.jar解决方案 参考文章: (1)Java:L ...

  4. linux上传文件权限命令,Linux 普通用户拿到root权限及使用szrz命令上传下载文件...

    1.如何拿到root权限 在shell里如果看到你的命令输入行最前面显示的是 $符号,说明目前账号只有系统的普通权限. 输入:sudo su 这时能看到shell的输入行最前面已经显示的是#号,说明已 ...

  5. Linux创建用户并赋予Root权限

    Linux创建用户并赋予Root权限 添加普通用户 [root@server ~]# useradd test //添加一个名为test的用户 [root@server ~]# passwd test ...

  6. linux:命令su、exit、sudo登入、退出用户、临时root权限详解。

    linux:命令su.exit.sudo登入.退出用户.临时root权限详解. 简单了解root用户:   su和exit:  sudo: sudo 使用时需要输入itheima的密码.输对了也不能使 ...

  7. vtigercrm中添加用户字段_linux笔记(一):linux添加用户并赋予root权限

    最近开始学习linux,不定期把一些学习到的东西记录到这里,权当笔记! Linux添加用户并赋root权限 一.添加用户并设置密码: 1.添加一个普通用户 2.设置密码,当看到"passwd ...

  8. linux怎么添加用户并赋予root权限

    linux怎么添加用户并赋予root权限? linux下添加用户并赋予root权限的方法: 1.添加用户,首先用adduser命令添加一个普通用户,命令如下: #adduser hadoop//添加一 ...

  9. linux推出超级用户_linux添加root权限用户

    方法一: 1.添加普通用户并设置密码 [root@centos6 ~]# useradd ggg [root@centos6 ~]# passwd ggg Changing password for ...

最新文章

  1. 135.003 智能合约后端优化和产品化
  2. WebRTC实时音视频技术基础:基本架构和协议栈
  3. beego数据库orm操作数据表返回数组
  4. SQL Server 数据库没有有效所有者的三种解决办法
  5. 程序员面试金典 - 面试题 17.15. 最长单词(排序+递归)
  6. python json操作_4个小窍门,让你在Python中高效使用JSON
  7. 小程序 cover-view 字体_【企商云】2021年,要知道的9个小程序开发流程清单
  8. 千方科技的中场战事:选择、进化与野望
  9. jQuery→简介引入、jQuery类数组对象$()与DOM对象、各种选择器、attr()、html() 、text()、val()
  10. Unity Application Block 1.0系列(7): Lifetime Managers
  11. 联想服务器安装win10系统安装教程,联想win10企业版操作系统安装步骤详解
  12. 北京市关于印发建筑工人实名制管理办法(试行)的通知
  13. php 405 not allowed,405 Not Allowed 错误
  14. Echarts图的图例为自定义图片
  15. python键盘控制_Python 键盘/鼠标控制
  16. Onedrive服务器位置,移动或更改Windows 10中OneDrive文件夹的位置 | MOS86
  17. Pspice仿真实验 例B-1
  18. linux如何测试IP和端口是否能访问
  19. 计算机助理职称考试成绩查询,初级成绩可以查询了!
  20. Win7 的安全快捷键使用技巧

热门文章

  1. 分布式学习笔记-唯一主键生成方式
  2. 系统工程 软件工程(第三版)SCAU
  3. org.eclipse.jdt.internal.compiler.CompilationResult.getProblems()[Lorg/eclipse/jdt/core/comp
  4. Symbian 基本概念
  5. ASP.NET Core 改变 content 和 web root(wwwroot) 目录路径
  6. C#实现excel文件的读取、写入以及异常处理,附源码程序
  7. js 中使用idx模块方便获取链条式的对象属性值
  8. 商务礼仪培训,细节决定成败
  9. 杭州薰衣草庄园以及停车场
  10. 余弦知乎living