web-dev-qa-db-ja.com

Sudo権限のみでroot書き込み可能なファイルを編集する

私たちのシステム管理者は、Sudo権限を持つ非特権アカウントを使用してボックスにログインします。私はよく、習慣から、vimではなくsudoeditでファイルを開きます。 sudoeditを使う習慣をつけたくありません。私の同僚は、vimを指すパスにsudoeditシンボリックリンクを作成することを提案しました。これは私には恐ろしい考えのように思えます。

私は通常、:w /tmp/service.conf、次にmv -i /tmp/service.conf /etc/だけです

これは不格好に思えますが、私はsudoeditまたはSudo vimを使用する習慣を身につけるよりもこのプロセスを信頼していると言いがちです。

意見は?

補足:通常、これらのファイルのバックアップに簡単にアクセスできるため、問題はありません。

1

私はVIMを使い続けて、あなたのためにそれを機能させます。書き込みアクセス権のないファイルを開いた場合でも、VIMで以下を発行することでファイルを保存できます。<ESC>:w !Sudo tee %

これにより、Sudoを実行し、編集内容を現在編集中のファイルにティーインすることができます。これを行うと、ファイルはVIMの外部で効果的に編集されるため、新しいコンテンツをロードするように求められます。

2
Alex

Sudo.vim を使用すると、vim Sudo:path-to-fileを実行できます。 Sudo:なしでファイルを既に開いている場合は、:f Sudo:%を実行して、読み取り/書き込みにSudoを使用するように切り替えることができます。 (Vimが最初に開いたときに読み取り専用だと思ったファイルを編集/書き込みしようとしたときの警告を避けるために、:set noroも必要になる場合があります。)

Alexの:w !Sudo tee %ソリューションとSudo.vimの両方がシェルエスケープの問題に悩まされていることに注意してください。ファイル名が安全であることがわかっている場合を除いて、使用しないでください。

2
ephemient

Rootとして任意のコマンドを実行できるようなSudo権限を持っている場合、sudoeditは実際には何のメリットもありません。これは、特権のないユーザーに、ある種の制限付きモードでエディター全体をrootとして実行させることなく、特定のファイルを編集する機能を安全に付与できるようにするために存在します(正しく実行するのは困難です)。

したがって、他のコマンドをrootとして実行するには、Sudo vimと入力する必要があることを考えると、Sudo whateverと入力することを覚えておくことはそれほどひどいことではないと思いますが、アプローチは問題ないようです。

補足説明:誤って別のファイルを誤って上書きしてしまうことについて、私はもっと心配していると思います(-iに耐えられない—その質問に「はい」と答えることを期待しているので、簡単に取得できますあなたが編集しようとしているファイルを改ざんするよりもそうする習慣があります。したがって、他のすべてのバックアップもあることを確認してください。

1
mattdm
Sudo su -

それができない場合は、次のようなシェルスクリプトを記述します。引数をvimに渡したい場合は壊れることに注意してください(ただし、動作するように拡張することもできますが、PoCのようなものです)

#!/bin/sh
# Pretend to be vim, write to /tmp then Sudo copy to original file
$TMPFILE = $(mktemp)
cp $1 $TMPFILE
vim $TMPFILE
Sudo mv -i $TMPFILE $1

これはあなたが求めていることをするかもしれませんか?ファイルの2つのコピーを作成するように簡単に設定することもできます。移動を行う前に、それらがまだ同一でない場合(誰かが元のファイルを変更したことを意味します)に警告します。

0
richo