【Ubuntu】Linuxでsftpサーバー構築し、sftpユーザーのディレクトリ制限を行う方法

Ubuntuでsftpサーバー構築

sftp は ssh を利用したセキュアなファイル転送プロトコルです。

sftp用ユーザーの作成

sftpを利用するユーザーを作成します。

sftpユーザー作成

Ubuntuの場合、ユーザー作成コマンドは他のLinuxディストリビューションと異なります。

#Ubuntu ユーザー作成コマンド
adduser ユーザー名
$ sudo adduser sftpuser1

※ユーザーを削除する

ユーザーを削除する場合は、 deluser コマンドを実行します。

ユーザー削除コマンド
$ sudo deluser ユーザー名

sftp用グループ作成

sftpを利用するユーザーが属するグループを作成します。

#グループ作成
groupadd グループ名
$ sudo groupadd sftpusers

ユーザーをグループに追加します。

ユーザーをグループに追加コマンド
adduser ユーザー名 グループ名
$ sudo adduser sftpuser1 sftpusers

sftp用ディレクトリの作成

sftpユーザーがファイルを転送するディレクトリを作成します。

$ sudo mkdir /var/sftp
$ sudo chown root:root /var/sftp
$ sudo mkdir /var/sftp/sftpuser1 
$ sudo sftpuser1:sftpusers /var/sftp/sftpuser1
$ sudo chmod 755 /var/sftp/sftpuser1

sftpユーザーのディレクトリ制限の設定

sftpユーザーの利用するディレクトリを制限する設定を行います。

ssh設定ファイルの変更

ssh接続の不可、sftpユーザーのディレクトリ制限を実施するため、ssh設定ファイルを変更します。

sshの設定ファイル /etc/ssh/ssh_config

Subsystem sftp /usr/libexec/openssh/sftp-serverの定義があればコメントアウトをし、下記設定を追記します。

Subsystem sftp  internal-sftp
Match User sftpuser1
    ChrootDirectory /var/sftp
    X11Forwarding no
    AllowTcpForwarding no
    PasswordAuthentication yes
    ForceCommand internal-sftp

sshで接続できないことを確認

下記コマンドで ssh 接続ができないことを確認します。

$ ssh sftpuser1@localhost

下記メッセージが表示されれば ssh 接続不可が確認されます。

This service allows sftp connections only.
Connection to localhost closed.

ssh設定が反映されない場合

通常 ssh の設定ファイルは /etc/ssh/ssh_config ですが、 ubuntuでのssh設定ファイルは /etc/ssh/sshd_configのようです。 設定ファイル変更後、下記コマンドでエラーの有無を確認します。

$  ssh sftpuser1@localhost 

上記コマンドで、下記のようなエラーが発生する場合は、 /etc/ssh/sshd_configを編集します。

$ ssh sftpuser1@localhost 
/etc/ssh/ssh_config: line 58: Bad configuration option: subsystem
Unsupported Match attribute Group
/etc/ssh/ssh_config line 60: Bad Match condition
lost connection

sftpサーバーに鍵認証で接続

sftpに鍵認証で接続する手順です。

クライアントPCで秘密鍵、公開鍵を生成

クライアントPCで秘密鍵、公開鍵を生成します。

$ ssh-keygen -t rsa -b 4096 {-f <鍵の名前>}

-f オプションを指定しない場合、ホームディレクトリの .ssh ディレクトリに秘密鍵、公開鍵が生成されます。

$ ls .ssh
 id_rsa  id_rsa.pub

クライアントPCから公開鍵をsftpサーバーに送信し設置

クライアントPCで生成した公開鍵をsftpサーバーに配置します。

$ mv id_rsa.pub ~/.ssh # ファイルの配置
$ cd ~/.ssh

配置後 .sshディレクトリ配下にある authorized_keys ファイルに統合する

$ cat id_rsa.pub >> authorized_keys
$ rm id_rsa.pub

authorized_keys ファイルのパーミッションは 0600 に変更

$ chmod 600 authorized_keys

完了後、クライアントPCから sftp 接続し確認します。

One thought on “【Ubuntu】Linuxでsftpサーバー構築し、sftpユーザーのディレクトリ制限を行う方法

  1. 丁寧な説明有り難うございます。
    以下、誤記がある様なのでコメント投稿します。

    sftp用ディレクトリの作成
    sftpユーザーがファイルを転送するディレクトリを作成します。

    新イメージ
    04 $ sudo chown sftpuser1:sftpusers /var/sftp/sftpuser1
    旧イメージ
    04 $ sudo sftpuser1:sftpusers /var/sftp/sftpuser1

    以上です。

この記事のご感想やコメントはこちら

メールアドレスが公開されることはありません。 が付いている欄は必須項目です