本記事でできること
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
コメント