モノレビュー

WinSCPでsudoしてroot権限でリモートサーバーのファイル編集を可能にする

概要

昔はFTPを使ってサーバー上にファイルをアップロードしていましたが、最近ではよりセキュアなSSHを使ってファイルを操作することが多くなってきました。その流れに伴ってWindows上で使うソフトを「FFFTP」から「WinSCP」に変更しました。puttyと連携できたり、ファイルをオンザフライで編集できたりと手放せないツールとなっています。

しかしSSH経由でのrootログインを禁止しているため、root権限が必要な、ログファイル閲覧やシステム設定を変更したいときにputtyを開いて作業していました。せっかくオンザフライで編集できるんだからWindows上で編集したいということで、WinSCPの設定を見直して、root権限での作業ができるように変更してみました。

動作環境

まずはWinSCPの設定画面を確認

セッションの設定画面で「SCP/Shell」を開きます。シェルを指定するところがありますので、そこで「sudo su -」を選択すればsudoersに入っているユーザであればrootユーザーとしてログインできます。(ユーザーでログイン→sudo su -でrootユーザーに昇格)この方法はsudoをパスワード無しで実行できる状態でないとエラーとなります。

WinSCPのコマンドからrootユーザーにsuできないか探ってみる

WinSCPのオプション→コマンドを開きます。

画面下部にコマンド行が出てきますので、「コマンド > ls」とうってみます。

コマンドが実行されました。
では「sudo su -」とうってみます。

ありゃ、どうやらユーザー入力が必要なコマンドは受け付けてくれないようです。
sudo: no tty present and no askpass program specified
「sudo –s」でシェル起動ができるかどうかも試してみましたが結果は同じでした。

「sudo –S」コマンドでパスワードを標準入力から入れてみる

ヘルプを見るとーSで標準入力からの入力に対応しているようですのでechoコマンドでパスワードを入れてパイプで流し込んでみます。

echo ‘パスワード’ | sudo –Ss

これでもエラーが出ています。
同じコマンドをputtyで試してみると

$ echo ‘パスワード’ |sudo -Sp ” echo; sudo su –

root権限になれました。コマンドに誤りは無いようですので、WinSCPのコマンド行を使って必要に応じてsuするのは無理なようです。

結局はWinSCPのヘルプにのっているやり方で

色々とやってみましたが、一般ユーザーで接続後、コマンドでrootユーザーにチェンジする方法はできませんでした。
/etc/sudoersにsftp-serverをパスワード無しで実行できるようにして、rootユーザーにsuさせる方法しかないようです。

以下はWinSCPのFAQにのっている方法です。
/etc/sudoersを変更

$ sudo visudo

ユーザー名 ALL=NOPASSWD: /usr/lib/openssh/sftp-server
を追加

WinSCPのセッションを開いて、ファイルプロトコルを「SFTP」に変更。
SFTPを選択して、SFTPサーバーに「sudo /usr/lib/openssh/sftp-server」を設定。

これでrootユーザーにsuされた状態でファイルを操作できます。sftp-server以外はsudoにパスワードは必要ですが、パスワード無しでroot権限でファイル操作が可能なことには変わりませんので使うには注意が必要です。

参考URL

How do I change user after login (e.g. su root)?

モバイルバージョンを終了