LoginSignup
0
0

More than 1 year has passed since last update.

特定のディレクトリ以下のみアクセスできるSFTPユーザを作成する

Last updated at Posted at 2023-03-20

表題のとおりです。
調べればめっちゃ出てくるけど、やることを過不足なく揃えた自分版のメモです。

今回の環境

一応。

cat /etc/redhat-release 
Rocky Linux release 8.7 (Green Obsidian)

IPアドレス制限でパスワードログインするものとする。

手順

以下手順は root ユーザで設定する。

1. 2. はユーザを2つ以上作る際ははじめの1回だけでよい。

newgroup newuser child /path/to/symbolic_link は適宜変えてね。

  1. 「特定のディレクトリ以下のみアクセスできるユーザ」用のグループを作る
    groupadd newgroup
    
  2. 特定のディレクトリ以下のみアクセスさせないための設定
    vi /etc/ssh/sshd_config
    
    末尾に追記する
    Match Group newgroup
         ChrootDirectory %h
         PasswordAuthentication yes
         X11Forwarding no
         AllowTcpForwarding no
         ForceCommand internal-sftp
    
  3. ユーザを作成、パスワードを設定
    # g を大文字にするとプライマリグループではなくなってしまう。
    useradd newuser -g newgroup
    passwd newuser
    
  4. ChrootDirectory で指定されるディレクトリに必要な制約を満たすための設定
    chown root:root ~newuser
    chmod 755 ~newuser
    
  5. SSH ログインを禁止
    usermod -s /sbin/nologin newuser
    
  6. 「特定のディレクトリ」を作成
    ※ホームディレクトリ自体を「特定のディレクトリ」にすることはできない
    mkdir ~newuser/writable
    chown newuser:newgroup ~newuser/writable
    # 必要に応じて子ディレクトリ作成
    mkdir ~newuser/writable/child
    chown newuser:newgroup ~newuser/writable/child
    
  7. 「Webサーバーが参照したいのにそこだとドキュメントルート外なんですけど…」みたいな場合は、ドキュメントルート内からシンボリックリンクを張って対処する。
    # ちなみに、シンボリックリンクは相対パスで張った場合は相対パスのまま(シンボリックリンク自体を移動させるとリンク先も移動する)だが、~を使った場合は絶対パスに変換される。
    ln -s ~newuser/writable/child /path/to/symbolic_link
    # -h を付けないとリンク先の所有者を変更してしまう。
    chown -h newuser:newgroup /path/to/symbolic_link
    # シンボリックリンクにはパーミッションの設定は無い(リンク先のパーミッションで制御する)ので、所有者だけを変えればよい
    
  8. 外部向けの場合はIPアドレス許可設定をし直す(コード省略)
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0