SFTP のパーミッション拒否エラーの解決
パーミッションが SFTP アクセスにどのように影響するかを理解したので、一般的なパーミッション拒否エラーを解決する方法を学びましょう。
解決策 1: ファイルとディレクトリのパーミッションの調整
パーミッションの問題に対する最も直接的な解決策は、ファイルとディレクトリのパーミッションを調整することです。新しいテストケースを作成しましょう。
## 制限付きパーミッションを持つ新しいテストファイルを作成する
echo "This file has restricted permissions" > ~/project/restricted_access.txt
chmod 600 ~/project/restricted_access.txt
現在のパーミッションを確認します。
ls -l ~/project/restricted_access.txt
出力:
-rw------- 1 labex labex 35 Sep 28 11:05 /home/labex/project/restricted_access.txt
次に、このファイルをパーミッションを変更して他のユーザーがアクセスできるようにしましょう。
chmod 644 ~/project/restricted_access.txt
ls -l ~/project/restricted_access.txt
出力:
-rw-r--r-- 1 labex labex 35 Sep 28 11:05 /home/labex/project/restricted_access.txt
これらのパーミッション (644) では、ファイルの所有者 (labex) はファイルを読み書きでき、グループメンバーとその他は読み取りのみできます。
解決策 2: ファイル所有者の変更
もう 1 つの解決策は、ファイルの所有権を SFTP ユーザーに合わせることです。別のテストファイルを作成しましょう。
echo "This file will be owned by sftpuser" > ~/project/ownership_test.txt
次に、所有権を SFTP ユーザーに変更しましょう。
sudo chown sftpuser:sftpuser ~/project/ownership_test.txt
ls -l ~/project/ownership_test.txt
出力:
-rw-rw-r-- 1 sftpuser sftpuser 36 Sep 28 11:10 /home/labex/project/ownership_test.txt
これで、ファイルは sftpuser が所有し、sftpuser はそれを読み書きできます。
解決策 3: 共有ディレクトリの作成
SFTP ファイル共有の一般的な解決策は、複数のユーザーがアクセスできる適切なパーミッションを持つディレクトリを作成することです。
## 適切なパーミッションを持つ新しい共有ディレクトリを作成する
mkdir -p /tmp/sftp_shared
sudo chown labex:labex /tmp/sftp_shared
chmod 755 /tmp/sftp_shared
## すべてのユーザーが書き込み可能なアップロード用のサブディレクトリを作成する
mkdir -p /tmp/sftp_shared/uploads
chmod 777 /tmp/sftp_shared/uploads
## 共有ディレクトリにサンプルファイルを作成する
echo "This file is in the shared SFTP directory" > /tmp/sftp_shared/sample.txt
chmod 644 /tmp/sftp_shared/sample.txt
設定を確認しましょう。
ls -la /tmp/sftp_shared/
出力:
total 12
drwxr-xr-x 3 labex labex 4096 Sep 28 11:15 .
drwxrwxrwt 4 root root 4096 Sep 28 11:15 ..
-rw-r--r-- 1 labex labex 39 Sep 28 11:15 sample.txt
drwxrwxrwx 2 labex labex 4096 Sep 28 11:15 uploads
この設定では、次のようになります。
- メインディレクトリは誰でも読み取りおよび実行できますが、所有者のみが書き込みできます
- uploads サブディレクトリは誰でも書き込み可能です (SFTP アップロードに適しています)
- sample.txt ファイルは誰でも読み取り可能ですが、所有者のみが書き込み可能です
この構成により、SFTP ユーザーは次のことができます。
- 共有ディレクトリに移動する
- サンプルファイルを読み取る
- uploads ディレクトリにファイルをアップロードする
解決策 4: よりきめ細かい制御のための ACL の使用
アクセス制御リスト (ACL) は、より詳細なパーミッション管理を提供します。必要なパッケージをインストールして、ACL を使用しましょう。
sudo apt install -y acl
次に、ファイルを作成し、ACL を使用して特定のパーミッションを設定しましょう。
echo "This file uses ACLs for permissions" > ~/project/acl_test.txt
## 基本的なパーミッションを設定する
chmod 640 ~/project/acl_test.txt
## sftpuser の ACL パーミッションを追加する
sudo setfacl -m u:sftpuser:r ~/project/acl_test.txt
## ACL 設定を表示する
getfacl ~/project/acl_test.txt
出力:
## file: /home/labex/project/acl_test.txt
## owner: labex
## group: labex
user::rw-
user:sftpuser:r--
group::r--
mask::r--
other::---
この ACL 構成により、次のことが可能になります。
- ファイル所有者 (labex) は読み書きできます
- sftpuser はファイルを読み取ることができます
- グループはファイルを読み取ることができます
- その他はアクセスできません