通常はrootに制限されている特定のシステムファイルをユーザーが編集できるようにするにはどうすればよいですか?


8

/etc/network/interfacesroot権限のないユーザーで書き込みを行おうとしています。

コマンドラインのみのサーバーを実行しているため、これに書き込みたいのは、ユーザーが静的IPを設定できるようにするためです。ユーザーにどのような許可を与える必要がありetc/sudoersますか?

ユーザーに完全なroot権限を付与したくない。このファイルを編集するだけの機能。

回答:


25

を使用する代わりsudoに、ファイルにACLを設定するだけです。

$ ls -l /var/tmp/foo
-rw-rw---- 1 root root 4 Jul 31 15:26 /var/tmp/foo
$ sudo setfacl -m u:white:rw /var/tmp/foo
$ whoami
white
$ cat /var/tmp/foo
bar

これで、ファイルの所有者は「root」ですが、ユーザー「white」はファイルを読み書きできます。ユーザー「ホワイト」は、自分のお気に入りのエディターを使用してファイルを編集できます。


少し混乱しています。ありますか/var/tmp/foo= /etc/network/interfaces?あなたがそこで何を言おうとしているのか実際に見たことがないので、私はLinuxにかなり慣れていません。
キース

それは単なるファイルです。好きなファイルを使用できます。
ジェフホワイト

1
いいね。ACLは、アクセス許可を制限するためにのみ使用でき、それらを付与するためには使用できないと思っていました。
Rmano 14

WSLの下でサポートされていないようです:setfacl: /etc/logrotate.conf: Operation not supported
MPEN

8

静的IPを使用して正しいファイルを書き込むスクリプトなど、必要な編集を行うスクリプトを準備します(このスクリプトの内容は、このQ&Aの範囲外です)。このスクリプトを呼び出しましょう/root/set_static_ip。(1)

編集/etc/sudoers(2)(visudoより良い、それは健全性をチェックします。リモート(3)からは不可能であっても、無効なsudoersファイルでシステムを回復することは非常に困難です)、および追加

user_name_to_authorize ALL=NOPASSWD: /root/set_static_ip 

これで、ユーザーはsudo /root/set_static_ip パスワードを要求されることなく使用できるようになり、スクリプトはすべての特権で実行されます。他のコマンドは許可されません。

ユーザーにファイルを好きなだけ置換してもらいたい場合は、スクリプトは次のようになります(これを呼び出す/root/unsafe-overwrite-interface

#! /bin/bash -e
#
cp /tmp/temp-iface.txt /etc/network/interfaces 
exit 0

...そして、ユーザーに編集/tmp/temp-iface.txtしてから実行するように指示しますsudo /root/unsafe-overwrite-interface---上で指定したようにsudoersでそれを有効にします。または、ユーザーをACLリストに追加して、特定のファイルへの書き込み権限を与えることができます

ただし、ファイルの内容の安全性を確認しないと、意図的または意図的ではなく、混乱発生することに注意してください。


脚注

(1)このスクリプトはできるだけ安全でなければなりません。入力などを確認してください。完全な権限で実行されます。

(2)最新のsudoインストールでは、/etc/sudoers.d/ディレクトリにファイルを追加することができます---更新後も存続します。

(3)sudo -isudoersメカニズムを変更するとき、私は通常、ルートセッションを開いたまま()、バックアップを用意しておく。


これに関する唯一の問題は、静的IP設定をオンデマンドで変更する必要があることです。お勧めするスクリプトについての私の理解は、基本的に/etc/network/interfacesファイルを何にでも書き換えます/root/set_static_ip。ユーザーにIPアドレス、ゲートウェイなどを入力するように求めるスクリプトを作成できない場合を除きます。これは、十分なものではありません。
キース

パラメータを受け入れるスクリプトを記述できますが、はい、これが最も安全な方法です。ユーザーに盲目的にファイルを編集させると、ユーザーがエラーをした場合はどうなりますか?サーバーが手の届かない場所にいる可能性があります...そのため、スクリプトは何らかの方法でパラメーターを尋ねるだけでなく、パラメーターが安全かどうかを確認する必要があります。
Rmano 14

3
に関しては/etc/sudoers、でvisudoはありませんsudoedit
saiarcot895 14

誰かがこの種の質問をしている場合、安全なbashスクリプトを書くことはおそらく彼らのスキルを超えています。buidスクリプトをsetuid rootできないのには理由があります。
rox0r 2014
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.