web-dev-qa-db-ja.com

特定のディレクトリのsftpユーザーへの読み取り専用権限

/var/www/vhosts内のすべてのフォルダーとサブフォルダーのみを読み取る権限を持つ特定のSFTPユーザーを作成したい。これについて何か助けはありますか?

10
Delirium

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サーバーフォルダーに変更されます。

11
Rahul