NixOSでSFTPサーバの設定

前回の記事では、NixOSにzshとNeovimとchronyとNeofetchのインストールと設定、設定後の動作確認を行った。
NixOSで実行したコマンドおよび出力内容の殆どが、MacBookからNixOSにsshログインし実行したものである。NixOSにsshログイン出来るならSFTPでアクセスも出来るだろう...という事で、今回はNixOSでSFTPの設定と動作確認をやってみた。
2025/4/6追記 NixOSネタの記事の一覧は、当記事内最下部の「NixOS関連の記事」欄内を参照。
 


SFTPとは
SFTP(SSH File Transfer Protocol)とは、クライアント〜サーバ間の通信経路自体をsshで暗号化しファイルを送受信するプロトコルである。
サーバと接続先との間で暗号化された通信経路上にデータを流すものだが、第三者によるデータの改竄や覗き見を防ぐ為にsshが使われている。
FTPとは異なり、sshというツールの中のsftpコマンドを使用しFTPのような操作を行う事で、セキュアなファイル転送を実現している。
SFTPの実態はsshである為、デフォルトではポート番号は22を使用しTCPで通信する。
SSHの設定ファイルはそのままでSFTPの使用は可能だが、設定の変更や追加でよりセキュアな通信が実現する為、SFTPの設定も行う。
 


当方の環境
ホスト機:macOS 15.3.2 / MacBook Pro 2020 / RAM: 16GB / CPU: Intel Core i5 2.0GHz
仮想化環境:Oracle VirtualBox 7.1.4 r165100
ゲストOS:NixOS 24.11 (Vicuna)
FTP/SFTPクライアント:Cyberduck 9.1.3
 


今回の要件
・SSLを有効にしたvsftpやTSLによるFTPSではなく、sshの拡張機能のSFTPを使用
・構成ファイルは/etc/ssh/sshd_confではなく/etc/nixos/ssh.nixを使用
・アカウントはftpuserとする
 
設定に取り掛かる前に、動作環境を出力した。
自分の環境で動作しているOpenSSHのバージョンは9.9p2である事が分かる。
chrootディレクトリ設定で公開ディレクトリの指定が可能なバージョンはOpenSSH 4.9以降なのだが、NixOS Searchにて設定オプションを検索してもヒットしない為、公開ディレクトリはデフォルト設定のまま(SFTP用アカウントのホームディレクトリ)とした。
https://search.nixos.org/options? NixOS Search - Packages
SSLは、昨今導入が進んでいるLibreSSLではなくOpenSSLが動作している事が分かる。

[testsv99:~ ]# uname -a
Linux testsv99 6.6.82 #1-NixOS SMP PREEMPT_DYNAMIC Sun Mar  9 08:55:04 UTC 2025 x86_64 GNU/Linux
[testsv99:~ ]# 
[testsv99:~ ]# zsh --version
zsh 5.9 (x86_64-pc-linux-gnu)
[testsv99:~ ]# 
[testsv99:~ ]# ssh -V
OpenSSH_9.9p2, OpenSSL 3.3.3 11 Feb 2025
[testsv99:~ ]# 

 


SFTP用アカウントの作成
SFTP用のアカウントを別途作成した。
adduserコマンドを叩いたら、adduserコマンドが実装されていない旨返ってきた。
NixOS Searchにてコマンドの検索をしたら、busyboxに含まれている事が分かった。余計なツールは入れたくないのでこのままuseraddコマンドを使う事にした。
groupaddコマンドでSFTP用アカウントのグループを作成、useraddコマンドでSFTP用アカウントの作成とpasswdコマンドでパスワードの設定。
最後に、SFTP用の公開ディレクトリが作成された事を確認。

[testsv99:~ ]# sudo groupadd ftpuser
[testsv99:~ ]#
[testsv99:~ ]# sudo useradd -m ftpuser -g ftpuser
[testsv99:~ ]#
[testsv99:~ ]# sudo adduser
sudo: adduser: command not found
[testsv99:~ ]# 
[testsv99:~ ]# sudo passwd ftpuser
New password: 
Retype new password: 
passwd: password updated successfully
[testsv99:~ ]# 
[testsv99:~ ]# 
[testsv99:~ ]# 
[testsv99:~ ]# sudo ls -la /home/ftpuser
[sudo] password for hechtia: 
total 8
drwx------ 2 ftpuser ftpuser 4096  3月 20 20:00 .
drwxr-xr-x 4 root    root    4096  3月 20 20:00 ..
[testsv99:~ ]# 

 


ssh.nixファイルにSFTP用の設定を追加
NixOSの初期設定時に作成した/etc/nixos/ssh.nixファイルに追記する形で、SFTPの設定。
以下は自分の環境にてOpenBSDやLinux等で設定したSFTPの設定内容。
NixOS Searchにてオプションの検索をしたら、NixOSのOpenSSHの設定ではAllowTcpForwardingとChrootDirectoryのオプションは無い事が判明。

# override default of no subsystems
#Subsystem      sftp    /usr/libexec/sftp-server
Subsystem       sftp    internal-sftp
# Example of overriding settings on a per-user basis
Match User ftpuser
        AllowTcpForwarding no
        X11Forwarding no
        ChrootDirectory /home/ftpuser
        ForceCommand internal-sftp

 
よって、NixOSではX11Forwardingとポート番号とinternal-sftp設定の3行の追記となった。

