MacOS Sierra上的sudo命令不尊重timestamp_timeout

时间:2016-09-13 15:41:30

标签: shell sudo macos-sierra

升级到MacOS Sierra(10.12)后,我的sudo命令似乎采取了不同的行动。请参阅以下测试用例:

# Run in terminal pane #1: (should prompt for password)
sudo -v

# Run in terminal pane #2: (should NOT prompt for password)
sudo -v

以上在OS X的早期版本中可以正常工作。但是,在Sierra上,第二个命令再次提示输入密码。它不会在同一终端窗格中提示输入密码。这似乎只发生在root用户身上;以下在包括Sierra的所有操作系统版本上都按预期工作:

# Run in terminal pane #1: (prompts for password)
sudo -v -u "$USER"

# Run in terminal pane #2: (does not prompt for password)
sudo -v -u "$USER"

查看/ect/sudoerstimestamp_timeout值未设置为0。我已经简要地查看了changelog for 1.7 to 1.8,但除了在运行sudo -V时提及Sierra的政策插件时,我无法想出任何其他重要信息。

有人能帮我弄清楚发生了什么变化吗?我有一个依赖于keepalive的sudo超时值的脚本,并且在Sierra上它会不断提示输入密码,因为它似乎不再使用root用户的时间戳。

2 个答案:

答案 0 :(得分:10)

经过大量搜索并将旧操作系统版本的sudo配置与Sierra(sudo su; sudo -V)进行比较后,似乎Sierra现在默认启用tty_tickets,导致上述问题。据我所知,这是一个无证的变化。要解决此问题,需要通过运行/etc/sudoers

将以下内容添加到sudo visudo文件中
Defaults !tty_tickets

答案 1 :(得分:0)

TLDR;馊主意。这个旧的行为虽然是sudo的一个选项,但是我曾经遇到的NO OTHER UNIX-y操作系统将其用作默认行为。原因在于利用它是微不足道的,并且当被利用时,这样做的恶意代码将完全控制你的系统。

原来很长的咆哮帖子,正确地指出是blahdiblah:

大笑,这很有趣。我是从googling来到这里的,因为我不记得如何将旧的行为更改为这个新的,正确的行为(由其他所有UNIX-y操作系统使用)。甚至没有注意到我的新款Sierra Mac现在表现得很好。

我之前在Mac论坛上写过关于此前的行为,这是一个巨大的安全漏洞。我甚至提供了一个三行概念验证脚本,它可以简单地坐在(作为普通用户)等待sudo事件出现任何地方,然后立即获得root访问权限系统。我被粉丝们嘘了一声,然后被禁止叫出谎言。然而,似乎苹果正在倾听。好的工作,一次,库比蒂诺。试图恢复旧行为的坏主意。

作为参考,这是三线。它没有做任何恶意的事情,只是在获得sudo时将一个虚拟文件添加到文件系统的根目录。在脚本中运行它(或者只是将它粘贴到没有sudo的地方),然后在另一个终端应用程序/窗口或使用sudo的应用程序(例如TrueCrypt / VeraCrypt或类似程序)中执行sudo,然后观察它是否正常工作。

tail -f -n 0 /var/log/system.log | grep -m 1 -E 'sudo\[[0-9]+\]:\s+'$USER
echo "Gonna play around with root privs ..."
sudo touch /kilroy-was-here