ユーザーがドットスラッシュを介してディレクトリからコマンドを実行するのを防ぐ方法は?

ユーザーがドットスラッシュを介してディレクトリからコマンドを実行するのを防ぐ方法は?

ディレクトリのドットスラッシュ表記でコマンドの実行を制限できるかどうかを知っている人はいますか?

環境はLinuxのbashです。

たとえば、ディレクトリがあります/usr/local/app/bin。 Inは/usr/local/app/binfooというコマンドです。一部のユーザーでは、ログイン中にfooのエイリアスを作成してfooを別の場所にリダイレクトします。

/usr/local/app/bin私はこれらのユーザーがCDを使ってfooを直接実行したくありません。

$ ./foo

これらのユーザーは/usr/local/app/binで他のコマンドを実行できるはずですが、そうすることがブロックされている場合./

最後に、私の目標は、特定のユーザーがインタラクティブにログインしたときにfooをインタラクティブに実行できないように制限することです。たとえば、(およそ).bashrcでは、次のようになります。

if [ -z "$PS1" ]; then
:
else
alias foo="echo access denied!"
fi

これは、ユーザーが./を使用して/usr/local/app/binでfooを直接実行できない場合に機能します。ファイルは実行可能でなければなりませんが、フルパスが使用されている場合にのみ可能です。誰かがこれを達成する賢い方法を知っていることを願っています。

ベストアンサー1

どれくらい深く行きたいかによって、すべてが可能です。シェル、カーネルをハッキングしたり、selinuxやAppArmourに入るのを望まないとしましょう。いいえ、ファイルシステムの権限やaclを変更しないと、人々がfoo(./fooまたは他の方法で)を実行するのを防ぐことはできません。

Linuxでは、実行可能ファイルはファイル権限とposix aclに基づいて実行されます。実行可能であれば実行でき、フルパスで実行する必要があるかどうかは実行可能ファイル自体でのみ確認できます。単純なパス問題であればこれをシェルで包み、$0パラメータを確認することができますが、安全のためにこれは糸口がある人なら誰でも数秒で解決できる難読化だけです。

それ以外の場合は、acl とユーザーとグループの実行可能性によって処理されます。ただし、ユーザーアカウント、ファイルシステムACL、およびグループを管理する必要があります。

通常、ファイルは管理者アカウントが所有しているため、ほとんどのユーザーアカウントはグループまたはその他の権限で操作を実行します。

「その他」から実行権限を削除します。

chmod o-x /path/to/foo

fooのグループメンバーシップを信頼できるグループに移動し、グループの実行権限が設定されていることを確認してください。

chgrp trusted /path/to/foo
chmod g+x /path/to/foo

これで、すべてのユーザーを追加する必要があります。しなければならないfooを信頼できるグループとして実行する機能。

for eachUser in a potentially a big long list of user accounts
do
    usermod --append --groups trusted $eachUser
done

これによって発生する管理オーバーヘッドは、既存のUnix権限がそれほど悪い理由です。

posix aclの場合、実行権限なしでユーザーをファイルに簡単に追加できます。アクセス制御リストを読み取るには getfacl を使用します。

for eachUser in a smaller list of restricted users
do
    setfacl -m user:$eachUser:000 /path/to/foo
done

aclエントリはユーザーアカウントのためであるため、デフォルトのユーザー/グループ/その他のファイルシステム権限よりも優先され、ユーザーにはファイルに対する権限がありません。他の誰もが正常にファイルを使用できます。

ただし、数学的に優れたアプローチは、制限されたすべてのアカウントをグループに入れてから、単一のユーザーではなく権限なしでグループをファイルに追加することです。

おすすめ記事