linux/unix下setuid/seteuid/setreuid/setresuid

 

其中setresuid()具有最清晰的语法:

 

setresuid()被执行的条件有:

 

①当前进程的euid是root

②三个参数,每一个等于原来某个id中的一个

 

如果满足以上条件的任意一个,setresuid()都可以正常调用,并执行,将

 

进程的ID设置成对应的ID。

 

例子:

 

如果ruid=100,euid=0,suid=300

 

则setresuid(200,300,100)可以执行,因为原来的euid=0.

 

如果ruid=100,euid=300,suid=200

 

则setresuid(200,300,100)也可以执行,因为这三个新的id都是原来id中的某一个。

 

但是setresuid(100,200,400)就不能执行,因为400不等于原来三个id中的任意一个。

 

 

 

setresuid()有个性质,英文名称是all-or-nothing effect,意思是,如果setresuid()

 

对某一个ID设置成功了,其他的失败了,比如只改变了ruid,suid和euid都改失败了

 

那么程序会将ruid改回原来的值,即保证要么三个ID都能成功修改,要么三个都没能修改成功。

 

PS:FreeBSD和Linux支持setresuid,Solaris不支持setresuid,但有自己的实现方式。

 

 

 

seteuid()也有较清晰的语法:

 

  无论什么情况,它只改变进程euid,而不改变ruid和suid。

 

  如果原来的euid==0,则新的euid随意设,都可以成功改变。

 

  如果原来的euid!=0,不同的系统的处理方式是不一样的:

 

-Solaris和Linux只允许新的euid等于原来三个id中的任意一个;

-但是FreeBSD只允许新的euid等于ruid和suid中的一个;

貌似FreeBSD这个限制是多余的,因为新的euid==原来的euid的时候应该是可以的,但是它会报错,不允许。

 

 

 

setreuid()有点小复杂:

 

  它会修改ruid和euid,也某些情况下,也会修改suid。

 

  而且不同的系统对setreuid也有不同的处理方式:

 

-在Solaris和Linux中,setreuid(geteuid(),getuid())可以实现ruid和euid的交换

-FreeBSD则会失败;

 

 

 

setuid()

 

如果原来的euid==0,则该函数将会设置所有的id都等于新的id。

 

如果原来的三个id为:ruid=300,euid=0,suid=100

 

则setuid(200)执行以后,ruid=200,euid=200,suid=200

 

 

 

如果原来的euid!=0,但是新的id等于原来ruid和suid中的一个,那么也是可以执行的。否则就不能执行。

 

比如原来的三个id为:ruid=100,euid=200,suid=300

 

则setuid(300)可以执行,执行结束以后ruid=100,euid=300,suid=300(也就是说只改变了euid)。

 

setuid(400)就不能执行。

 

 

 

不同的系统有不同的处理方式:

 

-Linux和Solaris:如果euid不等于0,那么新的id必须等于ruid或者suid中的一个(就是我们上面说的);

-FreeBSD待定,还没搞清楚;

 

setuid()的行为不仅取决于系统,还取决于进程的优先级:

 

-Linux和Solaris:如果euid==0,那么将三个id都设置为新的id;否则,只设置euid;

-FreeBSD:不管euid值,如果执行成功,直接设置所有的id都为新的id;

 

转载于:https://www.cnblogs.com/bittorrent/p/3260483.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/421566.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

shell监控mysql发邮件_用shell脚本监控linux系统 自动发送邮件

此脚本可以做一个定时的检测,超出设定的值,即往邮箱发送警告脚本用到bc,sendmail,163邮箱,yum install bc#!/bin/bash#System Monitoring Scriptwhile [ 1 ]do#本机需开启postfix或sendmail服务。#报警邮件地址设置MAI…

【C语言】01-C语言概述

说明:这个C语言专题,是学习iOS开发的前奏。也为了让有面向对象语言开发经验的程序员,能够快速上手C语言。如果你还没有编程经验,或者对C语言、iOS开发不感兴趣,请忽略 回到顶部为什么iOS开发要先学C语言? i…

删除 索引 外键 mysql_MySQL外键及级联删除 表的存储引擎与创建索引 删除数据库和表...

