/etc/sudoers
ホワイトリストに追加/削除するには、スクリプトを編集する必要があります。
通常のファイルで機能するコマンドがあると仮定すると、どのように適用できます/etc/sudoers
か?
それをコピーして変更し、visudo
オリジナルを変更したコピーに置き換えることはできますか? 独自のスクリプトを$EDITOR
?
または、同じロックと を使用できcp
ますか?
問題は、機能するものを見つけることだけではなく、潜在的な問題についてです。
カスタムエディタでこれに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の最後に「#Dummychangetosudoers」という行を追加します。ハッキングや競合状態はありません。
これが実際にどのように機能するかを説明する注釈付きバージョン:
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
visudo は、編集用のヒューマン インターフェイスであると想定されています/etc/sudoers
。ファイルを直接置き換えることで同じことを実現できますが、同時編集と構文検証について注意する必要があります。r--r-----
権限に注意してください。
カスタム エディターをセットアップします。基本的には、ファイル名 (この場合は /etc/sudoers.tmp) を受け取り、それを変更してその場所に保存するスクリプトになります。したがって、そのファイルに書き出すことができます。完了したらスクリプトを終了すると、visudo が実際の sudoers ファイルを変更します。
sudo EDITOR=/path/to/my_dummy_editor.sh visudo
上記の回答にさらにオプションを追加するために、競合状態が大きな懸念事項でない場合は、次のコマンドを使用して、変更されたファイルを手動でコピーすることを回避できます。/etc/sudoers
sudo EDITOR="cp /tmp/sudoers.new" visudo
これにより、新しいファイルが検証され、アクセス許可が更新されて正しくインストールされます。
/tmp/sudoers.new
ファイルにエラーがある場合は、visudo
ユーザー入力を求めるプロンプトが表示されるため、最初に確認することをお勧めしvisudo -c -f /tmp/sudoers.new
ます。
エコーしてみてください。ただし、サブシェルで実行する必要があります。例:
sudo sh -c "echo \"group ALL=(user) NOPASSWD: ALL\" >> /etc/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 blah が sudoers ファイルの末尾に追加されました。このようにスクリプトを実行する必要がありました。
sudo sh sudoersedit.sh
頑張ってください:D