- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我编写的一个 Python 扩展需要 root 访问权限才能执行单个硬件初始化调用。我不想仅仅为了我的扩展中的这个调用而以 root 身份运行整个脚本,所以我想编写一个包装器来执行此初始化,然后再降低到用户权限并运行实际脚本。
我打算让这个包装器通过 sudo
运行,例如
$ sudo devwrap python somescript.py
我正在考虑类似(更新以修复几个错误):
int main(int argc, char * argv[])
{
if(argc < 2) return 0;
int res = do_hardware_init();
if(res != OK_VALUE)
{
// Print error message
return HW_ERR;
}
const char *sudo_uid = getenv("SUDO_UID");
if(sudo_uid)
{
int real_uid = (int) strtol(sudo_uid, NULL, 0);
setuid(real_uid);
}
return execvp(argv[1], &argv[1]); // No return if successful
}
所以我有三个问题:
execvp
调用看起来也有点奇怪,但据我所知,它在正确的位置有参数)。execvp
手册页说“应用程序不应直接访问 environ 数组” - 这是否会调用 getenv
一个坏主意?execvp
更好的调用,所以我可以执行 sudo devwrap somescript.py
(注意缺少“python”)最佳答案
getenv()
不是直接访问 environ
数组 - 这是干净的。直接访问 environ
数组意味着“strcpy(buffer, environ[3])”或类似的东西。#!/usr/bin/env python
),您已经可以做您想做的事了 - somescript.py
当然,必须是可执行的。我在第一部分看到的问题取决于您如何处理硬件初始化错误。如果省略的错误处理没有退出,那么当你没有通过“sudo”运行时,你可能会得到一个核心转储(或段错误),因为你在空指针上运行 strtol()
。如果 do_hardware_init()
本身在失败时退出,则没有问题,除非用户找到一种方法从“sudo”破坏环境。我真的认为如果 SUDO_UID 没有合理设置,你应该验证环境并退出并出现错误。 root 会想要运行这个扩展吗?
我没有查看 sudo
的规范,看它确实设置了 SUDO_UID 环境变量 - 我假设你是正确的。
用户键入此内容会产生什么后果?
sudo devwrap ls
它执行硬件初始化、重置 UID,然后运行 ls
- 可能不会造成太大危害,但可能不是您想要的。那有关系吗?你能完全控制它吗?
如果参数计数小于两个,您可能应该给出错误退出,而不是成功退出。
要求人们通过“sudo”运行扩展是非常不合常规的。
您确定没有其他方法可以实现吗?初始化有什么要求?是对所有进程执行一次,还是每个进程执行一次(因此链接至关重要)?
你能简单地让 devwrap 程序成为 SUID root 吗?然后,您需要以不同方式重置 UID:
setgid(getgid());
setuid(getuid());
这会在执行命令之前删除任何 SGID-ness 和任何 SUID-ness。很难造成重大损害。如果安装的程序没有 SGID,则 setgid()
调用是否是强制性的尚不清楚,但这也没有坏处。
关于setuid 包装器的注意事项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4212387/
我正在运行PHP脚本,并继续收到如下错误: 注意:未定义的变量:第10行的C:\ wamp \ www \ mypath \ index.php中的my_variable_name 注意
我正在运行PHP脚本,并继续收到如下错误: 注意:未定义的变量:第10行的C:\ wamp \ www \ mypath \ index.php中的my_variable_name 注意
我正在运行PHP脚本,并继续收到如下错误: 注意:未定义的变量:第10行的C:\ wamp \ www \ mypath \ index.php中的my_variable_name 注意
我正在运行一个PHP脚本,并且继续收到如下错误:。第10行和第11行如下所示:。这些错误消息的含义是什么?。为什么他们突然出现了?我多年来一直使用这个脚本,从来没有遇到过任何问题。。我该怎么修理它们呢
当我在 flutter clean 之后运行 flutter run 或 debug my code 时显示此错误 Note: C:\src\flutter.pub-cache\hosted\pub.
My Goal: To fix this error and be able to run my app without an error. Error Message: Note:D:\Learni
前言:今天在解决一个问题时,程序总是不能输出正确值,分析逻辑思路没问题后,发现原来是由于函数传递导致了这个情况。 LeetCode 113 问题:给你二叉树的根节点
我正在 R 中开发一个包,当我运行时 devtools::check()我收到以下说明。 checking DESCRIPTION meta-information ... NOTE Malforme
获得通知和警告波纹管 Notice: Use of undefined constant GLOB_BRACE - assumed 'GLOB_BRACE' in /var/www/html/open
我正在准备一个 R 包以提交给 CRAN。 R CMD 检查给了我以下注意: Foreign function calls to a different package: .Fortran("cinc
我正在尝试从以下位置获取数据: http://api.convoytrucking.net/api.php?api_key=public&show=player&player_name=Mick_Gi
我有这段代码,但我不明白为什么我仍然有这个错误,我已经尝试了所有解决方案,但无法解决这个问题:-注意:未定义索引:product_price-注意:未定义索引:product_quantity-注意:
This question already has answers here: “Notice: Undefined variable”, “Notice: Undefined index”, and
我正在尝试从以下位置获取数据: http://api.convoytrucking.net/api.php?api_key=public&show=player&player_name=Mick_Gi
切记,在PHP 7中不要做的10件事 1. 不要使用 mysql_ 函数 这一天终于来了,从此你不仅仅“不应该”使用mysql_函数。PHP 7 已经把它们从核心中全部移除了,也就是说你需要迁移
前几天安装了dedecms系统,当在后台安全退出的时候,后台出现空白,先前只分析其他功能去了,也没太注意安全,看了一下安全退出的代码,是这样写的: 复制代码 代码如下: function ex
我使用此代码来检查变量$n0、$n1、$n2是否未定义。 但每次未定义时我都会收到通知。我的代码是一种不好的做法吗?还有什么替代方案吗?或者只是删除通知,代码就可以了? if
编写代码时处理所有警告是否重要?在我公司中具有较高资历的开发人员坚持认为警告是无害的。诚然,其中一些是: Warning: Division by zero Notice: Undefined ind
我有一个搜索查询,执行搜索查询后,我将$ result放入数组中。 我的PHP代码- $contents = $client->search($params); // executing the se
This question already has answers here: “Notice: Undefined variable”, “Notice: Undefined index”, and
我是一名优秀的程序员,十分优秀!