自定义 Sudo 命令

Posted

技术标签:

【中文标题】自定义 Sudo 命令【英文标题】:Custom Sudo Command 【发布时间】:2014-03-17 02:52:39 【问题描述】:

所以这是我刚刚想到的效率是脚本。我想知道是否可以制作具有 sudo 权限但不提示密码的自定义命令(即 jello)。我写了很多需要 sudo 权限的脚本,不喜欢每次都输入。我一直在编辑 sudoers 文件并对这些文件进行例外处理。但如果这是可能的,我真的很高兴,所以我可以在我的脚本中输入这个命令,它会像它应该运行的那样运行,而不需要输入密码。

【问题讨论】:

我不是 Linuz 方面的专家,我不知道这是否可能 - 但您是否考虑过脚本中可能需要一个令牌(或更糟糕的是,一个纯文本密码)来让它成为可能?我希望你的脚本不是供其他人使用的。 嘿,脚本只适用于我的电脑。我只是对这种可能性感到好奇。我不想在计算机上有巨大的安全风险,这就是为什么一个特殊的命令会很好,因为只有我看到它才会知道。什么是令牌?我以前没听过这个词 您可以设置特定的命令来获得无密码的 sudo 访问(对特定的用户组)。在/etc/sudoers 中,您可以使用usr ALL=NOPASSWD: /home/me/bin/custom_ping 之类的命令来使usr 组的成员能够运行custom_ping,这通常需要root 密码。 @Bonlenfum,如果我没看错,这就是我目前正在做的事情;在没有密码提示的情况下为特定脚本提供所有 sudo 权限。但是,我猜没有办法给一个特定的命令 passworldess sudo 访问权限来运行脚本?我想保持 sudo 命令“神圣”,并有一个单独的无密码命令 我明白了,抱歉我的评论没有帮助。似乎您可以在 sudoers 文件中的命令上使用通配符,所以也许您可以让所有需要 sudo 访问的脚本都有一些共同的前缀/后缀,并使您的 sudoers 规则匹配?我自己没有尝试过通配符——似乎比明确拥有一小部分提升的特殊命令更容易被滥用。 (通配符语法见docs) 【参考方案1】:

一种选择是在您的 sudoers 文件 (sudoers manpage) 中使用通配符。

注意:您需要对任何此类策略采取适当的预防措施,因为您不一定会提前知道您授予访问权限的所有命令 - some exploits 和 risks。

如果您可以接受风险,那么将这样的内容放入您的/etc/sudoers 文件将允许您添加相同形式的新命令并启用这些命令的运行,而无需每次都输入密码:

me         ALL= NOPASSWD: /home/me/privil_scripts/priviledged_*.sh

确保其他用户不容易在此目录中添加额外的脚本!非常欢迎对保持此安全的评论。

作为快速测试:

# create a directory with some files inside
cd ~; mkdir nolook; touch nolook/f1; touch nolook/f2
>>> f1  f2
# make it so regular user can't see inside
sudo chmod -R 700 nolook; sudo chown -R root:root nolook
# test
ls nolook
>>> ls: cannot open directory nolook/: Permission denied

现在编写特权和非特权脚本:

echo "
#!/bin/sh
sudo ls nolook
" > privil_scripts/priviledged_ls.sh
chmod +x !$

echo "
#!/bin/sh
sudo ls nolook
" > privil_scripts/plain_ls.sh
chmod +x !$

尝试一下:

privil_scripts/priviledged_ls.sh
>>> f1  f2

privil_scripts/plain_ls.sh
>>> [sudo] password for me:

【讨论】:

是的,抱歉,我还没有将其标记为答案。谢谢

以上是关于自定义 Sudo 命令的主要内容,如果未能解决你的问题,请参考以下文章

linux sudo 系统环境变量 用户环境变量

理解 sudo 和 sudoers

【WPF】Command 自定义命令

LaTeX教学2.7 自定义

代码调试篇:如何编写 gdb 自定义命令

代码调试篇:如何编写 gdb 自定义命令