web-dev-qa-db-ja.com

ルートなし、およびCAP_SYS_ADMINなしでホスト名を設定します

Linuxでホスト名を変更できるようにしたいアプリケーションがあります。現在、hostnameコマンドを実行してこれを行っています。 CAP_SYS_ADMINも設定したくありません。また、/ etc/hostnameを編集して再起動したくありません。

ホスト名の変更のみを許可する機能はありますか?そうでない場合、私のオプションは何ですか?

1
Antonius Bloch

Linuxでのホスト名の設定は、sethostname(2)システムコールを介して行われます。また、/ bin/hostnameは、このsyscall(およびいくつかの関連するsyscall)のベアラッパーです。/etc/hostnameは、ブートプロセス中にスクリプトによって読み取られることになっています。スクリプトは、その後/ bin/hostnameを実行してジョブを完了します。

CAP_SYS_ADMINはLinuxの機能(7)の1つであり、スレッドがさまざまなシステム管理操作を実行できるようにします。これにはsethostnameが含まれます。 。私は、機能フレームワーク内の小さなガニュラリティに気づいていません。

ただし、他のオプションがあります。 Sudo(8)によって、カスタマイズ可能な方法で、あるコマンドasを別のユーザーとして実行する機能をユーザーに付与できます。このsudoers(5)構成の例では、ユーザーaliceが/ bin/hostnameをrootとして実行できるようになります。

alice ALL=(root:ALL) /bin/hostname

このスーパーユーザーの質問で説明 のように、最初の「ALL」は、コマンドが実行されるホストに置き換えることができます。協調環境でない限り、使用できません。 「root」を「ALL」に置き換えて、アリスをanyユーザーとして実行できるようにすることができます。 2番目の「ALL」はグループで置き換えることができます。

最後のフィールドは、aliceが実行を許可されているコマンドです。/bin/hostnameの使用法は限られているので、問題ないと思います。そうしないと、引数が後に続く可能性があります。したがって、アリスはこの引数なしでコマンドを実行して、電力を制限することはできません。