zoukankan      html  css  js  c++  java
  • 小功能程序关联的用户切换

    1.实现一个功能,如果程序由root启动运行,将新建一个用户TEST,并将程序设置为TEST 用户权限运行 

    主要是通过getpwnam 和setuid函数,进行....

    struct passwd *ptPasswd = NULL;

    ptPasswd = getpwnam(NEW_USER_NAME);
    if(NULL == ptPasswd)
    {
    return FALSE;
    }
    if(0 != setuid(ptPasswd->pw_uid))

    实现方式看似简单,其实用到了用户知识,共有三个uid,

    #ps -ef    第一列显示的是UID ,即程序被该 UID 所拥有 

    扩展学习:

    三个UID,即用户ID, 实际生效ID,保存的设置用户ID

    在讨论这个setuid函数之前,我们首先要了解三个ID :
    内核为每个进程维护的三个UID值。这三个UID分别是 实际用户ID(real uid)、有效用户ID(effective uid)、保存的设置用户ID(saved set-user-ID)。

      首先说这个实际用户ID,就是我们当前以哪个用户登录了,我们运行的程序的实际用户ID就是这个用户的ID。有效用户ID就是当前进程是以哪个用户ID来运行的,一般情况下是实际用户ID,如果可执行文件具有了SUID权限,那么它的有效用户ID就是可执行文件的拥有者。保存的设置用户ID就是有效用户ID的一个副本,与SUID权限有关。

      关于那个SUID,最经典的例子莫过于passwd命令。passwd这个可执行文件的所有者是root,但是其他用户对于它也有执行权限,并且它自身具有SUID权限。那么当其他用户来执行passwd这个可执行文件的时候,产生的进程的就是以root用户的ID来运行的

    setuid(tetid);

    1.如果进程有超级用户特权,那么把三个ID都设置为testID

    2,如果没有超级特权,那么tetid等于实际用户ID 或者保存设置的ID ,那么把 有效ID设置为 tetID,

    若不满足1,2 ,报错。

    获取三个Uid函数getresuid
    其他getpwnam,getpwuid 通过name或者uid获取到信息 ...
    涉及到suid权限,如果运行程序有suid权限,那么 有效uid就设置为可执行文件的所有者。

    奋斗为了更好的生活。
  • 相关阅读:
    WCF Server Console
    Restart IIS With Powershell
    RestartService (recursively)
    Copy Files
    Stopping and Starting Dependent Services
    多线程同步控制 ManualResetEvent AutoResetEvent MSDN
    DTD 简介
    Using Powershell to Copy Files to Remote Computers
    Starting and Stopping Services (IIS 6.0)
    java中的NAN和INFINITY
  • 原文地址:https://www.cnblogs.com/redman274/p/15559439.html
Copyright © 2011-2022 走看看