私は小さなbashスクリプトを持っています:
#!/bin/bash
touch dummy.txt
このスクリプトを実行すると、ルート保護されるsudo
ものが作成されます。dummy.txt
私がやりたいことは:
このスクリプトが実行されるのsudo
が通常のユーザーであるかどうかに関係なく、ファイルdummy.txt
はrootで保護されるべきではありません。
私は小さなbashスクリプトを持っています:
#!/bin/bash
touch dummy.txt
このスクリプトを実行すると、ルート保護されるsudo
ものが作成されます。dummy.txt
私がやりたいことは:
このスクリプトが実行されるのsudo
が通常のユーザーであるかどうかに関係なく、ファイルdummy.txt
はrootで保護されるべきではありません。
回答:
および変数をsudo
使用してスクリプトが実行されているかどうかをテストし、trueのように実行できます。EUID
SUDO_USER
touch
SUDO_USER
#!/bin/bash
if [[ $EUID -eq 0 ]] && [[ -n $SUDO_USER ]]; then
sudo -u "$SUDO_USER" touch dummy.txt
else
touch dummy.txt
fi
==
文字列の比較に使用されることに注意してください。$EUID
は整数値を返すことになっているので、-ed
比較を使用することをお勧めします。 ユーザー名にはスペースを使用できるため、$SUDO_USER
変数を引用符で囲んでください。そうでなければ、良い答え-これは私が個人的に使用するものです。
sudo -u
rootとして実行されていることを検出した場合、スクリプト自体を再実行させることができます。OPは、1つのスクリプトに複数のコマンドを含めることについて話しました。ただし、エラーで無限ループが発生しないように注意してください。
[[...]]
ないので、ifステートメント@Serg内で変数を引用するのに厳密には必要ありません。-ed
誤字だったと思います-eq
-eq
。[[
単語分割がないことを知りませんでした。ありがとう。個人的には、スクリプトの習慣を
スクリプトをとして実行することを意図していない場合root
、問題を解決する最も安全な方法は、最初にスクリプトの実行を中止することです。
if [ "$EUID" = 0 ]; then
echo "This script must NOT be run as root"
exit 1
fi
オプションで、sudo -u FALLBACK_USER "$0"
単に中止するのではなく、フォールバックユーザー(例:)としてスクリプトを再実行できます。
個々のコマンドの癖を修正しようとすると、スクリプトが不必要に複雑になり、デバッグが難しくなります。変更するたびに、すべてのテストを2回(通常のユーザーとして、次にとしてroot
)実行し、にroot
関連するすべてのバグを修正する必要があります。言うまでもなく、これは将来性のあるソリューションではありません。
デフォルトでは、root accoundで作成されたファイルには次のような権限があります。
-rw-r--r-- 1 root root 0 11月 17 23:25 rootfile.txt
このファイルはrootユーザーとrootグループに属し、rootによる読み取りと書き込みが可能ですが、他のユーザーのみが読み取り可能です。
最も簡単な方法はchown
、ファイルを元のユーザーに戻すことです。
chown username:group_name dummy.txt
次のように$SUDO_USER
、sudo
が呼び出されたときにのみアクセス可能な変数を使用できます。
chown "$SUDO_USER":"$SUDO_USER" dummy.txt
スクリプトを通常のユーザーとして実行している場合、そのchown
部分はまったく必要ないため、&&
スクリプトがrootとして実行されている場合のケースをテストするためにifステートメントまたはテストの使用を検討し、これらの行に沿って何かを行うことができます。
#!/bin/bash
touch dummy.txt
[ $UID -eq 0 ] && chown "$SUDO_USER":"$SUDO_USER" dummy.txt
上記は推奨されるアプローチです。他にも、chmod
ユーザーとグループの読み取り/書き込み/実行権限を変更するために使用するものなどがありますが、お勧めしません。
sudo
、いいえ-無視できません。あなたのオプションは、通常のユーザーとしてスクリプトを実行する(あなたがここでユーザーのファイルを作成しているだけなので、なぜしないのか分かりません)か、私の回答に示すようにファイルの所有権を変更します。
chown
とchmod
を使用して、必要に応じて所有権と権限を設定できます。