
ノード アプリケーションに、低い番号のポート (http2 サーバーなので、正確には 443) にバインドする機能を持たせたいです。
私はこうするsudo setcap cap_net_bind_service=+ep /path/to/node
これは、どうやらブート時に記憶されるようです。私は nvm を使用して、異なるバージョンのノードをインストールできるようにしていますが、バージョンをアップグレードしたばかりで、もちろんバインドはもう行われません。
機能を再度追加するのは簡単ですが、おそらくどこかに、古いバージョンのノードではオフにする必要がある権限が蓄積されているのでしょう。
しかし、ブート シーケンスのどこでこれが発生するのかがわかりません。誰か、どこで発生するのか教えてもらえますか (私は Debian を実行しています)。
編集
情報は実行可能ファイルの追加属性内に保存されるはずだと私は思います。しかし、この方法で設定したファイルには追加属性が見つかりません。
答え1
機能はディレクトリ内のファイルエントリに保存されます(より正確には、ファイルのiノード(他の種類の権限と同様)。起動中に特別なことは何も起こりません。
GNU coreutils 8.23 以降、このls
コマンドは Linux の機能を認識しないため、プログラムに機能が設定されていることを示す出力は見つかりません。getcap
機能を一覧表示するには、コマンドを使用します。
ファイルからすべての機能をクリアするには、 を使用しますsetcap -r /path/to/file
。ただし、クリーンアップするものは何もありません。機能はファイルに保存されているので、ファイルを削除する以外に何もする必要はありません。
答え2
参照してくださいsetcap(8)
、機能が設定されています実行ファイル用これは、SUID や SGID と同様に機能します (ただし、より細かい粒度で機能します)。これは、「ブート プロセス」のどこにも処理されません。ファイルがプログラムとして実行されるたびに、結果のプロセスが機能を取得します。
はい、昇格された権限でファイルの古いバージョンを残しておくことは重大なセキュリティリスクとなるため、新しいバージョンがインストールされるたびに古いバージョンを削除したほうがよいでしょう。