web-dev-qa-db-ja.com

Apache、SSH、SFTPのユーザーアクセス制御を設定する方法

私はしたいと思います:

  • 私のサーバー上の友人/home/friendへのSFTPアクセスを友人に与える
  • /home/friend/www/でApacheを使用してWebホスティングを提供します
  • /etc/および同様のディレクトリへのアクセスを許可しない(現在解決済み)。また、自分のユーザーの家/home/meへのアクセスを許可しない(現時点では解決されていない)

これをする:

  • adduser friendを作成しました

  • 私は彼にApache VirtualHostを追加しました:

    <VirtualHost *:80>
        ServerName hiswebsite.com
        DocumentRoot /home/friend/www
        ...
    </VirtualHost>
    

    およびservice Apache2 restart

  • SFTP/SSHアクセスを「投獄」しました。

    PermitRootLogin yes
    ChallengeResponseAuthentication no
    UsePAM yes
    X11Forwarding yes
    PrintMotd no
    AcceptEnv LANG LC_*
    PasswordAuthentication yes
    GatewayPorts yes
    Subsystem sftp internal-sftp
    Match User friend
    ChrootDirectory /home/
    ForceCommand internal-sftp
    

    およびservice sshd restart

問題:

  1. friend/home/から出られなくなりました(これは良いことです)が、/home/me/そして中のファイルを読んでください!彼に/home/friend/へのアクセスのみを許可し、他には何を許可しないのですか?次の理由により、これは不可能に思われます。

    ChrootDirectory
    認証後にchroot(2)するディレクトリのパス名を指定します。 パス名のすべてのコンポーネントは、他のユーザーまたはグループが書き込みできないルート所有ディレクトリである必要があります。

  2. したほうがいい

    • ユーザーfriendをグループwww-dataに追加しますか?
    • または、ユーザーwww-dataをグループfriendに追加しますか?
    • または別のユーザー/グループ設定?

      apacheがファイルを提供できるようにするため、およびPHPに/home/friend/www/への書き込みアクセス権を与えるには?]彼のWebサイトにファイルアップローダーがあるとします:PHP =このディレクトリに書き込む必要があります。/home/friend/home/meに付与する権限はどれですか?


リンクされたトピック:

Apacheのアクセス許可を処理する最良の方法は何ですか?

Linux WebサーバーでWebサイトのファイル/フォルダーにどのようなアクセス許可を与える必要がありますか?

1
Basj

現在の状況

このセクションの警告、これは、のみの使用法がWebホスティングである場合にのみ推奨されます。Apacheは、ホームユーザーのフォルダーにアクセスするためのものではありません(他の提案答えの最後にあるほうが適切かもしれません)。


  1. Web/Apacheグループ(www-dataグループ)には、サービスを使用するすべてのユーザーが必要です
  2. Apacheとユーザーはそれぞれのwwwへのアクセス権を持ちながら、お互いのアクセス権を制限する必要があります
    • /homeの下の各ディレクトリにはwww-data:user権限が必要です
        chown www-data:me /home/me

[〜#〜]または[〜#〜]

  1. Web/Apacheグループ(www-dataグループ)には、サービスを使用するすべてのユーザーが必要です
  2. Apacheとユーザーは、相互間のアクセスを制限しながら、それぞれのwwwにアクセスできる必要があります
    • ホームユーザーのフォルダには適切なchown me:me /home/meが必要です
    • /homeをApacheに属させるchown www-data:root /home

同様に、Apacheは必要なwwwディレクトリにアクセスでき、ユーザーは他のユーザーのフォルダーにアクセスできません。

ここで重要なのは、グループ権限がユーザー間で共有される一方で、Apache自体が他のユーザーに公開されていないユーザーです。たとえば、chown www:me /home/memeを他のユーザーから隔離して、Apacheと私にアクセスを許可します(そしてchown me:www /home/meはグループwwwの全員にmeフォルダへのアクセスを許可します)

ディレクトリwwwは、現在の構成設定www-dataから/home/meまたはwww-data:meへのApache(/homeユーザー)に属する場所に存在する必要がありますwww-data:rootは、ユーザーディレクトリ内にwwwを配置するための回避策です。

これが、デフォルトのwwwの場所がホームディレクトリではなく/varの下にある理由です。これにより、Apacheとユーザーは、Apacheに不要なアクセス権を与えずにwwwにw/rできるようになります。この場合、ユーザーのフォルダ全体へのアクセス)

ホームフォルダーがonlywww(Webの使用)を意味する場合、現在の提案/構成で問題ありませんが、 Webホスティング以外の目的でシステムを使用する。その場合、www/homeフォルダではなく、/varなどの別の場所に配置する必要があります。その場合、ChrootDirectoryの使用を削除し、代わりにファイルアクセスがファイルアクセス許可によってのみ管理される従来の構成を使用する必要があります こちらは クラシックユーザー...

セキュリティ、分離、Webホスティングに加えてその他のLinux /サーバーの使用法がユーザーごとに必要な場合は、仮想化および/または進化する異なるソリューションを実装する必要がありますサンドボックス化。

あなたが求めていることを達成するためには他にも多くの可能性がありますが、これはあなたの設定に関して最も速いことに注意してください、より適切な実装については以下のセクション最終的な提案を読んでください。

設定

実装は、対象のセキュリティレベルと対象の使用法によって異なります。したがって、1つの構成が1つの状況に最適であると同時に、別の状況に悪影響を及ぼす可能性があります。

現在の構成は、ChrootDirectoryの代わりに、従来のファイルのアクセス許可、グループ、およびユーザーのアクセスレベルを使用して各sshユーザー間の分離を管理する従来の構成からそれほど離れていません。私はあなたがそれを達成するためにあなたの設定にユーザーアクセスレベルを欠いているだけだと思います。 herehere および here を実装する方法の詳細を以下に示します(これに加えてChrootDirectoryを使用すると述べた)適切なセキュリティ対策)

代替(強化されたセキュリティ)

最初にPermitRootLogin yesを使用しないでください。代わりにmeユーザーをスーダーに追加してください。ルートはmeユーザーからSudo suまたはsuでアクセスできます。

強化されたセキュリティをターゲットにしている場合は、カーネルuser space機能を使用できます。これにより、各ユーザーが完全に分離されますが、これはまったく別の構成です。これは、ネイティブLinuxツールや、ファイル/ネットワークなどを分離する firejail を使用して実現できます。

また、強化されたセキュリティと同じ範囲で、PasswordAuthentication yesの代わりに秘密鍵/公開鍵による認証を使用する必要があります

[〜#〜] sshfs [〜#〜] は、ホストされているファイルを区切るための代替手段になる場合もあります。

また、このトピックに関する興味深いリンクもあります。

最終提案

最後に、あなたの設定に関して私はちょうど提案します

  • 無効にするPermitRootLogin
  • ユーザーと/home権限を確認してください。
  • uniqueの場合Webホスティングの使用法
    • /homeディレクトリではなく、提案された権限を適用しますが、/var/Apache/user1,user2,etcのような構造を使用します。次にChrootDirectory /var/Apache/を使用します
  • 多目的システムの場合
    • ここでは多くの可能性を使用できますが、そのうちの1つは/homeディレクトリではなく、推奨される権限を適用していますが、/var/Apache/user1,user2,etcwithoutChrootDirectoryを使用して、ファイルアクセス権で権限を管理します。
3
intika