/ var / www 디렉토리를 집에 심볼릭 링크해야합니까?


20

방금 LAMP 설정으로 Ubuntu Server 10.04를 설치했습니다. 웹 사이트를 호스팅하고 싶지만 서버에서 파일을 가져 오거나 편집하는 가장 좋은 방법은 확실하지 않습니다. 인터넷 검색은 많은 옵션을 제공하지만 어느 것이 가장 좋은지 잘 모르겠습니다.

더 나은 옵션이 없다면 다른 PC (Windows 또는 Linux)에서 페이지를 만들고 SFTP를 사용하여 변경 사항을 서버와 동기화하고 싶습니다.하지만 ~ /의 심볼릭 폴더 또는 권한을 변경 하여이 작업을 수행하고 싶습니다 / var / www / 폴더에?


답변:


21

모든 설정이 다릅니다. 나에게는 각각 웹 사이트를 호스팅하는 서버에 많은 사용자가 있으므로 시스템에서 둘 이상의 사용자를 만들 필요는 없습니다. 그러나이 서버에서 여러 웹 사이트를 관리하는 경우이 설정을 사용하면 표준 LAMP 설정보다 쉽게 ​​각 도메인을 관리, 구성 및 디버깅 할 수 있습니다. 이를 위해 Apache의 여러 장치를 사용하여 권한 오류를 피할 수 있습니다.

첫째, 이것은 내가 사용하는 문서 구조입니다.

/home/[USER]/domains/[DOMAIN]/html
/home/[USER]/domains/[DOMAIN]/logs

각 사용자는 도메인 폴더가있는 자체 계정을 가지고 있습니다 (추가 한 폴더 /etc/skel는 매번 생성됩니다. 각 도메인에는 폴더가있는 domains폴더에 자체 폴더가 있습니다 html(이 이유는 주로 도메인 외부에 웹 파일을 가질 수 있음) 적절한 경우이 구조를 자유롭게 수정하십시오.이 게시물 전체에서 이러한 변경 사항을 수행해야합니다.

둘째, PHP 사이트를 많이 호스팅하므로 구성에 suPHP를 사용합니다. 기본적으로 표준 아카이브 패키지에는 적절한 컴파일 플래그가 활성화되어 있지 않으므로 suPHP의 보안 수준이 떨어집니다. 서버에서 사용하는 자체 suPHP 패키지, 아래 설치 지침을 만들었습니다. suPHP를 사용하면 실행할 사용자 PHP 스크립트를 정의 할 수 있습니다 (각 사이트의 사용자 정의 php.ini 등 포함). 또한 suExec for Apache를 활성화하여 www-data 사용자 (내가 멸시하는 사용자)에 대한 소유권이 없어도됩니다.

먼저 Apache 및 기타 모든 서비스가 서버에 설치되어 있는지 확인하십시오. 그들이 적어도 작동하는지 확인하십시오. 그런 다음 suphp-common 및 필수 libapache2-mod-suphp 모듈을 설치하는 것이 좋습니다 (자세한 정보 : PPA 란 무엇이며 어떻게 사용합니까? ). 그런 다음 설치 후 suPHP 및 suexec를 사용하여 활성화하십시오.a2enmod

sudo a2enmod suphp
sudo a2enmod suexec
sudo a2dismod php5

sudo /etc/init.d/apache restart

다음으로 구성 파일이 나타납니다. 새 사이트를 추가 할 때마다 구성 파일을 자동으로 생성하는 다양한 도구를 만들었습니다. 그러나 다음은 내가 사용하는 기본 템플릿입니다.

<VirtualHost *:80>
    ServerAdmin [EMAIL]
    ServerName [DOMAIN]
    ServerAlias www.[DOMAIN] [DOMAIN]
    DocumentRoot /home/[USER]/domains/[DOMAIN]/html

    <Directory /home/[USER]/domains/[DOMAIN]>
            Options Indexes FollowSymLinks MultiViews
            AllowOverride all
    </Directory>

    ErrorLog /home/[USER]/domains/[DOMAIN]/logs/error.log

    # Possible values include: debug, info, notice, warn, error, crit,
    # alert, emerg.
    LogLevel warn

    CustomLog /home/[USER]/domains/[DOMAIN]/logs/access.log combined

    SuexecUserGroup [USER] [USER]

    suPHP_UserGroup [USER] [USER]
    suPHP_ConfigPath /home/[USER]/etc
</VirtualHost>

그러면 해당 도메인, 문서 루트 및 도메인 작동에 필요한 기타 모든 기본 사항에 대한 로깅이 설정됩니다. 이러한 파일을 /etc/apache2/sites-available/일반적으로 이름이 지정된 곳에 배치하고 다음 [USER]-[DOMAIN]a2ensite같이 활성화 / 비활성화합니다 .

sudo a2ensite [USER]-[DOMAIN]
sudo a2dissite [USER]-[DOMAIN]

구성 파일을 수정할 때마다 Apache를 다음과 같이 다시로드해야합니다.

sudo /etc/init.d/apache reload

유연성의 양을 설정하는 것이 많은 것처럼 보이지만, 제 생각에는 설정 시간보다 훨씬 큽니다. 단일 사용자 웹 서버 만 있으면되지만 나중에 단일 사용자 웹 서버 이외의 다른 것을 원한다면 추가 작업을 수행하거나 보안을 함께 삭제해야합니다.


설정마다 +1이 다르며 각 웹 사이트마다 별도의 사용자 계정을 사용합니다
Lekensteyn

1
이는 다중 사용자 LAMP 시스템에는 유용하지만 단일 사용자 LAMP 시스템에 대한 문제였습니다.이 경우이 답변은 과도합니다. :)
Kees Cook

