136

/etc/sudoersホワイトリストに追加/削除するには、スクリプトを編集する必要があります。

通常のファイルで機能するコマンドがあると仮定すると、どのように適用できます/etc/sudoersか?

それをコピーして変更し、visudoオリジナルを変更したコピーに置き換えることはできますか? 独自のスクリプトを$EDITOR?

または、同じロックと を使用できcpますか?

問題は、機能するものを見つけることだけではなく、潜在的な問題についてです。

4

13 に答える 13

44

カスタムエディタでこれに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
于 2010-09-14T07:13:07.873 に答える
31

一時ファイルを編集してから、 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
于 2008-11-27T15:15:31.343 に答える
11

visudo は、編集用のヒューマン インターフェイスであると想定されています/etc/sudoers。ファイルを直接置き換えることで同じことを実現できますが、同時編集と構文検証について注意する必要があります。r--r-----権限に注意してください。

于 2008-11-27T15:17:48.093 に答える
5

カスタム エディターをセットアップします。基本的には、ファイル名 (この場合は /etc/sudoers.tmp) を受け取り、それを変更してその場所に保存するスクリプトになります。したがって、そのファイルに書き出すことができます。完了したらスクリプトを終了すると、visudo が実際の sudoers ファイルを変更します。

sudo EDITOR=/path/to/my_dummy_editor.sh visudo
于 2008-11-27T15:22:25.573 に答える
2

上記の回答にさらにオプションを追加するために、競合状態が大きな懸念事項でない場合は、次のコマンドを使用して、変更されたファイルを手動でコピーすることを回避できます。/etc/sudoers

sudo EDITOR="cp /tmp/sudoers.new" visudo

これにより、新しいファイルが検証され、アクセス許可が更新されて正しくインストールされます。

/tmp/sudoers.newファイルにエラーがある場合は、visudoユーザー入力を求めるプロンプトが表示されるため、最初に確認することをお勧めしvisudo -c -f /tmp/sudoers.newます。

于 2013-05-29T17:16:11.510 に答える
0

エコーしてみてください。ただし、サブシェルで実行する必要があります。例:

sudo sh -c "echo \"group ALL=(user) NOPASSWD: ALL\" >> /etc/sudoers"

于 2014-06-18T17:50:50.883 に答える
-2

これは、他の人がここに投稿したものに基づいて機能しました。他の人のスクリプトを使用すると、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

于 2013-03-13T21:41:02.020 に答える