web-dev-qa-db-ja.com

起動中に機能が取得される場所

ノードアプリケーションに少数のポート(正確には、http2サーバーであるため443)にバインドする機能が必要です。

私はこれをSudo setcap cap_net_bind_service=+ep /path/to/nodeで行います

これは明らかにブーツの上に記憶されています。 nvmを使用して、さまざまなバージョンのノードをインストールできるようにしています。バージョンをアップグレードしたばかりで、もちろんバインドしていません。

機能を再度追加するのは簡単ですが、おそらくどこかに、古いバージョンのノードでオフにする必要のあるアクセス許可を蓄積しています。

しかし、ブートシーケンスのどこでこれが発生するのかわかりません。誰かがどこにいるのか教えてもらえますか(私はDebianを実行しています)。

編集

情報は実行可能ファイルの追加属性内に格納する必要があると思います。ただし、この方法で設定したファイルに追加の属性が見つかりません。

1
akc42

setcap(8)を参照してください。機能が設定されています実行可能ファイルの場合。これは、SUIDまたはSGIDと同様に機能します(ただし、より細かい粒度で)。 「起動プロセス」のどこにもこれは処理されません。ファイルがプログラムとして実行されるときはいつでも、結果のプロセスは機能を取得します。

はい、古いバージョンのファイルに昇格された特権を残すことは重大なセキュリティリスクです。新しいバージョンがインストールされるたびに、古いバージョンを削除することをお勧めします。

1
vonbrand

機能は、ディレクトリ内のファイルエントリとともに保存されます(より正確には、他の種類のアクセス許可と同様に、ファイルの inode にあります)。起動中に特別なことは何も起こりません。

GNU coreutils 8.23の時点で、lsコマンドはLinuxの機能を認識していないため、プログラムに機能が設定されていることを示すものは出力に表示されません。 。getcapコマンドを使用して、機能を一覧表示します。

ファイルからすべての機能をクリアするには、setcap -r /path/to/fileを使用します。ただし、クリーンアップするものはありません。機能はファイルに保存されているため、ファイルを削除する以外に何もする必要はありません。