ホワイトリストの内容を追加/削除するには、スクリプトから/etc/sudoers
を編集する必要があります。
通常のファイルで動作するコマンドがあると仮定して、どのようにして/etc/sudoers
に適用できますか?
コピーして変更し、visudo
で元のコピーを変更されたコピーに置き換えますか? $EDITOR
で独自のスクリプトを提供することにより?
または、同じロックとcp
を使用できますか?
問題は、単に機能するものを見つけることではなく、潜在的な問題についてです。
古いスレッドですが、どうですか:
echo 'foobar ALL=(ALL:ALL) ALL' | Sudo EDITOR='tee -a' visudo
これには、カスタムエディターで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
このスクリプトは、「#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
一時ファイルを編集してから、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およびその派生製品では、カスタムスクリプトをinto/etc/sudoers.d/
directory、権利付き0440
–詳細は / etc/sudoers.d/README をご覧ください。
役立つかもしれません。
visudoは、編集用のヒューマンインターフェイスであると考えられます/etc/sudoers
。ファイルを直接置き換えることで同じことを実現できますが、同時編集と構文検証に注意する必要があります。 r--r-----
パーミッション。
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
たくさんの回答があり、Sudoを使って作業をしていましたが、今までセットアップ設定を自動化する必要はありませんでした。上記の回答のいくつかを組み合わせて使用し、メインのsudoersファイルを変更する必要がないように/etc/sudoers.dインクルードの場所に設定行を書き込んでから、そのファイルの構文を確認しました(以下の簡単な例):
Sudoersインクルードファイルに行を書き込みます。
Sudo bash -c 'echo "your_user ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers.d/99_Sudo_include_file'
Visudo構文チェックに合格したファイルがsudoersに含まれていることを確認します。
Sudo visudo -cf /etc/sudoers.d/99_Sudo_include_file
上記の回答に追加のオプションを追加するために、競合状態が重要でない場合、次のコマンドを使用して、変更されたファイルを/etc/sudoers
に手動でコピーすることを回避できます。
Sudo EDITOR="cp /tmp/sudoers.new" visudo
これにより、新しいファイルが検証され、権限が更新されて正しくインストールされます。
/tmp/sudoers.new
ファイルにエラーがある場合、visudo
はユーザー入力を要求するため、最初にvisudo -c -f /tmp/sudoers.new
でチェックすることをお勧めします。
最も簡単な解決策は次のとおりです。
スクリプトを作成する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
完全な説明については、この回答を参照してください。 シェルスクリプトを介してユーザーをsudoersに追加する
よろしく!
エコーしてみてください。ただし、サブシェルで実行する必要があります。例:
Sudo sh -c "echo \"group ALL=(user) NOPASSWD: ALL\" >> /etc/sudoers"