第十七章:运行时特性-os:可移植访问操作系统特定特性-检测和改变进程所有者

17.3.6 检测和改变进程所有者
os提供的下一组函数用于确定和改变进程所有者ID。守护进程或一些特殊系统程序(需要改变权限级别而不是作为root运行)的作者最常使用这些函数。
下面的例子显示了一个进程的有效用户和组信息,然后改变这些有效值。这类似于系统自引导期间一个守护进程作为root启动时可能要做的工作,比如降低权限等级,以及作为一个不同的用户运行。
说明:运行这个例子之前,要改变TEST_GID和TEST_UID值,从而与系统上定义的一个真实用户一致。

import os

TEST_GID = 502
TEST_UID = 502


def show_user_info():
    print('User (actual/effective)  : {} / {}'.format(
        os.getuid(),os.geteuid()))

    print('Group (actual/effective) : {} / {}'.format(
        os.getgid(),os.getegid()))

    print('Actual Groups   :',os.getgroups())

print('BEFORE CHANGE:')
show_user_info()
print()

try:
    os.setegid(TEST_GID)
except OSError:
    print('ERROR: Could not change effective group. '
          'Rerun as root.')
else:
    print('CHANGE GROUP:')
    show_user_info()
    print()

try:
    os.seteuid(TEST_UID)
except OSError:
    print('ERROR: Could not change effective user. '
          'Rerun as root.')
else:
    print('CHANGE USER:')
    show_user_info()
    print()

这个代码会生成以下输出:
在这里插入图片描述
这些值不会改变,因为只要不作为root运行,进程就不能改变其有效的所有者值。试图将有效用户ID或组ID设置为非当前用户的其他值时,会导致一个OSError。使用sudo运行同样的脚本,使它启动时有root权限,结果则会完全不同。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值