web-dev-qa-db-ja.com

なぜ実行可能ファイルなのか/ usr / sbinはrootによって書き込み可能ですか?

バイナリコンパイルされたファイル(たとえば、/usr/sbinrootユーザーの書き込み権限がありますか?

私にとって、これはコンパイルされています。つまり、直接書き込みでは意味がなく、ファイルが何らかのセキュリティ問題にさらされる可能性があります。

スクリプト(例:bashファイル)は基本的にテキストファイルなので書き込み可能かもしれませんが、コンパイルされたファイルでも、私の知る限り、書き込みが実際に必要ないのはなぜですか?

フィードバックをよろしくお願いします。

31
t1m0th33

/bin(または実行可能ファイルが保持されているその他の標準ディレクトリ)内のファイルがrootによって書き込み可能であるかどうかは問題ではありません。私が使用しているLinuxサーバーでは、ルートから書き込み可能ですが、OpenBSDマシンでは書き込み可能ではありません。

グループまたは「その他」が書き込み可能でない限り!

たとえば、セキュリティ上の問題はありません。

-rwxr-xr-x 1 root root 126584 Feb 18  2016 /bin/ls

誰かがそれを上書きしたい場合、それらはrootである必要があり、それらがrootであり、それを上書きする場合、次のいずれかです。

  1. 新しいバージョンをインストールする、または
  2. 不器用、または
  3. 攻撃者すでにroot権限がある場合

考慮すべきもう1つのことは、rootが書き込み保護されているかどうかに関係なく、rootがファイルに書き込むことができることです。

また、「スクリプト」はバイナリファイルと同じくらい実行可能ファイルであることに注意してください。スクリプトは、「テキストファイルであるため」書き込み可能である必要はありません。どちらかといえば、おそらく同じディレクトリ内の他の実行可能ファイルと同じ権限を持っているはずです。

今すぐすべてのアクセス許可を変更しないでください!これはあらゆる種類の混乱を引き起こし、アクセス許可が適切に設定されていることを確認するパッケージマネージャーを混乱させる可能性があります。また、セキュリティが重要なアプリケーションで誤って権限を誤って変更した場合にも、システムが脆弱になる可能性があります。

reallyのように見えるものを見つけない限り、実行可能ファイルの権限が正しく設定されていると仮定してください。


コメントから そしてチャットで 、いくつかの歴史を求める声がありました。

バイナリのアクセス許可の履歴Linuxは、私が知っていることではありません。彼らは単にディレクトリから、またはLinuxのデフォルトのumaskから権限を継承しただけだと推測されるかもしれませんが、実際にはわかりません。

私が知っていることは、OpenBSDがバイナリを基本システムにインストールすることです1 デフォルトでは権限モード555です(-r-xr-xr-x)。これは、BINMODEを555に設定する/usr/share/mk/bsd.own.mkのMakefileフラグメントで指定されています(既に設定されていない場合)。これは、後でmake build/usr/src中に実行可能ファイルをインストールするときに使用されます。

このファイルの注釈付きCVSログ を確認したところ、ファイルのこの行は、1995年にNetBSDからインポートされて以来変更されていないことがわかりました。

NetBSDでは、ファイルは1993年に 最初にCVSに配置されました で、BINMODEは555に設定されています。

FreeBSDプロジェクトは、NetBSDとまったく同じファイルを使用しているようです 少なくとも1994年以降 、および 後でコミットする場合 は、古いファイルのコミットメッセージにヒントを追加しますBerkeley Software Distributionの4.4BSDリリース。

それを超えて、 バークレーのCSRG ソースを [〜#〜] sccs [〜#〜] に保持しましたが、リポジトリは GitHubのGit形式で利用可能です)2。ここで私たちが法医学的な扱いをしているファイル コミットされているようですキース・ボスティック (または彼のすぐ近くにいる誰か)によって1990年に。

それがその話です。 whyが必要な場合は、キースに尋ねる必要があると思います。変更に対するコミットメッセージが "これは555である必要があるので..."と表示することを少し期待していましたが、違います。

1BSDシステムは、Linuxよりも「基本システム」と「サードパーティパッケージ」(ポート/パッケージ)に厳密に分かれています。基本システムは、オペレーティングシステムを実行するためのcompleteファシリティのセットを提供する一貫したユニットであり、ポートまたはパッケージは「ローカルソフトウェア」と見なされ、/usr/localの下にインストールされます。

270年代以降のUnixリリースのより包括的なGitHubリポジトリ 利用可能です

51
Kusalananda