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