回答:
古いスレッドですが、どうですか:
echo 'foobar ALL=(ALL:ALL) ALL' | sudo EDITOR='tee -a' visudo
echo "$CONFIGLINE" | (EDITOR="tee -a" visudo)
-a
フラグEDITOR="tee"
::最初の行を上書きするだけでなく、ファイルに行を追加します。最初は違いを理解できず、追加する方法を理解できませんでした。私はそれを直接指すことでいつか誰かを見つけることができることを願っています;-)
カスタムエディターでこれを行うには、visudoを使用します。これにより、ブライアンのソリューションですべての競合状態と「ハッキング」問題が解決されます。
#!/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
このスクリプトは、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
--enable-env-editor
。そうでない場合は、既知の値の小さなセットの1つである場合にのみ、エディター変数が考慮されます。
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
で動作します。ルートが所有し、他のユーザーが書き込みできないことを確認してください。
カスタムエディタを設定します。基本的には、ファイル名(この場合は/etc/sudoers.tmp)を受け入れ、それを変更して適切な場所に保存するスクリプトです。したがって、そのファイルに書き出すことができます。完了したら、スクリプトを終了すると、visudoが実際のsudoersファイルの変更を処理します。
sudo EDITOR=/path/to/my_dummy_editor.sh visudo
#!/bin/sh; echo "# my changes to sudoers" >> $1; exit 0
それは私のために働くようです。
たくさんの回答があり、sudoを使って作業していますが、今までセットアップ構成を自動化する必要はありませんでした。上記の回答のいくつかを組み合わせて使用し、/ 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
最も簡単な解決策は次のとおりです。
スクリプトaddudoers.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
詳細な説明については、この回答を参照してください:シェルスクリプトを使用してユーザーをsudoersに追加する
よろしく!
これは、他の人がここに投稿したものに基づいて私にとってうまくいきました。他の人のスクリプトを使用すると、visudoが開きますが、編集はできません。これにより、標準ユーザーを含むすべてのユーザーがJava 7u17をsafari / firefoxにインストールできるようにするために必要な編集が行われました。
#!/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 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')
。