현재 상황

현재 상황

제 생각에는:

  • /home/friend내 서버에 있는 친구의 디렉토리에 대한 SFTP 액세스 제공
  • 그에게 Apache가 포함된 가상 호스트를 제공하세요./home/friend/www/
  • 그 사람이 유사한 디렉터리에 액세스하는 것을 허용하지 않고 /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/? 그의 웹사이트에 파일 업로더가 있다고 가정해 보겠습니다. PHP는 이 디렉토리에 파일을 작성해야 합니다. 및 에는 /home/friend어떤 권한이 부여됩니까 /home/me?


링크 주제:

Apache 권한을 처리하는 가장 좋은 방법은 무엇입니까?

내 웹사이트 파일/폴더는 Linux 웹 서버에서 어떤 권한을 가져야 합니까?

답변1

현재 상황

이 섹션의 경고는 귀하의 경우에만 권장됩니다만 사용웹 호스팅이기 때문에 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아파치에 속하게 만드세요chown www-data:root /home

이렇게 하면 Apache는 필요한 디렉터리에 액세스할 수 www있고 사용자는 다른 사용자 폴더에 액세스할 수 없습니다.

여기서 핵심은 그룹 권한이 사용자 간에 공유되는 반면 Apache 자체는 다른 사용자에게 노출되지 않는 사용자라는 것입니다. 예를 들어 Apache와 나에게 액세스 권한을 부여하면 chown www:me /home/me다른 사용자로부터 격리된 상태로 유지됩니다(그리고 www 그룹의 모든 사람은 액세스가 허용됩니다). 파일 클립) )mechown me:www /home/meme

디렉토리는 현재 구성 설정에서 apache(사용자)에 속한 위치 www에 존재해야 하거나 사용자 디렉토리 내부에 있기 때문에 해결 방법 입니다 .www-data/home/mewww-data:me/homewww-data:rootwww

그렇기 때문에 기본 위치는 홈 디렉터리가 아닌 홈 디렉터리에 www있습니다 . 이는 아파치에게 불필요한 액세스 권한(예: 전체 사용자 폴더에 대한 액세스 권한)을 부여하지 않고 아파치와 사용자가 w/r을 허용하도록 하기 위한 것입니다./varwww

홈 폴더가 다음과 같은 경우오직(웹 사용) 현재 제안/구성에 만족한다는 의미입니다 . www이제 웹 호스팅 이외의 목적으로 이 시스템을 사용하는 경우 폴더가 아닌 다른 위치에 www있어야 합니다 . 사용 사례를 제거 하고 파일 액세스가 파일 액세스 권한에 의해서만 관리되는 클래식 구성으로 이동하려면,/home/varChrootDirectory이것은클래식 사용자의 제한 사항에 대한 일부 읽기...

보안, 격리, 웹 호스팅 및다른 Linux/서버에서 사용됨각 사용자에 대해 다양한 솔루션을 구현하고 가상화 및/또는 샌드박싱을 발전시켜야 합니다.

귀하가 요청한 것을 달성할 수 있는 다른 가능성이 많이 있지만 귀하의 구성에 대해서는 이것이 가장 빠릅니다. 리소스 섹션을 읽으십시오.최종 권장 사항아래는 더 적합한 구현입니다.

구성

구현은 대상 보안 수준 및 대상 용도에 따라 달라집니다. 따라서 하나의 구성이 어떤 상황에는 적합하지만 동시에 다른 상황에는 부적절할 수도 있습니다.

ChrootDirectory현재 구성은 각 SSH 사용자 간의 분리를 관리하기 위해 클래식 파일 권한 대신 그룹 및 사용자 액세스 수준을 사용하는 클래식 구성과 크게 다르지 않습니다 . 이를 달성하기 위한 구성에서 사용자 액세스 수준이 누락된 것 같습니다. 구현 방법에 대한 자세한 내용은 다음과 같습니다.여기,여기그리고여기(즉, ChrootDirectory다른 방법으로 사용하는 것이 좋은 보안 관행입니다)

대안(강화된 보안)

PermitRootLogin yesFirst를 사용하지 말고 대신 mesuders에 사용자를 추가하십시오. 그런 다음 me사용자는 다음을 사용하여 sudo su루트 디렉터리에 액세스 할 수 있습니다.su

보안을 강화하는 것이 목표라면 user space각 사용자를 완전히 분리하는 커널 기능을 사용할 수 있지만 이는 완전히 다른 구성입니다. 이는 기본 Linux 도구 및/또는화재 감옥별도의 파일/네트워크 등

또한 보안 강화와 동일한 범위 내에서 인증을 위해 개인/공개 키를 사용하는 대신 개인/공개 키를 사용해야 합니다.PasswordAuthentication yes

SSHFS호스팅된 파일을 분리하는 대신 사용할 수도 있습니다.

주제에 대한 더 흥미로운 링크는 다음과 같습니다.

최종 권장 사항

마지막으로 구성과 관련하여 제안하고 싶은 것은

  • 장애를 입히다PermitRootLogin
  • 사용자 및 /home권한을 검토합니다.
  • 의 경우고유한웹호스팅 사용량
    • /home디렉토리 가 아닌 제안된 권한을 적용한 /var/apache/user1,user2,etc다음 .ChrootDirectory /var/apache/
  • 다목적 시스템의 경우
    • 여기서는 여러 가지 가능성을 사용할 수 있습니다. 그 중 하나는 /home디렉터리에 대한 것이 아니라 유사한 구조를 사용하여 제안된 권한을 적용하는 것입니다./var/apache/user1,user2,etc 아니요그런 다음 파일 액세스 권한을 사용하여 ChrootDirectory권한을 관리합니다.

답변2

이것기사훌륭하고 간단한 솔루션을 제공합니다.

  • 루트가 소유한 디렉터리를 만들고 이를 사용자의 홈으로 /friends/만듭니다 ./friends/alice/alice

    usermod -m -d /friends/alice alice
    
  • 끝에 이것을 추가하십시오 /etc/ssh/sshd_config:

    Subsystem sftp internal-sftp
    Match User alice
    ChrootDirectory /friends
    
  • 그 다음에/etc/init.d/ssh restart

  • 여러 사용자를 동일한 디렉토리로 chroot하지만 해당 사용자가 다른 사용자의 홈 디렉토리를 탐색하는 것을 원하지 않는 경우 다음과 같이 각 홈 디렉토리에 대한 권한을 변경할 수 있습니다. 예:

    chmod 700 /home/alice
    

    유일한 단점: 이 솔루션을 사용하면 Apache는 다음 내용을 읽을 수 없습니다 /home/alice/www.

관련 정보