まえがき
SFTP接続できるサーバを構築する機会があったのでそのときにやったことを書いておきます。
環境
OS | CentOS 8.0.1905 64bit |
---|---|
webサーバ | Apache/2.4.37 |
OpenSSH | OpenSSH_7.8p1 |
クラウド | さくらクラウド |
前提
- ApacheまたはNginxなどのwebサーバをインストール済み。
- ドキュメントルートは/var/www/vhostsとする
新規ユーザ作成
SFTP接続専用のユーザを作成します
管理ユーザになる
sudo su -
ユーザ作成
useradd sftp-user
パスワードを設定
passwd sftp-user
SFTPユーザのグループ指定
SFTP専用ユーザーをApacheのグループに追加します。
Apacheユーザを確認
id apache
uid=48(apache) gid=48(apache) groups=48(apache)
SFTP専用ユーザをグループに追加
usermod -g 48 sftp-user
グループIDを確認
id sftp-user
uid=1001(sftp-user) gid=48(apache) groups=48(apache)
ssh鍵設定
SFTPで接続するための鍵を作成する。
sftp-userのホームディレクトリに移動
cd /home/sftp-user
.sshディレクトリを権限700に指定して作成
mkdir -pm 700 .ssh
所有者をsftp-userに変更
sudo chown sftp-user:sftp-user .ssh
sftp-userにログイン
su - sftp-user
.sshに移動
cd .ssh
鍵を作成
ssh-keygen -t rsa -b 4096
生成された鍵ファイルを確認
$ ls -la
合計 20
drwxr-xr-x 2 sftp-user sample-sftp 4096 12月 4 22:43 .
drwxr-xr-x 3 root root 4096 12月 4 22:37 ..
-rw------- 1 sftp-user nginx 3247 12月 4 22:40 id_rsa
-rw-r--r-- 1 sftp-user nginx 754 12月 4 22:40
id_rsa.pub
id_rsa.pubをauthorized_keysというファイルに転記する。
cat id_rsa.pub
vi authorized_keys
authorized_keysの権限を変更
chmod 600 authorized_keys
最終的にこうなっていればOK
$ ls -la
drwx------ 2 sftp-user sample-sftp 4096 12月 4 22:43 .
drwxr-xr-x 3 root root 4096 12月 4 22:37 ..
-rw------- 1 sftp-user nginx 754 12月 4 22:43 authorized_keys
-rw------- 1 sftp-user nginx 3247 12月 4 22:40 id_rsa
-rw-r--r-- 1 sftp-user nginx 754 12月 4 22:40 id_rsa.pub
sftp-userからexit
exit
SFTPできるディレクトリを制限
SFTPアカウントで接続した際、ルートからなんでも見れて更新できては何かと困るので制限をかける。
.sshディレクトリに移動
cd /etc/ssh
バックアップを作成
cp -p sshd_config sshd_org_config
ユーザの制限事項を追加
vi sshd_config
#sshd_configの一番下に追加
Match group apache
ChrootDirectory /var/www/
ForceCommand internal-sftp -u 0002
ログインするディレクトリの所有者をrootにする
chown root:root /var/www
vhost以下の所有者を全てapacheにする
chown -R nginx:nginx /var/www/vhosts
vhosts以下のファイルの権限を664にする
#カレントディレクトリ以下全てに適用
find ./ -type f -exec chmod 664 {} \;
vhosts以下のディレクトリの権限を775にする
find ./ -type d -exec chmod 775 {} \;
トラブルシューティング
- アップロードできない
アップロードするディレクトリは権限と所有者を以下の権限にする。それでもできない場合はログインするディレクトリにアップロードしようとしてないか確認する。ログインするディレクトリはrootの権限なのでアップロードできないです
権限: 775
所有者: apche(webサーバの実行ユーザ)
- ログインできない
SFTPでログインするディレクトリは所有者と権限を以下に変更する
権限: 755
所有者: root:root