Messages表:mysql>create table Messages(->message_id int auto_increment primary key,->user_name varchar(50) not null,->author_id int not null,->body text,->forum_id int not null);Forums表:mysql>create table Forums(…

字符串长度(PHP学习)

1.计算字符串长度有哪些方法&#xff1f; 答&#xff1a;strlen() 和 mb_strlen() 2.两者有什么区别 答&#xff1a; 如下代码 <?php $str hello中国; ?>strlen($str)计算的是字节的长度&#xff0c;在utf8下一个汉字代表3个字符&#xff0c;算出来是11 在GB2312和…

eclipse在ubuntu13.04下崩溃crash

错误信息&#xff1a; # # A fatal error has been detected by the Java Runtime Environment: # # SIGSEGV (0xb) at pc0x00007fb29dce2009, pid19297, tid140405947455232 # # JRE version: 7.0_10-b18 # Java VM: Java HotSpot(TM) 64-Bit Server VM (23.6-b04 mixed mode…

Java IO 体系结构

参考文章地址: http://blog.csdn.net/oracle_microsoft/article/details/2634231 Java IO体系结构看似庞大复杂,其实有规律可循,要弄清楚其结构,需要明白两点: 1. 其对称性质:InputStream 与 OutputStream, Reader 与 Writer,他们分别是一套字节输入-输出,字符输入-输出体系 2.…

java wap_JAVA和WAP移动学习技术

JAVA和WAP移动学习技术JAVA/WAP移动学习技术摘 要 移动学习是今后课堂学习的必要补充&#xff0c;WAP技术是基于连接浏览的移动学习关键技术。本文以移动电话学生成绩查询系统为例&#xff0c;利用UML模型表征实现的过程&#xff0c;分析其运用的WML 、SERVLET与连接池等技术。…

java string 日期格式_java String.Format() 日期格式用法

JDK1.5中&#xff0c;String类新增了一个很有用的静态方法String.format():现有一个时间20090903要转化成指定时间的java.util.Date格式private Date getStartGregorianTime(String date) {Date d_date DateUtil.parseDate(date);int year new Integer(String.format("%…

java HHmm_java date HHmmss hhmmss

系统交互时&#xff0c;用到时间流水号的设计&#xff0c;出现时间流水号相同的情况&#xff0c;故对时间格式化各种情况做了研究SimpleDateFormat(format)format&#xff1a;年月日 yyyyMMdd时分秒 HHmmss 24小时制时分秒 hhmmss 12小时制年月日时分秒 yyyyMMddHHmmss …

MySql命令——命令行客户机的分隔符

delimiter //create procedure productpricint() begin select avg(price) as priceaveragefrom product; end //delimiter; 转载于:https://www.cnblogs.com/Luoma_HaoWei/p/3270889.html

NuGet学习笔记(1)——初识NuGet及快速安装使用

关于NuGet园子里已经有不少介绍及使用经验&#xff0c;本文仅作为自己研究学习NuGet一个记录。 初次认识NuGet是在去年把项目升级为MVC3的时候&#xff0c;当时看到工具菜单多一项Library Package Manager&#xff0c;右键项目文件多了一项Manage Nuget Packages...&#xff0c…

java 打印二叉树_java – 如何打印二叉树图?

我创建了简单的二叉树打印机。你可以根据需要使用和修改它&#xff0c;但它还没有优化。我认为很多东西都可以在这里改进;import java.util.ArrayList;import java.util.Collections;import java.util.List;public class BTreePrinterTest {private static Node test1() {Node …

ZOJ 2562 More Divisors

又是个水题&#xff0c;刚刚开始没有用搜索&#xff0c;因为对于反素数有&#xff1a; n2^t1*3^t2^5^t3*7^t4..... 这里有 t1>t2>t3>t4。 而且相同的因数的情况下&#xff0c;素数越不同越好。 哪知道这个方法错了&#xff01; 。 看来还得中规中矩得用dfs。 我觉得还…

springMVC使用注解方式进行页面跳转

<!--控制层-->package cn.org.spartacus.spring; import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;ControllerRequestMapping("…

java for 和foreach_关于java中for和foreach循环

for循环中的循环条件中的变量只求一次值&#xff01;具体看最后的图片foreach语句是java5新增&#xff0c;在遍历数组、集合的时候&#xff0c;foreach拥有不错的性能。foreach是for语句的简化&#xff0c;但是foreach并不能替代for循环。可以这么说&#xff0c;任何foreach都能…

将datatable导出为excel的三种方式(转)

一、使用Microsoft.Office.Interop.Excel.DLL 需要安装Office 代码如下&#xff1a; 2 publicstaticboolExportExcel(System.Data.DataTable dt, stringpath)3 {4 boolsucceed false;5 if(dt !null)6 {7 Microsoft.Office.Interop.Excel.Application xlApp null;8 try9 {10 xl…

java锁的实现方式_Java 集群锁如何实现呢?

针对分布式锁的实现&#xff0c;目前比较常用的有以下几种方案&#xff1a;基于数据库实现分布式锁 基于缓存(redis&#xff0c;memcached&#xff0c;tair)实现分布式锁 基于Zookeeper实现分布式锁基于数据库表要实现分布式锁&#xff0c;最简单的方式可能就是直接创建一张锁表…

java判断字符集_Java 常用工具类---- 各种字符集编码判断与转换

import java.io.UnsupportedEncodingException;/*** 判断字符编码** author guyinyihun*/public class CharacterCodingUtil {private final static String ENCODE "GBK";/*** 判断是否为ISO-8859-1** return*/public static boolean checkISO(String str) {boolean…