GNU/Linux >> Linux の 問題 >  >> Linux

Linux –インタープリターバイナリを設定せずにスクリプトで機能を使用できますか?

現在、cap_net_bind_service MY_USERNAMEを使用しています /etc/security/capability.confにあります。
ここで、cap_net_bind_service+iを設定する必要があります。 CAP_NET_BIND_SERVICEを追加できるようにするための私のお気に入りのスクリプト言語のインタプリタ 効果的 libcap[-ng]を介して設定します。

これは問題なく機能しますが、インタプリタバイナリに上限を設定せずに同じことを実現する方法があるのではないかと思います。大きな問題ではありませんが(他のユーザーアカウントには上限がないため、インタープリターバイナリにビットが設定されていても使用できません)、インタープリターが設定されるたびにフラグを再設定する必要があるため、やや面倒です。更新されました。

承認された回答:

通常、機能は子に継承されます。マンページに記載されているように:

fork(2)を介して作成された子は、その親の機能セットのコピーを継承します。

スクリプトの問題は、スクリプトが直接実行可能ではないことです。カーネルはチェックのリストを調べます(カーネルコードはfs / binfmt _ *。cにあります)。それらの1つは「binfmt_script.c」です。これは、最初の行でシバンをチェックしてから、スクリプトを引数として実際のインタープリター(シバンにあるもの)を呼び出します。そのため、標準/共通インタープリターが呼び出され、スクリプトを引数として読み取るだけです。

つまり、スクリプトではなくインタプリタで機能を設定する必要があります。
同じことがsuidにも当てはまります。 ビット、およびその他の特別なフラグ。

したがって、インタプリタのコピーを作成し、必要な機能を設定して(chmod / chownを介して誰もアクセスできないことも確認してください)、このコピーしたインタプリタをシバンで呼び出します。
setcapを実行することもできます。スクリプト内のロジック。


Linux
  1. Pythonのmatplotlibで「バックエンド」を設定するにはどうすればよいですか?

  2. LinuxでCからIPアドレスを設定する方法

  3. システムが現在プロセスで使用されていると言っているときに、Linuxでユーザーを削除するにはどうすればよいですか

  1. Linux で HTML ページを壁紙として設定する

  2. Linux でプロセスのプロセッサ アフィニティを設定するにはどうすればよいですか?

  3. Linux で使用済みディスク容量が徐々に増加している原因を特定するにはどうすればよいですか?

  1. なしでは生きていけないLinuxカーネルモジュール

  2. LinuxのIPツールでできる3つの便利なこと

  3. Linux – Gnu / linuxでファイルパーミッションなどを設定するさまざまな方法は何ですか?