我试图限制一个备份守护进程的用户(需要root访问客户端机器),以便它只能使用它需要的一个命令。 因此,在/ etc / sudoers中,我使用
daemonuser ALL=NOPASSWD: /backup/command --with --args *
我从同事那里听说,这种方法已经不再被认为是安全的,但我找不到任何细节。 我需要注意哪些安全问题?
这对你来说可能是一件容易的事,但为了完整:
您必须确保/ backup /命令对shell转义和类似的字符是安全的。 例如,一个常见的错误就是文件名中存在“\ n”,允许将任意行插入到xargsinput和类似的东西中。 许多备份解决scheme不会采取很高的预防措施来保护其input,因此您可能需要检查备份脚本的正确性。
您正在给您的守护程序用户访问,而不需要密码。 您应该确保除root以外的任何人都没有写入权限的脚本。 除此之外,它应该是相当安全的。 你总是可以问你的同事一个“听到”的提法。
参数列表中唯一存在的问题是,当人们试图将允许的命令与尝试排除某些参数时使用! 。 例如,允许某人以root身份rm ,但不允许他们删除整个系统,可以尝试使用类似的命令列表
/bin/rm, !/bin/rm -rf /
除了这不会真正解决问题,因为用户仍然可以运行rm -fr /或rm -r -f /或rm -rf . 而在根目录下,或者rm -rf ../../../../../../.. /…等等。
正常的规则是你必须certificate你在做什么是安全的。
我可以告诉你,你的问题是“安全的”,主要有两个警告:
您已经设置了NOPASSWD因此系统永远不会要求daemonuser用户input执行该命令的密码。 由于这是一个(可能是非交互式的)守护进程,这对我来说似乎是合理的。
(你也必须专门设置NOPASSWD ,大概你知道你在做什么…)
如果您安装的sudo版本中存在安全漏洞,则需要遵守。
检查您安装的sudo版本,并确保它是最新的。
您的澄清评论使您的同事的声音听起来像“我有一个朋友谁有一个朋友谁听说过一个安全漏洞,但我们不知道它是什么” – 安全是非常重视的事情,但缺席我们可能正在谈论某人在5岁的时候在sudo安全缺陷信息,并挥舞着他们的arm。