[testsv99:~ ]# sudo cat /etc/nixos/ssh.nix
{
  services.openssh.enable = true;
  services.openssh.settings.X11Forwarding = false;  ◻️◻️この行を追記
  services.openssh.ports = [ 22222 ];  ◻️◻️この行を追記
  services.openssh.sftpServerExecutable = "internal-sftp";  ◻️◻️この行を追記
}
[testsv99:~ ]# 

 
設定を終えたら、上記の設定内容を反映させる為にnixos-rebuildコマンドを叩いてリビルドする。
リビルド後の注意事項として、OpenSSHのポート番号を22222に変更している為、今後NixOSにsshログインする際はポート番号22222の指定も必要となる。

[testsv99:~ ]# sudo nixos-rebuild switch          
building Nix...
building the system configuration...
activating the configuration...
setting up /etc...
reloading user units for users...
restarting sysinit-reactivation.target
the following new units were started: run-credentials-systemd\x2dtmpfiles\x2dresetup.service.mount, sysinit-reactivation.target, systemd-tmpfiles-resetup.service
:
省略
:
[testsv99:~ ]# 

 


SFTP通信の確認
以下の2端末からNixOSで動作しているSFTPサーバにアクセスを試みた。
・NixOSが動作している端末上でFTPクライアントからSFTPにアクセス
・別端末(MacBook Air 2011)上のFTPクライアントからSFTPにアクセス

FTPクライアントはCyberduckを使用した。
Cyberduckを立ち上げて新規接続から入り、接続方式は「SFTP (SSHによる暗号化FTP)」を選択。
FTPサーバのIPアドレスやポート番号やユーザ名、パスワードを入力し接続ボタンをクリックすると、SFTPサーバに接続する。
SFTP接続の確立の際、「そのホストは現在システムに認識されていません」と書かれたウインドウが表示される。その際は「許可」をクリックしSFTP接続を確立させる。

結果、自端末と他端末共にNixOSで動作しているSFTPにアクセス出来た。
ファイルのアップロードとダウンロードも共に正常に実行出来た。
 

 

今回はここまで。
SFTPの設定オプションの数が少ない点は残念だったが、SFTPサーバの立ち上げとファイルのアップロード・ダウンロードは難無く実行出来た。
ここで改めてNixOSのvdiファイルのサイズを確認したら、前回の投稿時より更に増加し10.85GBになっていた。NixOSのインストール時に設定した仮想HDDの容量は40GBだった為、今の勢いでファイルサイズが増加し続けると今年の夏に入る前に100%近くまで到達するだろう。
 


振り返り
SFTPサーバの構築は、NixOSに限った話ではないがOpenSSHがインストールされている状態であればすぐに出来るので楽勝だった。
次回はファイルサーバとしてSambaをインストールし、接続確認およびファイル操作まで進めたい。
それ以降は、現環境のカスタマイズをしつつ、home-managerや前々回にて導入したFlakeをじっくり学びたい。
 


参照サイト
https://nixos.org/ Nix & NixOS Declarative builds and deployments
https://nixos.org/manual/nixos/stable/ NixOS Manual
https://search.nixos.org/packages NixOS Search Packages
https://search.nixos.org/options? NixOS Search Options
https://zenn.dev/asa1984/articles/nixos-is-the-best NixOSで最強のLinuxデスクトップを作ろう
https://debslink.hatenadiary.jp/entry/20220111/1641903376 Alpine LinuxのFTPで暗号化通信 SFTP編
 


NixOS関連の記事
https://debslink.hatenadiary.jp/entry/20250311/1741649715 NixOSの沼に片足を突っ込んだ
https://debslink.hatenadiary.jp/entry/20250316/1742128054 NixOSにFlakeを導入した
https://debslink.hatenadiary.jp/entry/20250320/1742459549 NixOSの環境構築
https://debslink.hatenadiary.jp/entry/20250323/1742731080 NixOSでSFTPサーバの設定
https://debslink.hatenadiary.jp/entry/20250328/1743167901 NixOSでSambaによるファイルサーバの構築
https://debslink.hatenadiary.jp/entry/20250405/1743844940 NixOSでrsyslogの設定
https://debslink.hatenadiary.jp/entry/20250411/1744300480 NixOSでDNSサーバの構築
https://debslink.hatenadiary.jp/entry/20250413/1744551596 NixOSのシステムの再現性の検証
https://debslink.hatenadiary.jp/entry/20250418/1744924524 NixOSでPostfixとDovecotによるメールサーバの構築
https://debslink.hatenadiary.jp/entry/20250419/1745062553 NixOSでPostfixとDovecotによるメールサーバの構築 - SASL認証編
https://debslink.hatenadiary.jp/entry/20250421/1745236668 NixOSのパッケージやOSのアップデートに関するメモ
https://debslink.hatenadiary.jp/entry/20250428/1745795434 NixOSをCLIでインストールした
https://debslink.hatenadiary.jp/entry/20250503/1746235454 NixOSでnginxによるWebサーバの構築
https://debslink.hatenadiary.jp/entry/20250508/1746706416 NixOSでPrometheusとGrafanaによる監視基盤の構築
https://debslink.hatenadiary.jp/entry/20250510/1746884897 NixOSの導入にあたり参考になったサイト
https://debslink.hatenadiary.jp/entry/20250524/1748072722 NixOSを24.11から25.05にアップデートした
https://debslink.hatenadiary.jp/entry/20251214/1765688458 NixOSを25.05から25.11にアップデートした
https://debslink.hatenadiary.jp/entry/20260117/1768615582 Raspberry Pi 4BにNixOSを導入しファイルサーバを構築した
https://debslink.hatenadiary.jp/entry/20260503/1777775392 NixOSで構築したサーバの運用について