sudo を使用して実行可能ファイルの所有権を root に変更することは可能ですか?

sudo を使用して実行可能ファイルの所有権を root に変更することは可能ですか?

私のユーザーIDで作成された実行ファイルをrootとして実行する必要があります。そのため、実行ファイルの所有権をroot:rootに変更し、setuidを使用する必要があります。

sudo chown root:root [EXE_NAME]

次のエラーが発生します:

chown: changing ownership of `[EXE_NAME]`: Operation not permitted

私の制約は次のとおりです:

  • sudoersファイルで自分のユーザーIDにsudo ALL ALLを設定していますが、rootとしてログインできません
  • root として実行する必要がある実行可能ファイルは、pcap_open_live 関数を使用して、プロミスシャス モードでネットワーク インターフェイスにバインドしようとしています (そのため、root として実行する必要があります)。

sudo tcsh私の究極の問題、つまり、安全でsudoを必要とせず、ルート所有のシェル( )を作成する必要のないネットワークインターフェースにバインドする実行可能ファイルを実行する必要があるという問題を解決するより良い方法はありますか?

答え1

sudo実際に UID 0 が返される場合( で確認sudo id)、ファイルは権限をサポートしていないファイルシステム (FAT32 など) 上にあると思われます。このようなファイルシステムでは、ファイルの所有権 (または権限) を変更することはできません。

答え2

ファイル システムが所有権をサポートしている場合、さらに 3 つの理由が考えられます。

  1. パーティションは読み取り専用でマウントされます。

    ファイルの名前を変更するか、同じディレクトリに別のファイルを作成してみてください。それができる場合、それは問題ではありません。

  2. ファイルはロックされています。

    プログラムが実行中かどうか確認してください。ファイルの名前を変更してみてください。

  3. ファイルは次のように設定されています追加のみまたは不変

    これを変更するには、次のコマンドを実行します。

    sudo chattr -ai filename
    

答え3

変化が必要なら所有(所有権とグループではなく) を使用できますchown root filename。root でない場合は、sudo を前に付けます。

グループを変更したい場合は、いつでも がありますchgrp

(確かに、すべてを 1 つのコマンドで実行するほど便利ではありません)。

答え4

通常のユーザーもネットワーク インターフェイスにバインドできますが、1024 未満のポートにはバインドできません。したがって、プログラムを 1024 以上のポートにバインドし、外部または 経由でそのポートにリダイレクトすることができますssh -fN -L 0.0.0.0:<PRIV_PORT>:localhost:<UNPRIV_PORT>

そうは言っても、あなたの問題は、RHEL でデフォルトで有効になっている SElinux に関連している可能性もあります。これを無効にするには、 を設定しSELINUX=disabledます/etc/selinux/config

関連情報