web-dev-qa-db-ja.com

Amazon EC2 Centosの「/ var / www / html / website_abc」フォルダーにSFTP / FTPアクセスを持つユーザーを追加する方法

重複の可能性:
Linuxディレクトリ権限

サードパーティの開発者と協力しており、SFTP(またはFTP)に、彼らが作業しているWebサイトのルートフォルダーへのアクセスを許可したいのです。つまり、'/var/www/html/website_abc'にファイルをアップロードできるようにします。他のウェブサイトを同じEC2インスタンスでホストしていることに注意してください。 '/var/www/html/website_xyz'

1つの単一のEC2インスタンスで複数のWebサイトを操作していることを強調するために、Webサイトの構造は次のとおりです。

/ var/www/html /
/var/www/html/website_abc
...
/var/www/html/website_xyz

私の目標は次のとおりです。

  • ユーザー 'adeveloper'は '/ var/www/html/website_abc'にアクセスでき、 '/ var/www/html/website_abc'のみにアクセスできます
    • ユーザー 'adeveloper'はユーザー名として 'adeveloper @ [my elastic IP]'を使用してSFTP(またはFTP)にログインすると思いますが、正しいですか?
  • ユーザー「adeveloper」には、EC2インスタンスの「/ var/www/html /」またはその他のディレクトリへのアクセス権がありません
  • 秘密鍵ファイルはどうですか?
    • 私の秘密鍵ファイルをサードパーティの開発者に渡しますか?そうすることをお勧めしますか?
    • 彼らのために別の秘密鍵ファイルを生成したり、代わりにユーザー名とパスワードでログインすることを許可する方法はありますか?

私は検索を行いましたが、ほとんどの人が、WinSCPを使用してすでにSFTP経由でEC2にアクセスする方法について話していました。

説明:

  • 「書き込み」権限である/var/www/html/website_abcにコンテンツをアップロードできるようにするには、「adeveloper」が必要です。
  • 「adeveloper」には、/var/www/html/の下のファイル/ディレクトリに対する「書き込み」権限がなく、理想的には「読み取り」権限もない必要があります
  • しかし、ここには大きな問題があるようです:
    • これは私のDocumentRootフォルダーであるため、/var/www/html/にはすでにアクセス許可777があります。では、「adeveloper」が他のWebサイトにアクセスできないようにするにはどうすればよいですか?

部分的に解決しましたOpenSSHを使用して目標を達成しました(/ var/www/html/website_abc /内に.sshフォルダーを作成し、秘密鍵を生成してそれを与えますサードパーティの開発者に)。また、AWSから提供された秘密キーファイルを絶対に提供してはならないことも学びました。まだchrootについて学んでいます。

19
ericn

デフォルトでは、sshやtelnetなどのリモートシェル、またはsftpなどのコマンドの対話型リモートセッションを提供するサービスにより、ローカルユーザーは、アクセス許可のある任意のディレクトリに移動し、アクセス権のあるファイルのコピーを取得できます。

一般的なセキュリティ構成としては、世界中で読み取り可能なファイルやディレクトリが多数必要なため、これは残念です。たとえば、ここにあるリモートCentOSボックスの非rootユーザーがいます。

$ cd /etc
-bash-3.2$ ls -1
acpi
adjtime
aliases
...

例えば私はたくさんのものにアクセスできますが、理想的には、ローカルアクセスを提供したい未知のユーザーから制限したいと思うでしょう。

以下は、/etc/passwdファイルで構成されているすべてのローカルユーザーを確認したものです。

$ cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
...

Unixシステムにはchrootコマンドがあり、ユーザーの/をファイルシステム階層内のディレクトリにリセットできます。この場合、ユーザーは「上位」のファイルやディレクトリにアクセスできません。

ただし、あなたのケースでは、リモートシェルサービスによって実装された仮想chrootを提供することが適切です。 sftpは、ローカルユーザーをファイルシステムの特定のサブセットに制限するように簡単に構成できます。

したがって、あなたのケースでは、chrootadeveloperユーザーを/var/www/html/website_abcディレクトリに移動する必要があります。

ユーザーがchrootディレクトリを設定して、それらを/var/www/html/website_abcのようにサブディレクトリ/etc/ssh/sshd_configに制限することができます。

これには4.8以降のopenssh-serverが必要なため、おそらくCentOS 6.2が必要です

Match Group sftp
    ChrootDirectory %h
    AllowTcpForwarding no

(テストされていません。man sshd_configを参照して構文を確認してください)

次に、それらのユーザーをsftpグループに追加します。

 groupadd sftp
 usermod -d /var/www/html/website_abc adeveloper
 usermod -G sftp adeveloper

共有キーについて

adeveloperユーザー用に追加の鍵ペアを作成し、それをコンサルタントに送信する必要があります。 (または、公開鍵を送信して、adeveloperのauthorized_keysファイルに追加するよう依頼してください)

秘密鍵を決してあきらめないでください、それが秘密と呼ばれる理由です;-)

伝統的なftpの選択肢

vsftp/proftpなどもchroot構成をサポートしますが、今日ではsshベースの構成が通常の方法であり、ftpのサポートは履歴のみです。

ここにはチュートリアルへのリンクがいくつかあります。
http://www.techrepublic.com/blog/opensource/chroot-users-with-openssh-an-easier-way-to-confine-users-to-their-home-directories/229

http://www.howtoforge.com/chrooted-ssh-sftp-tutorial-debian-lenny

11
Tom H