/var/www/vhosts
内のすべてのフォルダーとサブフォルダーのみを読み取る権限を持つ特定のSFTPユーザーを作成したい。これについて何か助けはありますか?
Unixシステムにはchroot
コマンドがあり、ユーザーの/
をファイルシステム階層内のディレクトリにリセットできます。この場合、ユーザーは「上位」のファイルやディレクトリにアクセスできません。
ただし、あなたのケースでは、リモートシェルサービスによって実装された仮想chrootを提供することが適切です。 sftpは、ローカルユーザーをファイルシステムの特定のサブセットに制限するように簡単に構成できます。
したがって、あなたのケースでは、chroot
とします。たとえば、ユーザーfoo
ユーザーを/var/www/vhosts/
ディレクトリに入れます。
ユーザーがchrootディレクトリを設定して、/var/www/vhosts/
のようにサブディレクトリ/etc/ssh/sshd_config
にそれらを制限することができます。
パスワードを使用してユーザーfoo
を作成します
Sudo useradd foo
Sudo passwd foo
SFTPのみのグループ用に作成
$ Sudo groupadd sftp_users
SFTPのみのグループのユーザーfoo
に追加
$ Sudo usermod -G sftp_users foo
読み取り/書き込み権限があるため、所有者を変更します
Sudo chown root.root /var/www/vhosts/
権限を追加
Sudo chmod 755 /var/www/vhosts/
編集/etc/ssh/sshd_config
Sudo vi /etc/ssh/sshd_config
コメントアウトして、以下のような行を追加します
#Subsystem sftp /usr/lib/openssh/sftp-server
Subsystem sftp internal-sftp
最後に追加
Match Group sftp_users
X11Forwarding no
AllowTcpForwarding no
ChrootDirectory /var/www/vhosts/
ForceCommand internal-sftp
(注:Match
ブロックはsshd_config
ファイルの[〜#〜] end [〜#〜]にある必要があります。)
ssh
サービスを再起動します
Sudo service ssh restart
この構成では、ubuntu
フォルダにsshしてファイルを取得できます。 put
またはdelete
はできません
正しいフォルダでsftpするには、/etc/passwd
を編集します。ユーザーfoo
の行を次のように変更します
$ Sudo vi /etc/passwd
..
foo:x:1001:1001::/var/www/vhosts/:
..
これにより、ユーザーfoo
ホームフォルダーがsftpサーバーフォルダーに変更されます。