使用iOS 12和新的Siri快捷方式应用程序,我一直在考虑如何在应用程序中利用SSH命令功能。对于那些不知道的人,该应用程序允许您向stdin
发送bash文件或字符串,并将stdout
作为纯文本文件返回,使用密码身份验证进行连接(不使用令牌身份验证)。
我想要做的是创建一个快捷方式,通过SSH命令操作在远程服务器上执行sudo shutdown [...]
。因为操作是非交互式的,所以我不能交互地输入密码,而且我不愿意将密码作为明文放在操作输入字符串/stdin
中。另一方面,我不想将sudo -n
和NOPASSWD
用于shutdown
命令,因为这是我不想处理的安全风险。我想可能需要一个随机字符串,以便在shutdown
文件中启用NOPASSWD
消息(也就是说,sudo shutdown -h now
需要密码,但sudo shutdown -h now japos98vh92p3hoab982hfpa
不需要密码),但我不知道这是否更安全,甚至可能。
总之,how可以使用非交互式的、非tty会话安全地在SSH上发送关闭命令吗?
发布于 2018-11-25 18:35:03
我想出了如何使用NOPASSWD
和随机字符串来实现它。我将以下行添加到我的sudoers
文件中:
matt ALL=(ALL) NOPASSWD: /sbin/shutdown -h now japos98vh92p3hoab982hfpa
matt ALL=(ALL) NOPASSWD: /sbin/reboot japos98vh92p3hoab982hfpa
这就像我想的那样。:)
发布于 2018-09-19 14:29:58
这里有许多不同的问题,其中有些不是安全问题(例如,“如何在非交互式SSH会话上使用sudo”实际上是一个编程/超级用户问题),而其中一些问题只有您可以回答(所谓的“安全”)。
因此,我不直接回答你的问题,而是指出与你的两项建议有关的一些安全问题。
我不想将
sudo -n
和NOPASSWD
用于shutdown
命令,因为这是我不想处理的安全风险。
您可能需要详细说明安全风险是什么,以及为什么不想处理它。显然,您可以使用Siri知道您的用户名和SSH密码,如果iOS devs要构建一种处理sudo
提示的机制,或者攻击者要从Siri的存储中提取您的用户名/密码,就足以在该机器上执行任何管理操作。
sudo
需要密码的原因是为了防止您在火狐中下载恶意软件,然后将自己变成根。从您在问题中描述的用例来看,ssh user@machine 'sudo cmd'
是否要求您输入一次或两次密码,从安全性的角度看没有区别;攻击者要么知道您的密码,要么他们不知道。
sudo shutdown -h now japos98vh92p3hoab982hfpa
我不知道你将如何做到这一点(但是如果你能在评论中解释一下,我很乐意学习)。跳过它(以及您在进程中打开的任何潜在安全漏洞),我想这将成为第二个管理密码,因此攻击者需要知道您的帐户密码和这个“管理密码”才能执行shutdown
。这个“管理密码”将出现在更多的地方:在Siri应用程序中的明文中,在用户的bash历史记录中,在运行过程树中(尝试ps -u
),可能还有其他地方--比如sudo
通过stdin获取密码,而不是通过命令行参数。
所以假设
在安全性方面,我不确定这与将shutdown
设置为NOPASSWD
有什么区别。
https://security.stackexchange.com/questions/194098
复制