Answers:
旧线程,但是如何:
echo 'foobar ALL=(ALL:ALL) ALL' | sudo EDITOR='tee -a' visudo
echo "$CONFIGLINE" | (EDITOR="tee -a" visudo)
-a
标记为EDITOR="tee"
:它将在文件后追加行,而不仅仅是覆盖第一行。起初我没有发现不同之处,也无法确定添加方式。我希望我能通过直接指出来找到一些人;-)
为此,使用visudo和自定义编辑器。这解决了Brian的解决方案中的所有比赛条件和“ hack”问题。
#!/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
该脚本会将“#Dummy change to sudoers”添加到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
--enable-env-editor
,否则,如果它是一小套已知值之一,则只会使用尊重编辑器变量。
sudo -E
从第一个命令中删除了该命令,但是这对我来说非常有用。
您应该对临时文件进行编辑,然后使用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
在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
这种检查,并返回成功(0),如果它是有效的,所以你可以使用它if
,&&
和其他脚本布尔运算。验证后,只需将其复制到中即可/etc/sudoers.d
使用。确保其归root所有,不可被其他人写入。
许多答案都与sudo一起用于yonks,但直到现在都不需要自动化安装配置。我混合使用了上面的一些答案,将配置行写入/etc/sudoers.d包含位置,因此我不必修改主sudoers文件,然后检查该文件的语法,下面是简单的示例:
将您的行写到sudoers包含文件中:
sudo bash -c 'echo "your_user ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers.d/99_sudo_include_file'
检查您的sudoers包含文件是否通过了visudo语法检查:
sudo visudo -cf /etc/sudoers.d/99_sudo_include_file
我认为最直接的解决方案是:
创建一个脚本addsudoers.sh
#!/bin/sh
while [ -n "$1" ]; do
echo "$1 ALL=(ALL:ALL) ALL" >> /etc/sudoers;
shift # shift all parameters
done
并与您要添加为的用户一起调用它:
root prompt> ./addsudoers.sh user1 user2
有关完整说明,请参见以下答案: 通过shell脚本将用户添加到sudoers
问候!
根据其他人在这里发布的内容,这对我有用。当我使用其他人的脚本时,它将为我打开visudo,但不会进行编辑。进行此编辑后,我需要允许所有用户(包括标准用户)安装适用于Safari / Firefox的Java 7u17。
#!/usr/bin/env bash
rm /etc/sudoers.new
cp /etc/sudoers /etc/sudoers.new
echo "%everyone ALL = NOPASSWD: /usr/sbin/installer -pkg /Volumes/Java 7 Update 17/Java 7 Update 17.pkg -target /" >> /etc/sudoers.new
cp /etc/sudoers.new /etc/sudoers
这会将%everyone blah blah添加到sudoers文件的底部。我必须像这样运行脚本。
sudo sh sudoersedit.sh
祝你好运:D
echo "$USER ALL=NOPASSWD:/usr/bin/rsync" | (sudo su -c 'EDITOR="tee" visudo -f /etc/sudoers.d/rsync')
。