ifコマンドを使用してフォルダの所有者をインポートする[閉じる]

ifコマンドを使用してフォルダの所有者をインポートする[閉じる]

人々が私のスクリプトからシステム上の重要なファイルを誤って削除するのを防ぎたいと思います。そのステートメントを使用してフォルダの所有者を見つける方法を知っている人はいますか?

答え1

find . -prune -user "$(id -u)"

.現在のディレクトリがあなたの所有者である場合は印刷されます。

次のことができます。

find . -prune -user "$(id -u)" -exec some command \;

または:

if [ -n "$(find . -prune -user "$(id -u)")" ]; then
  some command
fi

some command現在のディレクトリを所有している場合にのみ実行されます。

testほとんどの別名実装(別名、別名、別名、および[シェルに組み込まれている機能の1つを含む)には(大文字のO)もあります。zshbashkshdashyashbosh-O

if [ -O . ]; then
  some command
fi

シェルには、所有するファイルを選択するためのglob修飾子がzshあります。Uしたがって、find次のようなことができます。

if ()(($#)) .(NU); then
  some command
fi

現在のディレクトリ所有者であるPOSIXlyのIDを取得するには、次のようにします。

ownerid=$(LC_ALL=C ls -lnd . | awk '{print $3}')

または内蔵zsh機能を使用してください。stat

stat -LH stat . && ownerid=$stat[uid]

またはGNUを使用してくださいfind

ownerid=$(find . -prune -printf %U)

またはGNUを使用してくださいstat

ownerid=$(stat -c %u .)

またはBSDの場合stat

ownerid=$(stat -f %u .)

この情報があれば、$owneridそれを使用できるシェルプロセスの有効なユーザーIDと比較できます"$(id -u)"。一般的に言えば、アカウントデータベース内の各ユーザーIDに対して複数のユーザー名を持つことができるため、ユーザー名ではなくユーザーIDを使用する方が良いです。これにより、ユーザーデータベースを照会する必要がなくなります。

答え2

何を待つ?人が重要なシステムファイルを削除しないようにするには、rootとしてログインしないようにし、スクリプトをsetuidに設定しないようにします。

ユーザーが自分に属していないファイルの管理を支援する場合は、グループ権限を理解し、適切な設定を使用してください。 (あなたが何をしているのかわからないので、これ以上話すことはできません。)

本当にルートアクセスが必要な場合(たとえば、一般ユーザーがシステムログを管理できるようにする場合)、「ホワイトリスト」アプローチを使用してください。スクリプトは、特定の基準を満たすファイルのみを管理する必要があります。それ以外の場合、保護することを忘れる可能性がある重要なリソースが何であるかを誰が知っていますか?

関連情報