Linuxでコマンドやスクリプトを実行するためのパスワードを設定する方法は?
許可されていないユーザーがスクリプト(ユーザーとパスワードの詳細を含む)を使用または実行するのを防ぐ必要があります。特定のスクリプトを実行するためにパスワードを設定する方法があります。
答え1
Sudoたぶんそれが行く方法です。
特定のユーザーがスクリプトを所有者と実行可能にし、他のユーザーがアクセスできないようにします(例:700権限)。
次に、sudoersを使用してsudoersファイルを編集し、visudo
次の行を追加します。
%your_group ALL=path_to_script/script
スクリプトを実行できるすべてのユーザーをyour_groupに追加する必要があります。
したがって、your_groupに属していない人はスクリプトを実行できません。別の方法は、ユーザー名を指定することです。
username ALL=path_to_script/script
答え2
パスワードは承認されたユーザーのみが読むことができるようにする必要があります。パスワードをスクリプトに保存せず、スクリプトから読み取る別のファイルに保存してください。このように権限を管理する方がはるかに簡単です。資格情報をスクリプトに保存すると、最終的な場所を決定するのは困難です。誤ってコピーされる可能性があり、バージョン管理に入力する必要がある場所などがあります。
資格情報をスクリプトから分離すると、2番目に重要な利点があります。これは、「スクリプト実行権限」と「リソースアクセス権限」を区別します。これは、実際には人々がスクリプトを実行するのを防ぐのではなく、人々がリソースにアクセスするのを防ぎたいからです。したがって、パスワードファイルの権限を適切に設定することで問題ありません。
権限を管理する簡単な方法は、グループを作成し、リソースへのアクセス権を持つユーザーをそのグループに配置することです。グループをグループと呼び、seniors
ユーザーalice
とbob
リソースへのアクセスを許可します。seniors
(例:)というグループを作成し、そのaddgroup seniors
グループにユーザーを追加します(例adduser alice seniors; adduser bob seniors
:)。このグループが所有し、seniors
このグループのみを読み取ることができるパスワードファイルを作成します。
chgrp seniors password.txt
chmod u=rw,g=r,o= password.txt # or chmod 640 password.txt for short
特定のユーザーがスクリプトを実行できますが、リソースにランダムにアクセスできないようにしたい場合があります。あなたの質問はこれについて言及していませんが、私たちが準備する方法を説明します。
ユーザーが特定のスクリプトを実行できるはずcharlie
ですdominique
が、リソースにアクセスできないとします。というグループを作成し、juniors
これらのユーザーをそのグループに入れます。 (実際にグループを作成する必要はありませんが、管理が簡単になります。)Sudoこのルールを使用すると、グループ内のユーザーはjuniors
グループの権限を取得できますが、seniors
特定のプログラム(パスワードファイルを読み取るスクリプト)のみを実行できます。次の行をファイルvisudo
に追加するには:sudoers
%juniors ALL = (:seniors) /path/to/script ""
サブエントリはを呼び出してスクリプトを実行できますsudo -g seniors /path/to/script
。これにより、このグループが付与した追加の権限でスクリプトが実行されますseniors
。それにもかかわらず、呼び出すユーザーはsudo
パスワードファイルにアクセスできません(スクリプトにバグがあるか、だまされて公開できる場合を除く)。
sudoは、誰かがパスワードを知らずにリソースにアクセスできる必要がある場合にのみ役に立つことをもう一度覚えておいてください。特定のユーザーにパスワードへのアクセスを制限し、他のユーザーがリソースにアクセスすることを許可したくない場合は、何もしません。
答え3
答えてくださった方々に感謝します。私が実装した最後の答えは...このサイトの他の場所でパスワードを/ etc / shadowと比較するルーチンを見つけました。
私はグラフィカルインターフェイスを使用しているので、zenityを使ってパスワードを求めるメッセージを表示しています。自動ログインのため、RPiユーザーは自分のパスワードを知ることができません。パスワードを入力すると、ユーザーアカウントのソルトを使用してハッシュに変換され、結果のハッシュが元のハッシュと比較されます。同じ場合は、ターミナルプログラムを実行してください。
zenityキャンセルボタンを押すか、間違ったパスワードを入力しても何も起こりません。
grep /etc/shadow ファイルの権限を必要とするスクリプトを実行するには、/etc/sudoers.d/myfile = UserA ALL=(ALL) NOPASSWD: /opt/myFiles/startTerminal.sh にエントリがあります。
スクリプトは次のとおりです。
USERNAME=UserA
PASSWD=$(zenity --forms --title=" " \
--text="Enter Password" \
--add-password="" )
if [[ $? -eq 0 ]]; then
export PASSWD
ORIGPASS=`grep -w "$USERNAME" /etc/shadow | cut -d: -f2`
export ALGO=`echo $ORIGPASS | cut -d'$' -f2`
export SALT=`echo $ORIGPASS | cut -d'$' -f3`
GENPASS=$(perl -le 'print crypt("$ENV{PASSWD}","\$$ENV{ALGO}\$$ENV{SALT}\$")')
if [ "$GENPASS" == "$ORIGPASS" ]; then
/usr/bin/lxterminal &
exit 0
fi
fi