家庭用NASにSSHサーバ経由でsftpでアクセスできるようにする

ALL
スポンサーリンク
スポンサーリンク

本記事でできること

Windowsファイル共有でしかアクセスできない家庭用NASを、SSHサーバー経由で sftpでアクセスできるようにします。
SSHサーバーの root での作業が必要ですが、sftp用ユーザでのアクセスで次のように動作させます。

・SSHサーバーへのsftp接続で、NASの共有にアクセスできます
・sftpでアクセス時に、SSHサーバーのディレクトリにアクセスできないようにします
・SSHサーバーへは sftpのみでssh接続させません

なお、本記事では
・sftpアクセス用SSHサーバのユーザー名は sftp001
・NASの共有名は work、共有へアクセスするユーザーは user001、パスワードは userpw
とします。
本記事の設定で、sftpでSSHサーバーにアクセスすると、workディレクトリが NASの共有wrokとしてアクセスできます。

SSHサーバーの設定

sftpアクセス用ユーザーの作成

SSHサーバーにsftpでアクセスするユーザー sftp001 を作成してください。
ここで作成するユーザーは、NASのユーザー名と異なっても構いません。

ログインできないようにシェルを nologin にします。次のコマンドを実行してください。

chsh -s /usr/sbin/nologin sftp001

chrootの設定

chrootの設定によって、sftp接続ユーザにルートとして見せるディレクトリを設定します。
これにより、SSHサーバーの上位ディレクトリにアクセスできないようにします。

次の設定をします。
これは、chrootによってsftp接続ユーザにルートとして見せるディレクトリ(ここでは/home/sftp001/chroot)は、所有者 root で書き込み権限も root のみにしないといけない為です。

chown root /home/sftp001
chmod 700 /home/sftp001

mkdir /home/sftp001/chroot
chown root /home/sftp001/chroot
chmod 755 /home/sftp001/chroot

続けてsshdの設定をします。

/etc/ssh/sshd_config で次の内容を末尾に追記します。
また、Subsystem sftp /usr/libexec/openssh/sftp-server の行があれば、コメントアウトします。
sftp001 は、sftpアクセス用のSSHサーバーのユーザー名です。

#Subsystem  sftp    /usr/libexec/openssh/sftp-server
Subsystem       sftp    internal-sftp
Match User sftp001
    PasswordAuthentication yes
    AllowAgentForwarding no
    AllowTcpForwarding no
    ChrootDirectory /home/sftp001/chroot

記述したら sshd に反映させます。

service sshd reload

NASの共有をマウントする

sftpでアクセスした際に、ディレクトリ work から、NASの共有workにアクセスできるようにします。

次のようにアクセス用ディレクトリ work を作成します。

mkdir /home/sftp001/chroot/work
chown sftp001 /home/sftp001/chroot/work
chmod 700 /home/sftp001/chroot/work

次にNASのユーザー名、パスワードを記述したファイルを /home/sftp001/credentials として次の内容で作成します。
username、password にNASの共有へのアクセス用ユーザー、パスワードを設定します。
ファイルに記述しない方法もありますが、NASのパスワードにカンマを含む場合は、このようにファイル内に記述しなくてはいけないので、この形式でするようにしてください。

username=user001
password=userpw

次のように権限を設定します。

chmod 600 /home/sftp001/credentials

ここまで出来たら、ディレクトリ work にNASの共有workをマウントします。

まずはテストで、コマンドで次を実行してください。NASSV の箇所はNASのホスト名かIPアドレスを指定してください。

/sbin/mount.cifs //NASSV/work /home/sftp001/chroot/work -o credentials=/home/sftp001/credentials,uid=sftp001

正常に実行できれば、/home/sftp001/chroot/work から NASの共有workにアクセスできます。

再起動後も自動的にマウントされるようにします。
/etc/fstab に次の内容を追記してください。NASSV の箇所はNASのホスト名かIPアドレスを指定してください。

//NASSV/work	/home/sftp001/chroot/work	cifs	credentials=/home/sftp001/credentials,uid=sftp0010	0

クライアントからsftp接続

以上でサーバーの設定はできました。

クライアントから sftp(WindowsだとWinSCP でプロトコルにsftp指定)してみてください。
ディレクトリ workが見えていて、その中がNASの共有workとなっています。

なお、注意です。

この work ディレクトリを削除しようとすると、共有work内の全ファイルが削除されるので注意してください。
(workディレクトリ自身は権限が無いため、削除されません)

参考

chrootを用いてSSHユーザのディレクトリを制限する – ハックノート
【Linux】[ssh]sftp-serverとinternal-sftpの違い | 夕湖津のブログ
LinuxでSFTP専用ユーザーを作成してみた。 – Qiita
Linuxでのsambaのマウント。起動時にマウントするまで。 – Qiita

コメント