web-dev-qa-db-ja.com

Unixファイルシステムでファイルモードに「実行」ビットが必要なのはなぜですか?

読み取り専用のアクセス許可(rootへの読み取りと実行)を持つ実行可能ファイルを取得した場合、フルコントロールのアクセス許可があるホームディレクトリにいつでもコピーできます。次に、新しいファイルを読み取って実行するように設定しました。さて、実行できます。

ファイルモードには本当に必要ですか?私はディレクトリにとってそれが違うことを意味することを知っています。

7
woodings

特別な特権で実行されるバイナリについて誰も言及していないことに驚いています。 Wiresharkには、実際のユースケースがあります。その主な機能の1つは、ネットワークトラフィックのキャプチャです。これは、通常はrootだけが実行できることです。特定のユーザーが完全なルートアクセスを許可せずにWiresharkでトラフィックをキャプチャできるようにすることは理にかなっているため、Wiresharkには、必要な機能(CAP_NET_RAWおよびCAP_NET_ADMIN)が有効になっているdumpcapというバイナリが付属しています。このバイナリは0754(rwxr-xr--)およびそれに関連するGIDは、Wiresharkがインストールする特別なグループです。このようにして、グループ内のすべてのユーザーがバイナリを実行して(通常はWiresharkを介して)トラフィックをキャプチャでき、そのために必要な権限で実行されますが、そのグループに属していないユーザーは実行できないため、実行できません。実行権限があります。それでもホームディレクトリにコピーすることはできますが、コピーに必要な機能が設定されていないため、実際にトラフィックをキャプチャすることはできませんでした。

4
flarn2006

* nixは、ファイルに「.exe」という名前を付けた場合は「バイナリ実行可能ファイル」、「。bat」という名前を付けた場合は「スクリプト実行可能ファイル」にするほどの脳損傷はありません。

Linuxでは、ファイルの名前は重要ではありません。

そして、あなたがファイルに与えるパーミッションdo問題。

どちらの種類が理にかなっています。私見では...

12
paulsm4

実行ビットは、パーミッションとオブジェクトタイプ識別子の間で多少混乱しています。

また、ファイルをホームディレクトリに「常にコピー」することはできません。読み取り可能な場合に限ります。

ファイルは実行可能ですが、読み取り可能ではありません。

ファイルが読み取り可能であるが実行可能ではない場合は、ファイルをコピーして実行ビットを反転し、使用することができます。多分。しかし、それはうまくいかないかもしれません。実行可能ファイルは、インストール場所に依存する場合があります。または、ファイルはそのsetuidルートビットに依存する場合があります。

私は、白紙の状態から始めて、そのように許可システムを設計することはしません。それは完全には意味がありません。実行権限は実行可能タイプ属性とは別のものであり、実行権限が検索権限でオーバーロードされることはありません(そのように保存されていても、APIはビットマスクレベルでそれを明らかにしません)。

4
Kaz

特に特定のユーザーまたはグループによって、ファイルを読み取り可能であるが実行可能ではないものとしてマークしたい理由はたくさんあります。次のことを考慮してください。

# /usr/local/sbin/foo.sh
-rwxr--r-- 1 root root 890 2012-02-17 21:09 /usr/local/sbin/foo.sh

# ~/bin/foo.sh
-rwxr-xr-x 1 user user 890 2012-02-17 21:09 /home/bin/foo.sh

これは、次の場合に意味があります。

  1. ファイルは異なります(スクリプトで「root」のすべてのインスタンスを「user」に置き換えた可能性があります)が、パスには/usr/local/sbin:/home/user/binが含まれています。パーミッションは、実行ビットが設定されている場合、ルートのコピーが検索パスの最初に来る場合でも、foo.shを実行するとユーザーの変更されたコピーが実行されることを保証します。
  2. ファイルは同一ですが、実行時に、そのベース名、親ディレクトリ、呼び出し元のユーザーのホームディレクトリ、またはその他の巧妙なプログラミングトリックに基づいて何かが異なります。このような場合、wantユーザーは、ファイルを実行する前に別の場所にファイルをコピーします。多くのサンプルスクリプトは、ユーザーにコピーとカスタマイズを強制するために実行ビットを削除します。

最終的には、読み取ることができるファイルをコピーしたり、sh /path/to/fileを使用して直接実行したりすることを妨げるものは何もありません。ユーザーまたはグループの実行ビットが欠落していると、accidentで実行できなくなります。これはセキュリティ対策ではないため、セキュリティ対策を講じるべきではありません。

1
CodeGnome

それは良い点です、そして私はあなたがこれでどこに向かっているのかわかると思います。

質問を再解釈するには:次の主張は正しいですか?「ユーザーの実行可能ファイルを非実行可能モードに設定しても、ユーザーの機能は制限されません」。

本当だと思います。

  1. ファイルを他のディレクトリにコピーします。
  2. Exec権限を変更します。
  3. コマンドライン引数を使用して、実行可能ファイルの新しいコピーへのフルパスを指定することにより、任意のpwd(特に元のディレクトリ)から実行します。

元のファイルのexecpermをオンに設定することで、他に不足しているものはないと思います。

Pwdとは、現在の作業ディレクトリを意味します。

1

私が理解していることから、あなたはなぜあなたが読み取り専用で実行不可能なものをホームディレクトリにコピーして実行可能にし実行できるのかを知りたいので、「実行可能」ビットが不要であるという幻想を作り出します。

あなたの場合、実行可能ファイルは元の場所でしか機能しない可能性があるため、新しい場所にコピーして実行すると失敗するので便利です。

一方、フルアクセス権を持つ独自のホームディレクトリがあると、システムにある程度の信頼性がすでに与えられます。ユーザーが読み取りアクセス権しか持たない状況はたくさんあります。その場合、実行可能ファイルを読み取ることはできても、実行することはできません。

0
Shocker