Devo vincular meu diretório / var / www à minha casa?

20

Acabei de instalar o Ubuntu Server 10.04 com uma configuração LAMP. Quero hospedar um site lá, mas não tenho certeza de qual é a melhor maneira de obter / editar meus arquivos no servidor. O Google oferece muitas opções, mas não tenho certeza qual é o melhor.

A menos que haja uma opção melhor, eu gostaria de criar as páginas em outro PC (Windows ou Linux) e usar o SFTP para sincronizar as alterações no servidor - mas faço isso em uma pasta com link simbólico em ~ / ou alterando os direitos na pasta / var / www /?

Craig
fonte
5
Razões pelas quais / var / ww / não deve ter o chmod 777 - Apenas para deixar claro.
Marco Ceppi

Respostas:

21

Cada configuração é diferente. Para mim, tenho muitos usuários em um servidor que hospeda sites. Para você, você provavelmente não precisará criar mais do que apenas um usuário no sistema. No entanto, se você gerenciar vários sites neste servidor, essa configuração o ajudará a gerenciar, configurar e depurar cada domínio de uma maneira mais fácil do que uma instalação LAMP padrão. Para que isso aconteça, utilizo vários dispositivos do Apache para contornar erros de permissão.

Primeiro, esta é a estrutura do documento que eu uso:

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

Cada usuário tem sua própria conta com uma pasta de domínios (que eu adicionei para /etc/skelque seja criada toda vez. Cada domínio tem sua própria pasta na domainspasta com uma htmlpasta (eu tenho meus motivos para isso, principalmente para que os domínios possam ter arquivos da Web externos do domínio público). Sinta-se à vontade para modificar essa estrutura como achar melhor, lembre-se de realizar essas alterações ao longo deste post.

Em segundo lugar, eu hospedo muitos sites PHP, então uso o suPHP na minha configuração. Por padrão, o pacote de arquivamento padrão não tem o sinalizador de compilação adequado ativado, resultando em uma versão menos segura do suPHP. Criei meu próprio pacote suPHP, que uso nos meus servidores, instruções de instalação abaixo. O suPHP permite definir como os scripts PHP do usuário devem ser executados (entre outras coisas, incluindo: php.ini personalizado para cada site, etc.). Também habilito o suExec para Apache - removendo ainda mais a necessidade de ter qualquer propriedade do usuário www-data (um usuário que eu desprezo).

Primeiro, verifique se você possui o Apache e todos os outros serviços instalados no seu servidor. Verifique se eles estão trabalhando pelo menos. Depois disso, recomendo instalar o suphp-common e o módulo libapache2-mod-suphp necessário (Mais informações: O que são PPAs e como os uso? ). Depois, após a instalação, ative o suPHP e o suexec usandoa2enmod

sudo a2enmod suphp
sudo a2enmod suexec
sudo a2dismod php5

sudo /etc/init.d/apache restart

Em seguida, virá o arquivo de configuração. Criei várias ferramentas que geram automaticamente os arquivos de configuração sempre que adiciono um novo site; no entanto, aqui está o modelo básico que eu uso:

<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>

Isso configura o log para esse domínio, a raiz do documento e todas as outras necessidades básicas para o domínio operar. Coloco esses arquivos /etc/apache2/sites-available/normalmente nomeados [USER]-[DOMAIN]e os habilito / desabilito da seguinte a2ensiteforma:

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

Após cada modificação nos arquivos de configuração, o Apache precisará ser recarregado com

sudo /etc/init.d/apache reload

Embora possa parecer muito configurar a quantidade de flexibilidade adquirida, na minha opinião, supera em muito o tempo de configuração. Embora você precise apenas de um servidor da web de usuário único, no futuro, se quiser algo além de um servidor da web de usuário único, será necessário executar ações adicionais (ou simplesmente descartar a segurança todos juntos) para fazer isso.

Marco Ceppi
fonte
+1 para cada configuração é diferente e usando contas de usuário separadas para cada website
Lekensteyn
11
Isso é ótimo para um sistema LAMP para vários usuários, mas a pergunta era sobre um sistema LAMP para um usuário. Nesse caso, essa resposta é um exagero. :)
Kees Cook
O mesmo princípio do @Kees se aplica - apenas você não precisa criar mais usuários. Dessa forma, você nunca precisa se preocupar com problemas de permissão ou de usuário - e se um único usuário tiver vários domínios, essa configuração cobrirá isso.
Marco Ceppi
Marco, você pode implementar esse método no exato momento em que obtém seu segundo usuário. Essa primeira, porém, deve ser muito mais simples, a menos que seja certo que você terá mais.
SpamapS
+1 - esta é a configuração mais segura e sensata.
Nathan Osman
11

O Sftp é muito fácil de instalar. Basta instalar o pacote openssh-servere você terá o sftp. Certifique-se de que seu usuário tenha uma boa senha, se você puder acessá-la na Internet. (Mais de 8 caracteres, não uma palavra do dicionário, possui símbolos e números).

