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

本文介绍了如何在Linux环境中,通过编写可执行程序并利用setuid权限,允许普通用户执行原本需要root权限的脚本,以满足特定的安全和使用需求。文中提供了一个简单的实现示例,并警告了直接使用SetUID权限可能带来的风险和局限性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题描述

        有一个脚本,只能是具有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 <&
### Linux Root 用户权限特性与安全性 #### 1. **Root 用户的定义** 在 Linux 中,`root` 是系统的超级管理员账户。它拥有最高级别的权限,能够访问和控制整个系统中的所有资源[^1]。 #### 2. **Root 用户与其他用户的区别** - `root` 用户可以直接执行任何命令并修改系统配置。 - 非 `root` 的普通用户通常需要通过 `sudo` 命令临时获取超级用户权限来完成特定任务。 即使某些用户被赋予了 `root` 权限(即可以通过 `sudo` 执行管理操作),他们仍然不是真正的 `root` 用户。这些用户的行为受到更严格的审计记录,并且他们的权限范围可以由系统管理员进一步限制。 #### 3. **Root 密码的安全性** 新安装的 Ubuntu 系统默认不会设置 `root` 密码,这意味着无法直接使用 `su` 切换到 `root` 账户。如果需要启用 `root` 登录,则必须先为其分配一个密码。此过程应由具备管理员权限的用户完成,例如创建初始账户时指定的那个用户[^2]。 #### 4. **关于文件权限的问题** 尽管理论上讲作为超级用户的 `root` 可以无视常规文件所有权规则去更改任意对象的状态,但在实际应用当中可能会遇到特殊情况——比如当面对某些特殊设备或者挂载点上的文件时,即便你是 `root` ,也可能发现自己无法正常调整其属性。这通常是由于底层存储机制或操作系统设计所决定的[^3]。 #### 5. **安全建议** 鉴于直接以 `root` 身份工作存在极大风险,推荐仅在必要时刻才切换至该模式下作业;平时尽量依赖标准账号配合必要的提权手段来进行日常维护活动。此外还需定期审查日志文件以便及时察觉潜在威胁行为的发生迹象。 ```bash # 修改 root 密码示例 sudo passwd root ``` 上述脚本展示了如何为 root 设置一个新的密码。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值