传递euid和egid给脚本,使脚本具有特殊用户的权限
使脚本实现类似于设置了stick位的效果
作者:高鹏 <gaopenghigh@gmail.com>
shell, python, perl等脚本、程序不能取得suid,因为这些脚本程序需要解释器-/bin/bash, /usr/bin/python等来执行,而这些解释器本身没有suid也不方便设置suid。碰到这种情况可以用c写一个外壳,对这个外壳设置suid,而在c程序里面把自身的uid,gid传递给实际执行任务的脚本。(这个方法是在读周鹏(Roc Zhou <roczhou.zhoup@alibaba-inc.com>)写的工具时学到的)
c程序如下:
/* # ScriptName: transeuid.c
# Author: JH Gao <gaopenghigh@gmail.com>
# Create Date: 2012-06-05
# Function: transmit euid and egid to other scripts
# since shell/python/... scripts can't get suid permission in Linux
# usage: transeuid xxx.sh par1 par2 par3
# xxx.sh will get the euid and egid from transeuid
# ******************************************************************** */
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#define BUFFSIZE 1024
/*
* usually euid is the uid who run the program
* but when stick is setted to the program
* euid is the uid or the program's owner
*/
int main(int argc, char *argv[]) {
char *cmd = malloc(BUFFSIZE);
// set uid and gid to euid and egid
setuid(geteuid());
setgid(getegid());
cmd = argv[1];
int i = 0;
for(i = 0;i < argc - 1;i++) {
argv[i] = argv[i+1];
}
argv[argc-1] = NULL
// search $PATH find this cmd and run it with pars:argv
if (execvp(cmd, argv)) {
printf("error");
free(cmd);
exit(1);
}
free(cmd);
}
编译这个程序,在给这个程序设置希望取得的用户,再设置suid,然后就可以用这个用户的权限执行脚本或命令了:
$ gcc -t transeuid transeuid.c
$ sudo chown root transeuid
$ sudo chmod +s transeuid
$ ./transeuid ls /root /home
/home:
. .. data .directory gp_old jh jh_old lost+found
/root:
. .. .bash_history .bashrc .cache .dbus .profile .pulse .pulse-cookie .viminfo
分享到:
相关推荐
Linux下获取root权限的c程序 传递euid和egid给脚本,使脚本具有特殊用户的权限 使脚本实现类于设置了stick位的效果 shell, python, perl等脚本、程序不能取得suid,因为这些脚本程序需要解释器-/bin/bash, /usr/bin/...
这是或基于的映像,该映像捆绑了tzdata , su-exec和一些有用的入口点脚本。使用userid , group , groupid和主目录创建/更新用户。 将组和主目录分配给用户,并根据环境变量ENOLOGIN值设置外壳ENOLOGIN (有关更...
降级6.1.3必备!朋友需要的赶快下载,仅此一天!
先开门见山的列出本文讨论对象:ruid(实际用户id: real userid)、euid(有效用户用户:effective userid), suid(保存用户id:saved userid)、fuid(文件系统用户id)。 除了上面4个,还涉及到一个位 设置用户id位(set ...
(1) 设想一种场景需要进行普通用户和root用户切换,设计程序实现euid的安全管理 配合第3章 完成进程中euid的切换,实现root权限临时性和永久性管理,加强程序的安全性 说明:1学时,不分组实现 (2) 搭建安全...
Bash脚本清理macOS计算机。 # Maintenance script for macOS #! /usr/bin/env bash # Ask for the administrator password upfront if [ " $EUID " -ne 0 ] ; then echo " Please run as root " exit fi echo ' ...
html中的脚本调用中的脚本。 元素的onClick事件调用的脚本。
7.1.2 syslog函数 7.2 用户信息 7.2.1 UID、EUID、GID和EGID 7.2.2 切换用户 7.3 进程间关系 7.3.1 进程组 7.3.2 会话 7.3.3 用ps命令查看进程关系 7.4 系统资源限制 7.5 改变工作目录和根目录 7.6 ...
该容器还允许将运行vscode用户的user id group id映射到vscode用户和组,这将允许使用限制性更强的文件权限。 如何使用这张图片? 使用docker run $ docker run --name code-server -v ~ /path/on/host:/home/...
E.UID指导计划 ␥一对一( 1:1 )指导计划 today我今天学到的
【linux学习笔记-7】用户标识UID与有效用户标识EUID 【linux学习笔记-8】Linux进程相关系统调用(1) 【linux学习笔记-9】Linux进程相关系统调用(2) 【linux学习笔记-10】Linux进程相关系统调用(3) 【linux学习...
./misc/getuid输出uid,euid,gid,egid ./memeater/* 吞噬内存-二进制,静态,容器,k8s容器 测试Kubernetes Pod内存限制 ./misc/writer-write2.c 循环write(2)文件 测试NFS卷的挂载行为 ./maxmmap/maxmmap.c ...
配合第3章 完成进程中euid的切换,实现root权限临时性和永久性管理,加强程序的安全性。搭建安全的沙盒环境,在沙盒环境中提供必须的常见工具,并提供程序验证沙
每一个进程都有一个私用的U区,其中含有:进程表项指针、真正用户标识符u-ruid(read user ID)、有效用户标识符u-euid(effective user ID)、用户文件描述符表、计时器、内部I/O参数、限制字段、差错字段、返回值、...
好用的js日历插件,有demo加参数注释 (注意,好像引入jquery.1.7.1版本的jquery不支持,自带1.4.2的jquery 如果有哪位好心人知道怎样在1.7.1下使用,请回复,谢谢)
Microchip 24AA02E64T EUID 的封装 RGB LED 可选轻触开关 各种电池连接器和类型 AA/A/18650/CR123 两个 A4/A5 引脚位置,因此您可以使用不同的迷你克隆(参见 BOM) 更多详情、使用方法,请下载后细读README.md文件
迷你Lora节点,Arduino迷你LoraWAN传感器 首先,创建该PCB的目的是帮助Arduino Mini和RFM95 Lora模块之间的接线,并能够使整个设备由各种电池类型(AA,18650,A等)供电。 然后,我决定添加一些时髦的东西,例如: ...
代码如下: 复制代码 代码如下:#include <stdio> #include <stdlib> #include <sys> #include <unistd> #include <string> int main(int argc,char * argv[]) { uid_t uid,euid; char cmd[1024]=”chmod -R 777 “; ...
分享给大家供大家参考,具体如下: 例子: array(3) { [0]=> array(16) { ["id"]=> string(2) "42" ["uid"]=> string(2) "14" ["euid"]=> string(2) "56" ["did"]=> string(1) "1" ["nid"]=> string(1)...
稍后将用UF2重新测试,并更新RIOT板的定义以支持UF2上的闪烁和串行。关于低功耗,设备在睡眠模式下消耗的功耗约为115uA,RAM保持率很高,但我无法单独测量微控制器的功耗,因此该值适用于整个电路板(LDO,LiPo充电...