非ルートユーザーがウェブサイトディレクトリにアップロード/ダウンロードできるようにする

非ルートユーザーがウェブサイトディレクトリにアップロード/ダウンロードできるようにする

VPS に Web サイトがあります。その VPS に Debian 7 をインストールしています。http ドキュメントは、/var/www/example.comそのサーバーに Nginx をインストールしたディレクトリにあり、ディレクトリはユーザーとグループ/var/www/example.comによって所有されています。FileZillaなどの FTP または SFTP クライアントを介してそのディレクトリにドキュメントをダウンロードまたはアップロードできるように、非ルート ユーザー ( という名前を付けます)を追加したいと考えています。www-datawww-datasomeone

私は見つけたこれそしてこれガイドでは、 を使用して実行できることが説明されていますchroot。 設定しようとしましたが、うまくいきませんでした。 これまでに使用したコマンドをいくつか示します。

  1. useradd someone
  2. groupadd sftpusers
  3. usermod -G sftpusers someone
  4. vi /etc/ssh/sshd_config

このコードを追加しました

#Subsystem sftp /usr/lib/openssh/sftp-server
Subsystem sftp internal-sftp

そしてファイルの最後に追加した

Match group sftpusers
    ChrootDirectory /var/www/example.com
    X11Forwarding no
    AllowTcpForwarding no
    ForceCommand internal-sftp
  1. service ssh restart

/var/www/example.comしかし、FileZilla 経由で接続すると、エラーが発生しました。このエラーは、ユーザーwww-dataとグループによって所有されていることが原因であると思われますwww-data

質問: 非ルートユーザーがFileZillaなどのFTPまたはSFTPクライアントを介してディレクトリにドキュメントをダウンロードまたはアップロードできるようにするにはどうすればよいでしょうか/var/www/example.com。この非ルートユーザーは、次のように親ディレクトリにアクセスできないようにする必要があります。/var/www/

答え1

ああ、かわいいものや抱きしめたくなるものすべてを愛する者として、world+dog がアクセスできるもの (つまり、Web サイトのディレクトリ、匿名 FTP フォルダー) に 777 権限を設定しないでください。

最新の Linux と BSD には、ユーザーごとに設定できる ACL があり、完璧に機能します。これを使用して、特定のユーザーと特定のグループに rwx を追加することもできます。一度理解してしまえば、非常に簡単に実行できます。

TLDR; setfacl コマンドを次のように使用します #setfacl -m someuser:rwx /public_html SHAZAM! これで、someuser は public_html ディレクトリの読み取り/書き込み/実行権限を持ちます setfacl のマニュアル ページを読むか、少なくとも HOWTO を読んで、その機能に慣れることをお勧めします。以下は、ファイル システム ACL の簡単な紹介です。 https://www.redhat.com/sysadmin/linux-アクセス制御リスト

これは、world+dog に rwx を許可せずに、独自のアカウントを持つ特定の開発者にアクセスを許可する必要がある Web サーバーに最適です。

答え2

これは特定のユーザーに対してSFTPを設定する方法です

1] ユーザーを作成する

 adduser {USER}

2] /etc/ssh/sshd_configを編集する

 PasswordAuthentication yes 

 Subsystem sftp
 internal-sftp -u 0007 -f AUTH -l VERBOSE 
 Match Group {USER}
     ChrootDirectory {FOLDER}
     ForceCommand internal-sftp -u 0007
     AllowTcpForwarding no
     GatewayPorts no
     X11Forwarding no

3] ユーザーの権限を設定する

 chmod -R 777 {FOLDER}

4] sshを再起動する

service ssh restart

{USER} を自分のユーザーに、{FOLDER} を自分のフォルダーに置き換えれば動作するはずです! ;)

答え3

さて、試行錯誤の末、答えは見つかったようです。

  1. adduser someone
  2. vi /etc/ssh/sshd_config 私は Froggiz の設定を使用しているので、コードは次のようになります。

    PasswordAuthentication yes 
    
    Subsystem sftp internal-sftp -u 0007 -f AUTH -l VERBOSE 
         Match Group someone
         ChrootDirectory /var/www
         ForceCommand internal-sftp -u 0007
         AllowTcpForwarding no
         GatewayPorts no
         X11Forwarding no
    
  3. service ssh restart

  4. chmod -R 777 /var/www/example.comこれにより、誰かがファイルをアップロード/ダウンロードできるようになり、Web サーバー/php がこのディレクトリ内のファイルを処理できるようになります。

関連情報