@ 키스의 동일한 원칙이 적용됩니다-더 많은 사용자를 만들 필요는 없습니다. 이 방법으로 사용자 또는 권한 문제에 대해 걱정할 필요가 없습니다. 단일 사용자가 여러 도메인을 가지고있는 경우이 설정으로이를 해결할 수 있습니다.
Marco Ceppi

Marco, 두 번째 사용자를 확보하는 시점에이 메소드를 구현할 수 있습니다. 그래도 첫 번째는 확실하지 않은 한 더 단순해야합니다.
SpamapS

+1-가장 안전하고 합리적인 구성입니다.
Nathan Osman 2016 년

11

Sftp는 설치가 매우 쉽습니다. 패키지를 설치하면 openssh-serversftp가 생깁니다. 인터넷에서 접속할 수 있으면 사용자에게 올바른 비밀번호가 있는지 확인하십시오. (사전 단어가 아닌 8 개 이상의 문자에는 기호와 숫자가 있습니다).

권한의 경우 일반적으로
sudo adduser <username> www-data
sudo chown -R www-data:www-data /var/www
sudo chmod -R g+rw /var/www
이렇게합니다. 그런 다음 sftp (사용자 이름 및 비밀번호 사용)로 연결 한 다음 / var / www 폴더로 이동하여 파일을 배치하여 페이지를 게시 할 수 있어야합니다.


1
보다 안전한 방법은 키 기반 인증입니다 (물론 개인 키 암호를 보호 함)
Lekensteyn

@ Lekensteyn 나는 제안하는 것을 고려했지만 간단하게 유지하려고 노력했습니다. Craig T 는보다 안전한 키 기반 인증을 설정하려는 경우 help.ubuntu.com/community/SSH/OpenSSH/Keyshelp.ubuntu.com/community/SSH/OpenSSH/…를 살펴볼 수 있습니다 .
Azendale

2
이것은 파일 권한을 손상시키지 않고 파일을 단일 인스턴스 웹 서버에서 올바른 위치로 가져 오는 가장 간단한 방법입니다. :) 또한 sftp 대신 rsync를 사용할 수 있습니다. 둘 다 SSH를 사용합니다 (암호 대신 ssh 키를 사용하는 것이 좋지만 누군가 이미 언급했습니다).
Kees Cook

1
+1, Kees에 동의하십시오. 이것은 매우 간단하며 명시된 질문에 적용됩니다. 40 개 이상의 노드가있는 프로덕션 클러스터에 대해 거의 동일한 설정을 사용하여 SSH 키에 대한 액세스 만 제한했습니다.
SpamapS

1

나는 webdav를 사용합니다. 우분투 서버에 설치하는 것은 매우 쉽습니다. 아파치를 설치했다면 거의 다 끝난 것입니다. 그냥 sudo a2enmod dav; service apache2 restart. 가상 사이트를 약간 구성해야합니다. 프로덕션에서 사용중인 예는 다음과 같습니다.

<VirtualHost *>
    ServerName webdav.mysite.com
    ServerAdmin webmaster@mysite.com

    DocumentRoot /srv/mysite
    DAVLockDB /var/lock/apache2/DAVLock
    <Directory /srv/mysite>
        Order allow,deny
        Allow from all
    Dav On
    DAVMinTimeout 600
    DAVDepthInfinity On
