标签: privilege-elevation

为什么我需要setuid-root C程序中的setuid(0)来调用带有system()的管理程序?

我不得不为某人做一个肮脏的Linux黑客攻击,这样他们就可以cupsenable printername在非root用户的情况下使用shell命令启动打印机.我不希望他们能够以cupsenableroot 身份使用整个语法,所以我只写了一个C包装器来清理输入argv[1]和调用system("cupsenable sanitizedprintername").

我使程序setuid root,但即便如此,cupsenable失败了"权限被拒绝".然后我setuid(0)在之前插入了一个电话system(),并且看,它起作用了.

忽视有更好的方法让用户控制打印机的问题.可能有更好的方法.我感兴趣的是chmod u+svs setuid(0)vs. 的错综复杂system().为什么这样做?

c unix setuid privilege-elevation

11
推荐指数
1
解决办法
7778
查看次数

UAC和提升提示模式

我已经阅读了几个关于UAC和特权提升的问题,但我没有找到一个令人满意/全面的答案.

我有这种情况:在Windows 6或更高版本上,当用户打开配置窗口时,我必须BCM_SETSHIELD在OK按钮上显示shield(),只有在完成任务时才需要权限提升. - 我知道在Windows UI中,屏蔽始终可视化为"管理任务",即使UAC已禁用,但客户也有此特定请求.

我已经草拟了这个条件以显示图标:

  1. 用户没有管理权限
  2. 目前的流程有 TOKEN_ELEVATION_TYPE == TokenElevationTypeLimited

条件#1很简单:如果用户没有管理权限,则无论UAC如何,总是需要提升.#2表示用户具有管理权限,而任何其他值TOKEN_ELEVATION_TYPE表示不需要提升.

真的那么简单吗?我错过了什么?并且 - 有关于此主题的文档或众所周知的模式?

windows uac design-patterns privilege-elevation

8
推荐指数
1
解决办法
691
查看次数

在运行时升级权限(Windows API C/C++)

我的应用程序并不总是需要"admin"权限,大多数时间都会以当前用户身份运行.有什么办法,我可以在程序运行后通过在运行时抛出UAC来升级privs吗?这只会在我需要私人时才会发生.而不是从高权限开始.

我知道"runas"技术,清单文件等,但所有这些都是在创建进程之前,而不是在运行时,按需

c++ winapi runas privilege-elevation

7
推荐指数
1
解决办法
1581
查看次数

从进程中删除管理员权限

在这篇伟大的MSDN文章的帮助下,我的第一个想法是简单地检查进程是否使用提升的Administrator组,并使用AdjustTokenGroups()我将Administrator组设置为SE_GROUP_USE_FOR_DENY_ONLY.不幸的是,我们无法修改当前正在运行的进程的管理员组,因为它还具有该SE_GROUP_MANDATORY属性,这使得它无法进行更改.

MSDN文档有这样的说法:

AdjustTokenGroups函数无法禁用具有结构中SE_GROUP_MANDATORY属性的组TOKEN_GROUPS.请CreateRestrictedToken改用.

所以,我完成了以下代码来实现这一目标;

bool _IsNewProcessLaunched()
{
    HANDLE hToken = NULL;   
    bool hasRestarted = false;

    if (!OpenProcessToken( GetCurrentProcess(), 
        TOKEN_ASSIGN_PRIMARY | TOKEN_QUERY | TOKEN_DUPLICATE | TOKEN_ADJUST_GROUPS, 
        &hToken )) 
    {
        return hasRestarted;
    }

    PSECURITY_DESCRIPTOR pSID = NULL;
    SID_IDENTIFIER_AUTHORITY SIDAuth = SECURITY_NT_AUTHORITY;

    if(! AllocateAndInitializeSid( &SIDAuth, 2,
        SECURITY_BUILTIN_DOMAIN_RID,
        DOMAIN_ALIAS_RID_ADMINS,
        0, 0, 0, 0, 0, 0,
        &pSID) ) 
    {
        CloseHandle(hToken);
        hToken = NULL;
        return hasRestarted;
    }

    BOOL isAdmin = …
Run Code Online (Sandbox Code Playgroud)

winapi uac privilege-elevation access-token elevated-privileges

5
推荐指数
1
解决办法
2702
查看次数