标签:等于 sgi suid 账号 bit RoCE 完成 turn 哪些
代码示例支持 |
---|
平台: Centos 6.3 |
Python: 2.7.14 |
代码示例: 菜单 - Python踩坑指南代码示例 |
小明是个服务器管理员, 他从老管理员手里接手了一个非常繁琐的运维工作: 短暂授权root 账号给不同的 team 接口人运行备份任务
该运维任务有几个特点:
小明非常烦躁, 为了填上这个坑, 他调研了填坑解法.
填坑解法满足:
具体做法:
利用c/c++程序出借部分 root 权限 (完整代码关注公号点击菜单查看)
int main(int argc, char **argv){
if(0==isRunUnderRoot()){
fprintf(stderr,"does not run under +S attribute. Exiting....\n");
return EXIT_FAILURE;
}
exit(runNewProcess("./", "env python ./euid_backup.py"));
}
为生成的执行文件euid_cp及euid_backup.py 设置root权限借用
sudo rm -f ./euid_cp
sudo gcc euid_cp.c -o euid_cp
# 设置文件owner为root, 非root用户无法更改执行内容
sudo chown root euid_cp euid_backup.py
# 设置a. 非root只读 b. 增加执行权限
sudo chmod 755 euid_cp
# 设置stick bit, 执行euid_cp即可短暂获取root 权限, 执行任务
sudo chmod +s euid_cp
euid_backup.py Python 代码执行具体的备份任务
from __future__ import print_function
import os
import time
print('euid is {0}'.format(os.geteuid()))
if os.geteuid() == 0:
print('start to copy under root')
print('do some operations here')
time.sleep(2)
print('end copying things')
print('drop privileges from root')
else:
print('non-root, euid {0} will exit'.format(os.geteuid()))
运行试验:
uid / euid / suid 是什么
gid, egid 等同理, [*]uid的判断优先
为什么本文没有直接对euid_backup.py文件进行设置+s操作, 而是用可执行的c/c++程序做执行器
Linux 系统里的passwd 程序是否也是这个原理? 它跟哪些文件/命令相关
进程篇其五之眼花缭乱的进程间通信
Life is short. We use Python.
Python 踩坑之旅进程篇其四一次性踩透 uid euid suid gid egid sgid的坑坑洼洼
标签:等于 sgi suid 账号 bit RoCE 完成 turn 哪些
原文地址:https://www.cnblogs.com/mythmgn/p/10975286.html