AuthName "mysite login"
AuthType Basic
AuthUserFile /srv/mysite/.htpassword
Require valid-user

    </Directory>
php_admin_value engine off
</VirtualHost>

<VirtualHost *>

    ServerName mysite.com
    ServerAlias *.mysite.com
    ServerAdmin webmaster@mysite.com

    DocumentRoot /srv/mysite/www
    <Directory /srv/mysite/www>
        Order allow,deny
        Allow from all
    </Directory>

    ScriptAlias /cgi-bin/ /srv/mysite/cgi-bin/
</VirtualHost>

이것을 / srv / etc / apache2 / sites-available / mysite에 넣은 다음 할 수 sudo a2ensite mysite; sudo service apache2 reload있습니다.

여기서 일어나는 일은 두 개의 가상 사이트를 만든 것입니다. 하나는 www.mysite.com이고 다른 하나는 webdav.mysite.com입니다. webdav.mysite.com에서 PHP가 비활성화되었습니다.이 기능은 중요합니다.

이제 Ubuntu, Windows 및 MacOS에서 http를 통해 사이트에 액세스 할 수 있습니다. 세 가지 모두 webdav 지원 기능이 내장되어 있습니다. Ubuntu에서 webdav 네트워크 위치추가하는 방법은 다음과 같습니다 .


왜이게 좋은가요? 추가 소프트웨어없이 모든 운영 체제에서 사이트에 액세스 할 수 있기 때문에 (sftp는 Ubuntu에서 작동하며 다른 OS에서는 별도의 프로그램이 필요합니다). 또한 워드 프레스와 같은 사이트에서는 아파치가 두 가지 측면을 모두 다루기 때문에 파일 업로드 처리에 대한 권한이 이미 정확합니다. 보안을 원한다면 표준 https도 사용할 수 있습니다. (동일한 IP에 여러 사이트가있는 경우 다른 포트를 사용할 수 있습니다)
newz2000 2016

그건 그렇고, 위의 지침은 귀하가 귀하의 사이트를위한 장소를 만들었다 고 가정합니다 : mkdir -p /srv/mysite/www; chown -R www-data.www-data /srv/mysite.
newz2000 2016

1
DAV는 확실하게 암호화되지 않습니다 (웹 서버에서 SSL을 실행하지 않는 한) DAV를 통한 SFTP 또는 rsync를 일반적으로 권장합니다.
Kees Cook 2016 년

0

www-data에 / var / www에 대한 쓰기 권한을 부여하고 해당 그룹에 사용자를 추가합니다. 이렇게하면 해당 디렉토리에 쓸 수있는 사용자를 쉽게 제어 할 수 있습니다.

sudo chgrp -R www-data /var/www
sudo chmod g+w -R /var/www 
usermod -a -G www-data your-user

-1

사이트에 프레임 워크를 사용하고 있습니까? 드루팔, 워드 프레스 등? 예를 들어 Drupal에는 브라우저 상호 작용을 통해 업로드 할 수있는 도구가 있습니다.

삼바를 살펴 보셨습니까? Samba 공유를 설정하고 웹에 수많은 리소스가있을 수 있으며 Windows 탐색기를 사용하여 열기 / 편집 / 저장 / 삭제할 수 있습니다. / var / www를 공유하도록 설정 한 다음 "네트워크 드라이브"를 창에 매핑하십시오.

이것은 직장이나 가정 환경입니까? 마치 집처럼 들리지만 작업 환경에 있다면 Samba와 Active Directory를 Likewise-Open과 같은 도구로 페어링 할 수 있습니다. IT 상점의 사용자가 AD 자격 증명을 통해 서버의 어느 쪽 (리눅스 또는 웹 사이트)에 로그인 할 수 있도록 서버 / 웹 사이트 설정이 있습니다.

또한 Mercurial과 같은 것을 살펴볼 것을 제안합니다. 서버에 저장소를 작성하고 TortiseHG와 같은 것을 통해 창과 동기화하십시오. 나는 rsync와 같다고 가정하지만 버전 관리, 백업, 배포 기능 등 (SVN, Mercurial, Git 등 모든 옵션)



-2

이런 식으로 당신은 후

rsync -az --rsh "ssh" --rsync-path "sudo rsync" ~/website ubuntu@REMOTE-IP:/var/www

1
루트로 로그인하면 심각한 오버 킬처럼 보입니다.
Kees Cook 2016 년
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.