首页 > 其他分享 >强制位权限

强制位权限

时间:2023-06-12 21:33:35浏览次数:30  
标签:uid effective 用户 user seteuid 强制 权限 id

当程序需要读取限制访问权限的文件时,一般都会通过合理的设计,使用seteuid()来达到访问受限文件的目的。

为什么不用setuid()e呢?

先以普通用户的身份来说,普通用户执行setuid()e,通常是返回失败的,即使在执行成功的情况下,也是相当于只执行了seteuid()。

以root用户的身份来说,执行setuid()e切换到普通用户,然后呢?想再切换回root或别的用户的话,那可就困难了,已经没有权限了。

real-user-id: 表示进程的实际执行者

effective-user-id: 表示进程访问文件时的身份

saved-user-id: effective-user-id的一份拷贝,进程启动时拷贝

set-user-id: 二进制可执行程序的一个标志位,可通过ls命令查看,可通过chmod命令设置该标志位

一般情况下,(real uid)=(effective uid)=进程的用户ID,当设置了set-user-id时,进程的有效ID是其二进制文件的属主。

表1:程序启动时的真实ID和有效ID

owner : A

set-user-id user A exec user B exec user root exec
off (---x--x--x) (real uid : A) (effective uid : A) (real uid : B) (effective uid : B) (real uid : 0) (effective uid : 0)
on (---s--x--x) (real uid : A) (effective uid : A) (real uid : B) (effective uid : A) (real uid : 0) (effective uid : A)

当未设置set-user-id时,非root用户无权改变有效用户。

表2:不同用户执行seteuid

owner : A
set-user-id : off
=号表示未改变,其值维持启动时的状态

set-user-id user A exec user B exec user root exec
seteuid(A) = Operation not permitted (effective uid : A)
seteuid(B) Operation not permitted = (effective uid : B)
seteuid(0) Operation not permitted Operation not permitted (effective uid : 0)

上表中,当用户B运行一个程序,当程序里执行seteuid(A)时,会报告操作未授权,并且程序会在此退出。
同理,当用户A在运行的程序里执行seteuid(B)时,也会报告同样的错误。

当设置了set-user-id时,非root用户可以将有效用户设置为真实用户(在此处也可理解为当前用户)或者saved-user-id。

表3:不同用户执行seteuid

owner : A
set-user-id : on
=号表示未改变,其值维持启动时的状态

set-user-id user A exec user B exec user root exec
seteuid(A) = = (effective uid : A)
seteuid(B) Operation not permitted (effective uid : B) (effective uid : B)
seteuid(0) Operation not permitted Operation not permitted (effective uid : 0)

上表中,用户B运行起来的程序,真实用户和有效用户分别是B和A,这时程序里执行seteuid(B)是可以执行成功的。
但是用户A运行起来的程序,执行seteuid(B)是未授权的,因为B即不是当前用户也不是有效用户。

应用举例:

有一台小型终端,其上接着一个类似输入设备的外设,基于系统的安全设计,只允许P用户去读写该外设的设备文件,所有对硬件的控制和运算都只能以P的身份去执行,P是一个nologin用户;
该外设的驱动程序需要根据情况向图形(DISPLAY)发送信号;
图形以用户G的身份运行,那么获取DISPLAY文件句柄的操作只能以G的身份去执行才能获取到,向DISPLAY发送信号也只能以G的身份运行才能成功,所以驱动程序内需要在P用户和G用户间不停切换。

可以这样设计程序,使用chmod u+s xxx将外设驱动程序的强制位权限打开,将驱动程序的属主设置为P,将驱动程序的启动服务交给G,在DISPLAY启动后运行。这样驱动运行时的real-user-id就是G,effective-user-id就是P,可以在G和P间来回切换。

标签:uid,effective,用户,user,seteuid,强制,权限,id
From: https://www.cnblogs.com/the-capricornus/p/17476158.html

相关文章

  • DVE 调试手段强制修改信号的值
    1、修改的是DUT输入的值即只能修改激励,DUT的输出是无法修改的 2、设置Forcevalue Freeze代表将pready一直冻结在1‘b0的值deposit代表pready可以被subsequent驱动覆盖3、查看设置的force值 ......
  • OpenIddict应用权限
    @@openiddictImplicit OpenIddict包括一个代号为“应用程序权限”的内置功能, 允许控制和限制每个注册的客户端应用程序能够使用的OAuth2.0/OpenIDConnect功能。目前支持4类权限:端点权限。授予类型权限。范围权限。响应类型权限(在OpenIddict3.0中引入)。端点......
  • 基于LDAP&&Role-based Authorization Strategy实现Jenkins团队权限管理
    在实际工作中,存在多个团队都需要Jenkins来实现持续交付,但是又希望不同团队之间进行隔离,每个项目有自己的view,只能看到自己项目的jenkinsjob.但是,jenkins默认的权限管理体系不支持用户组或角色的配置,这里利用Role-basedAuthorizationStrategy实现上述目的权限角色配置直接跳过......
  • SQL Server 只读账号/只读登录名可查看存储过程及函数权限
    USETCsfc--数据库名)GRANTVIEWDefinitionTOtestUser--开启,只读账户queryuser在TCsfc数据库中可查看存储过程及标量值函数的权限USETCsfc--(数据库名)REVOKEVIEWDefinitionTOtestUser--撤销,只读账户queryuser在TCsfc数据库中可查看存储过程及标量值函数的权限......
  • 后渗透之权限维持
    内存马(不死马)最常见的内存马<?phpset_time_limit(0); #用来设置脚本最大的执行时间,如果为0的话,就会一直执行这个脚本,设置其他数字的话,则按照设置的秒数来进行执行,注意,执行时间和php.ini里的max_execution_time设置有很大的关系,真实时间的计算公式是max_execution_time+time......
  • 系统权限ABAC和RBAC
    ABAC的思想是基于用户、以及将要访问的数据的属性、以及各种环境因素去动态计算用户是否有权限进行操作。转载:https://juejin.cn/post/6941734947551969288#commenthttps://blog.csdn.net/hhhhhhhhhhhhhhhc/article/details/125906529......
  • vuex使用,Router使用(做两个主页面的跳转),路由守卫(对路由进行权限控制),路由的工作模式
    vuex使用使用的流程文件中的代码前端页面<template><div><h1>使用vuex</h1>购物车商品数量:{{num}}购物车的数量:{{$store.state.num}}<br><button@click="yjx">加数量</button></div></template><sc......
  • 账号和权限管理
    账号和权限管理推荐步骤:➢用户账户管理创建➢创建➢目录文件属性配置修改单个目录权限,循环将多个目录权限设置为指定的用户和组实验步骤:用户账户管理创建创建查看新创建的用户创建查看创建用户给查看锁定解锁用户清空密码将查看修改后的名字修改查看修改的用户信息创建创建组名......
  • C语言编程—强制类型转换
    强制类型转换是把变量从一种类型转换为另一种数据类型。例如,如果您想存储一个long类型的值到一个简单的整型中,您需要把long类型强制转换为int类型。您可以使用强制类型转换运算符来把值显式地从一种类型转换为另一种类型,如下所示:(type_name)expression请看下面的实例,使用强......
  • mybatis拦截器实现数据权限
    前端的菜单和按钮权限都可以通过配置来实现,但很多时候,后台查询数据库数据的权限需要通过手动添加SQL来实现。比如员工打卡记录表,有id,name,dpt_id,company_id等字段,后两个表示部门ID和分公司ID。查看员工打卡记录SQL为:selectid,name,dpt_id,company_idfromt_record当一个总......