【发布时间】:2011-11-29 18:03:28
【问题描述】:
我以 root 身份运行,但拥有用户的 uid(例如 504)。如何计算出用户的语言环境(在我的情况下为 en_GB)?以下方法不起作用:
setuid(user_uid);
fprintf(stderr,
CFStringGetCStringPtr(CFLocaleGetIdentifier(CFLocaleCopyCurrent()),
kCFStringEncodingMacRoman);
setuid(0);
这将为我输出en_US。
【问题讨论】:
-
用户没有语言环境。只有 environment 具有语言环境。但是,环境取决于许多因素,通常在用户登录时由一系列 shell 脚本设置。
-
@KerrekSB 好点。知道如何在这种情况下开始吗?
-
@Crawl 用户的目录,grep 所有文件以查找区域设置
exports 并预测用户将在她的命令行中键入的内容!挖掘bash_history文件可能会为您提供有关过去行为的统计信息;例如如果你看到很多LC_ALL=en_AU.utf8 ./myprog,你就知道用户可能喜欢袋鼠... -
如果真的那么努力,
setuid(0)怎么会改变CFLocaleCopyCurrent()的结果,而setuid(user_uid)不是? -
setuid(0)是如何“改变”它的?通常,当您获得提升的权限时,操作系统应该重置或清除整个环境,以便非特权用户无法将任何内容注入特权上下文。我认为这会将语言环境设置为C或类似的东西。