通过 sudo 或 su 运行脚本时,我想获取原始用户。这应该发生,无论多个 sudo
或 su
在彼此内部运行,特别是 sudo su -
。
原文由 evan 发布,翻译遵循 CC BY-SA 4.0 许可协议
没有 完美 的答案。当您更改用户 ID 时,通常不会保留原始用户 ID,因此会丢失信息。一些程序,例如 logname
和 who -m
实现了一个 hack,他们检查哪个终端连接到 stdin
,然后检查登录的用户在那个终端上。
该解决方案 通常 有效,但并非万无一失,当然也不应该被认为是安全的。例如,假设 who
输出以下内容:
tom pts/0 2011-07-03 19:18 (1.2.3.4)
joe pts/1 2011-07-03 19:10 (5.6.7.8)
tom
使用 su
进入根目录,然后运行你的程序。如果 STDIN
没有被重定向,那么像 logname
这样的程序将输出 tom
。如果它被重定向(例如从文件中):
logname < /some/file
然后结果是“ no login name
”,因为输入不是终端。然而,更有趣的是,用户可以伪装成不同的登录用户。由于 Joe 在 pts/1 上登录,Tom 可以通过运行来假装是他
logname < /dev/pts1
现在,它说 joe
尽管运行命令的是汤姆。换句话说,如果你在任何类型的安全角色中使用这种机制,你就疯了。
原文由 tylerl 发布,翻译遵循 CC BY-SA 3.0 许可协议
7 回答5.3k 阅读
4 回答4k 阅读
2 回答5.9k 阅读✓ 已解决
2 回答2.5k 阅读✓ 已解决
1 回答2.3k 阅读✓ 已解决
2 回答799 阅读✓ 已解决
2 回答3.2k 阅读
结果:
使用
who am i | awk '{print $1}'
或logname
因为不保证其他方法。以自己的身份登录:
普通须藤:
须藤苏 - :
须藤苏-;苏汤姆: