n-a*_*der 107 linux shell sudo
我需要/etc/sudoers
从脚本编辑以添加/删除白名单中的内容.
假设我有一个可以在普通文件上运行的命令,我该如何应用它/etc/sudoers
?
我可以复制和修改它,然后visudo
用修改过的副本替换原件吗?通过提供我自己的脚本$EDITOR
?
或者我可以使用相同的锁和cp
?
问题更多的是关于潜在的问题,而不仅仅是找到有用的东西.
小智 131
旧线程,但是怎么样:
echo 'foobar ALL=(ALL:ALL) ALL' | sudo EDITOR='tee -a' visudo
Run Code Online (Sandbox Code Playgroud)
sst*_*dal 42
使用自定义编辑器使用visudo.这解决了Brian的解决方案中的所有竞争条件和"黑客"问题.
#!/bin/sh
if [ -z "$1" ]; then
echo "Starting up visudo with this script as first parameter"
export EDITOR=$0 && sudo -E visudo
else
echo "Changing sudoers"
echo "# Dummy change to sudoers" >> $1
fi
Run Code Online (Sandbox Code Playgroud)
这个脚本会在sudoers结束时添加"#dummy change to sudoers"这一行.没有黑客,没有竞争条件.
带注释的版本,解释了它实际上是如何工作的:
if [ -z "$1" ]; then
# When you run the script, you will run this block since $1 is empty.
echo "Starting up visudo with this script as first parameter"
# We first set this script as the EDITOR and then starts visudo.
# Visudo will now start and use THIS SCRIPT as its editor
export EDITOR=$0 && sudo -E visudo
else
# When visudo starts this script, it will provide the name of the sudoers
# file as the first parameter and $1 will be non-empty. Because of that,
# visudo will run this block.
echo "Changing sudoers"
# We change the sudoers file and then exit
echo "# Dummy change to sudoers" >> $1
fi
Run Code Online (Sandbox Code Playgroud)
Bri*_*ane 29
您应该对临时文件进行编辑,然后使用visudo -c -f sudoers.temp确认更改是有效的,然后将其复制到/ etc/sudoers的顶部
#!/bin/sh
if [ -f "/etc/sudoers.tmp" ]; then
exit 1
fi
touch /etc/sudoers.tmp
edit_sudoers /tmp/sudoers.new
visudo -c -f /tmp/sudoers.new
if [ "$?" -eq "0" ]; then
cp /tmp/sudoers.new /etc/sudoers
fi
rm /etc/sudoers.tmp
Run Code Online (Sandbox Code Playgroud)
pev*_*vik 15
在Debian及其派生中,您可以将自定义脚本插入到/etc/sudoers.d/
目录中,并具有权限0440
- 有关详细信息,请参阅/etc/sudoers.d/README.
它可能有所帮助.
如果您sudo
允许添加条目/etc/sudoers.d
,那么您可以使用@ dragon788的答案:
https://superuser.com/a/1027257/26022
visudo
在您将文件复制到文件之前/etc/sudoers.d
,您通常会使用它来验证文件,因此您可以确定不会破坏sudo
任何人.
visudo -c -q -f filename
Run Code Online (Sandbox Code Playgroud)
这将检查并返回成功(0),如果它是有效的,所以你可以使用它if
,&&
和其他脚本布尔运算.一旦验证,只需将其复制到/etc/sudoers.d
它应该工作.确保它由root拥有,而不是由其他人写的.
很多答案,一直在使用 sudo for yonks,但直到现在都不需要自动化设置配置。我混合使用了上面的一些答案,将我的配置行写入 /etc/sudoers.d 包含位置,这样我就不必修改主 sudoers 文件,然后检查该文件的语法,下面是简单示例:
将您的行写入 sudoers 包含文件:
sudo bash -c 'echo "your_user ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers.d/99_sudo_include_file'
Run Code Online (Sandbox Code Playgroud)
检查您的 sudoers 包含文件是否通过了 visudo 语法检查:
sudo visudo -cf /etc/sudoers.d/99_sudo_include_file
Run Code Online (Sandbox Code Playgroud)
设置自定义编辑器.基本上它将是一个接受文件名的脚本(在本例中为/etc/sudoers.tmp),并修改并保存到位.所以你可以写出那个文件.完成后,退出脚本,visudo将负责为您修改实际的sudoers文件.
sudo EDITOR=/path/to/my_dummy_editor.sh visudo
Run Code Online (Sandbox Code Playgroud)
这是我想出的解决方案。这是一个快速而肮脏的解决方案,但它有效......
echo "username ALL=(ALL) NOPASSWD:ALL" | sudo tee -a /etc/sudoers
Run Code Online (Sandbox Code Playgroud)
它将 echo 输出传送到在 sudo 下运行的 tee 中。然后 Tee 将输出附加到 sudoers 文件中。
归档时间: |
|
查看次数: |
66336 次 |
最近记录: |