CH-J Server ManagerSSH によるサーバー管理
メニュー
すべてのガイドと記事 →

SFTPとsudoを使って/etc内のファイルを編集する方法

SFTPで/etcへのアクセスが拒否される理由と、rootへのアクセスを開放せずに設定ファイルを安全に変更する方法を説明します。

SFTPでアクセスが拒否される理由

SFTPはログインに使用したアカウントで動作し、sudoに相当する機能はありません。/etc内のファイルの多くはrootが所有しているため、一般アカウントでは一部を読み取れても、書き込むことはできません。これは正しい動作であり、権限を緩めて解決すべき問題ではありません。

避けるべき操作

設定ファイルにchmod 777を実行したり、/etc内のファイルの所有者を自分のアカウントに変更したり、たった一度の編集のためにrootのパスワードログインを有効にしたりしないでください。権限が緩すぎるファイルを拒否するサービスもあり、こうした変更はいずれも編集完了後も長くサーバーの安全性を低下させます。

ターミナルでsudoeditを使う

sudoeditはファイルを一時的な場所にコピーし、自分のアカウントでエディターを開き、保存後に初めて元の場所へ書き戻します。エディター自体はrootとして実行されません。

sudoedit /etc/nginx/nginx.conf

コピーをアップロードしてから配置する

ローカルのエディターを使いたい場合は、ファイルを自分のホームディレクトリにアップロードし、sudoを使って配置します。まず元のファイルを、設定のインクルードで読み込まれない場所にバックアップしてください。installコマンドは所有者とモードを設定し、SELinuxを使うシステムではrestoreconが正しいコンテキストを設定します。すべてのファイルがrootと644を使うわけではないため、これらの値を使う前に元のファイルの所有者とモードを確認してください。

stat -c '%U %G %a' /etc/nginx/nginx.conf
sudo cp -a /etc/nginx/nginx.conf /root/nginx.conf.bak
sudo install -o root -g root -m 644 ~/nginx.conf.new /etc/nginx/nginx.conf
sudo restorecon -v /etc/nginx/nginx.conf

適用前に検証する

構文に誤りのあるファイルは、次回の再起動時にサービスを停止させるおそれがあります。サービスを再読み込みする前に、そのサービスの検証を実行してください。SSHの設定を変更するときは現在のセッションを開いたままにし、別のウィンドウから新しいログインを試してください。

sudo nginx -t
sudo sshd -t
sudo visudo -cf /etc/sudoers.d/example

CH-J Server Managerでsudoを使って編集する

SSHアカウントでファイルを読み取れない場合、File Managerはsudoで開く操作を提示し、保存にはsudoが必要になると警告します。保存時にはデータをアカウント専用の非公開一時ディレクトリに転送し、検証後にsudoで所定の場所へ移動します。その際、所有者、権限、ACL、SELinuxコンテキストを保持します。任意のバックアップ機能を使うと、置き換える前に元のファイルのコピーが保存されます。パスワードはサーバー上のsudoにのみ渡され、ディスクにもログにも保存されません。sudoのポリシーがターミナルを要求する場合(requiretty)、アプリはその要件を回避しません。アプリはファイルの内容を検証しないため、サービスの検証は自分で実行してください。

詳しいドキュメント

man: sudo / sudoedit →

man: install →

生体認証によるロック解除とセキュリティ →