MacOS Sierra 上的 sudo 命令不遵守 timestamp_timeout
sudo command on MacOS Sierra does not respect timestamp_timeout
升级到 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 在内的所有 OS 版本上都按预期工作:
# 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/sudoers
,timestamp_timeout
值未设置为 0
。我已经简要地查看了 changelog for 1.7 to 1.8,但除了在 运行 sudo -V
.
时提到 Sierra 的政策插件之外,没有想出任何重要的东西
谁能帮我弄清楚发生了什么变化?我有一个脚本依赖于 sudo
keepalive 的超时值,在 Sierra 上它不断提示输入密码,因为它似乎不再为 root
用户使用时间戳。
经过大量搜索并将旧 OS 版本上的 sudo
配置与 Sierra 的 (sudo su; sudo -V
) 配置进行比较后,似乎 Sierra 现在默认启用 tty_tickets
,导致上述问题。据我所知,这是一个未记录的更改。要修复,需要通过 运行 sudo visudo
、
将以下内容添加到 /etc/sudoers
文件中
Defaults !tty_tickets
TLDR;馊主意。这种旧行为虽然是 sudo 的一个选项,但被我遇到过的 NO OTHER UNIX-y OS 默认使用。原因是它很容易被利用,当被利用时,恶意代码将完全控制您的系统。
原始的很长的咆哮 post,正确指出是 blahdiblah:
大声笑,这很有趣。我是通过谷歌搜索来到这里的,因为我不记得如何将旧行为更改为这个新的、正确的行为(被所有其他 UNIX-y OS 使用)。甚至没有注意到我的新 Sierra Mac 现在表现正常了。
我之前在 Mac 论坛上写过有关此先前行为的文章,这是一个巨大的安全漏洞。我什至提供了一个三行的概念验证脚本,它可以简单地坐在那里(作为普通用户)等待 sudo
事件出现在 任何地方 ,然后立即获得root 访问系统。我被狂热者从线程中发出嘘声,然后被禁止说谎。不过,苹果似乎在倾听。干得好,这一次,库比蒂诺。试图恢复旧行为的坏主意。
供参考,这里是三线。它不会做任何恶意的事情,只是在获得 sudo 后将一个虚拟文件添加到文件系统的根目录。 运行 它在脚本中(或者只是将它粘贴到某个没有 sudo 的地方),然后在另一个终端 app/window 或使用 sudo 的应用程序(例如 TrueCrypt/VeraCrypt 或类似),然后观察它的工作。
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
升级到 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 在内的所有 OS 版本上都按预期工作:
# 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/sudoers
,timestamp_timeout
值未设置为 0
。我已经简要地查看了 changelog for 1.7 to 1.8,但除了在 运行 sudo -V
.
谁能帮我弄清楚发生了什么变化?我有一个脚本依赖于 sudo
keepalive 的超时值,在 Sierra 上它不断提示输入密码,因为它似乎不再为 root
用户使用时间戳。
经过大量搜索并将旧 OS 版本上的 sudo
配置与 Sierra 的 (sudo su; sudo -V
) 配置进行比较后,似乎 Sierra 现在默认启用 tty_tickets
,导致上述问题。据我所知,这是一个未记录的更改。要修复,需要通过 运行 sudo visudo
、
/etc/sudoers
文件中
Defaults !tty_tickets
TLDR;馊主意。这种旧行为虽然是 sudo 的一个选项,但被我遇到过的 NO OTHER UNIX-y OS 默认使用。原因是它很容易被利用,当被利用时,恶意代码将完全控制您的系统。
原始的很长的咆哮 post,正确指出是 blahdiblah:
大声笑,这很有趣。我是通过谷歌搜索来到这里的,因为我不记得如何将旧行为更改为这个新的、正确的行为(被所有其他 UNIX-y OS 使用)。甚至没有注意到我的新 Sierra Mac 现在表现正常了。
我之前在 Mac 论坛上写过有关此先前行为的文章,这是一个巨大的安全漏洞。我什至提供了一个三行的概念验证脚本,它可以简单地坐在那里(作为普通用户)等待 sudo
事件出现在 任何地方 ,然后立即获得root 访问系统。我被狂热者从线程中发出嘘声,然后被禁止说谎。不过,苹果似乎在倾听。干得好,这一次,库比蒂诺。试图恢复旧行为的坏主意。
供参考,这里是三线。它不会做任何恶意的事情,只是在获得 sudo 后将一个虚拟文件添加到文件系统的根目录。 运行 它在脚本中(或者只是将它粘贴到某个没有 sudo 的地方),然后在另一个终端 app/window 或使用 sudo 的应用程序(例如 TrueCrypt/VeraCrypt 或类似),然后观察它的工作。
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