Para obter permissões, eu geralmente faço isso.
sudo adduser <username> www-data
sudo chown -R www-data:www-data /var/www
sudo chmod -R g+rw /var/www
Você poderá postar páginas conectando-se ao sftp (usando seu nome de usuário e senha) e depois indo para a pasta / var / www e colocando seus arquivos lá.

Azendale
fonte
11
Um método mais seguro é a autenticação baseada em chave (com a senha de chave privada protegida é claro)
Lekensteyn
@Lekensteyn, considerei sugerir isso, mas estava tentando mantê-lo simples. Craig T pode dar uma olhada em help.ubuntu.com/community/SSH/OpenSSH/Keys e help.ubuntu.com/community/SSH/OpenSSH/… se ele quiser configurar a autenticação baseada em chave mais segura.
Azendale 27/05
2
Essa é a abordagem mais simples para colocar os arquivos no lugar certo em um servidor Web de instância única sem destruir as permissões de arquivo. :) Além disso, o rsync pode ser usado em vez do sftp. Ambos usam SSH sob o capô (e eu recomendaria o uso de chaves ssh em vez de senhas, mas alguém já mencionou isso).
Kees Cozinhe
11
+1, concordo com Kees, isso é super simples e funciona para a pergunta indicada. Eu usei quase exatamente a mesma configuração para clusters de produção com mais de 40 nós, restringindo o acesso apenas às chaves SSH.
SpamapS
1

Eu uso o webdav. É muito fácil de instalar no Ubuntu Server. Se você possui o apache instalado, está quase pronto. Apenas sudo a2enmod dav; service apache2 restart. Você precisará fazer uma pequena configuração do seu site virtual. Aqui está um exemplo que estou usando na produção:

<VirtualHost *>
    ServerName webdav.mysite.com
    ServerAdmin [email protected]

    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 [email protected]

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

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

Você pode colocar isso em / srv / etc / apache2 / sites-available / mysite e então fazer sudo a2ensite mysite; sudo service apache2 reload.

O que está acontecendo aqui é que você criou dois sites virtuais. Um é www.mysite.com e o outro é webdav.mysite.com. O PHP foi desativado no webdav.mysite.com, o que é importante.

Agora você pode acessar seu site via http no Ubuntu, Windows e MacOS. Todos os três construíram suporte a webdav. Aqui estão as instruções sobre como adicionar um local de rede webdav no Ubuntu .

newz2000
fonte
Por que isso é bom? Como você pode acessar seu site a partir de qualquer sistema operacional, sem software adicional (o sftp funciona no Ubuntu, precisa de um programa separado em outros sistemas operacionais). Além disso, em um site como o wordpress, as permissões já estão corretas para lidar com o upload de arquivos, já que o apache lida com ambos os aspectos. E se você deseja segurança, o https padrão também está disponível. (você pode usar portas diferentes se você tiver vários sites no mesmo IP)
newz2000
A propósito, as instruções acima assumem que você criou um local para o seu site: mkdir -p /srv/mysite/www; chown -R www-data.www-data /srv/mysite .
newz2000
11
Não é certo que o DAV seja criptografado (a menos que seu servidor da Web também esteja executando SSL), então eu recomendaria o SFTP ou o rsync sobre o DAV em geral.
Kees Cozinhe
0

Eu daria permissões de gravação para / var / www nos dados de www e adicionaria seu usuário a esse grupo. Dessa forma, seria fácil controlar quais usuários podem gravar nesse diretório.

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

Você está usando alguma estrutura para o seu site? Drupal, Wordpress, etc? O Drupal, por exemplo, possui ferramentas para fazer upload via interação do navegador.

Você já olhou para o Samba? Você pode configurar um compartilhamento Samba (e há muitos recursos na Web para eles) e simplesmente usar o Windows Explorer para abrir / editar / salvar / excluir. Configure / var / www para ser compartilhado e, em seguida, mapeie a "unidade de rede" para o Windows.

Este é um ambiente de trabalho ou doméstico? Parece um lar, mas se você estiver em um ambiente de trabalho ... poderá emparelhar o Samba com o Active Directory com ferramentas como Likewise-Open. Eu tenho uma configuração de servidor / site para que aqueles na loja de TI possam fazer login nos dois lados do servidor (linux ou site) por meio de suas credenciais do AD.

Eu também sugeriria olhar para algo como Mercurial. Crie um repositório no servidor e sincronize com o Windows através de algo como o TortiseHG. Suponho que seja como o rsync, mas você teria versões, backups, capacidade de distribuir etc. (SVN, Mercurial, Git, etc, todas as opções)

WernerCD
fonte
-2

Você está atrás de algo assim

rsync -az --rsh "ssh" --rsync-path "sudo rsync" ~/website ubuntu@REMOTE-IP:/var/www
kim0
fonte
11
Efetuar login como root parece um sério exagero.
Kees Cozinhe