CentOS 5.8のsudoeditでシンタックスハイライト
システム設定ファイルを編集するときは、sudo vimではなくsudoeditを使うのがセキュリティの観点から望ましい。前者はvimをrootで実行する。後者はvimをログインユーザで実行する。vimで編集中に:shコマンドでシェルに入ったとき、前者はrootのシェルが開き、後者はログインユーザのシェルが開く。またvimそのものやロードするスクリプトに悪意あるコードが混入しても、後者は一般ユーザ権限でしか動作しないので、影響範囲を抑えることができる。
ところでCentOS 5.8のsudoeditでファイルを開くと、自分の.vimrcで設定しているシンタックスハイライトが利かず、ソースが読みづらい。これはsudoeditが作る一時ファイルに拡張子がないからだ。Sudo 1.7.4で機能改良されている。
Major changes between version 1.7.3 and 1.7.4b1
http://www.gratisoft.us/sudo/devel-old.html#1.7.4b1
Sudoedit will now preserve the file extension in the name of the temporary file being edited. The extension is used by some editors (such as emacs) to choose the editing mode.
CentOS 5.8のSudoは1.7.2p1で、「sudoedit test.php」を実行すると一時ファイル/var/tmp/testYZH3jk8Ebu6Mを作る。拡張子がないため、どのシンタックスを使えばいいのかvimが判断できない。「:set syntax=XXX」と自分で設定しなければいけない。CentOS 6.2のSudo 1.7.4p5は/var/tmp/testXXeL4COl.phpと拡張子付きの一時ファイルを作るので、シンタックスハイライトが自動的に有効となる。もちろん.vimrcで「syntax=enable」としておく必要がある。
またCentOS 5.8の/bin/viはTinyバージョン、CentOS 6.2のはSmallバージョンでコンパイルされたvimで、どちらもsyntax機能が組み込まれていない。sudoeditはEDITORやVISUAL環境変数に設定されたエディタを使うから、そこを「vi」と設定してしまうと、やはりシンタックスハイライトが利かなくなる。
sudoeditはログインユーザの.vimrcを見るが、sudo vimはrootの.vimrcを使うという話をWebで見かけた。しかし私の環境ではどちらもログインユーザの.vimrcを読み込んでいる。
| 固定リンク
この記事へのコメントは終了しました。
コメント