Atualmente tenho uma pequena máquina Ubuntu Server 12.04 (ambiente de teste) com cerca de 3 usuários não root criados. Cada usuário tem seu próprio public_html
diretório home
, permitindo-lhes implantar vários aplicativos como hosts virtuais nomeados. Cada usuário pertence ao www-data
grupo Apache, configurado da seguinte forma:
sudo usermod -a -G www-data [username]
sudo chown -R [username]:www-data /home/[username]/public_html
sudo chmod 2750 /home/[username]/public_html
Agora, como usuário root, estou criando um script bash que automatizará a criação de pastas para o VirtualHost sob um usuário solicitado, public_html
bem como criará uma entrada associada em /etc/apache2/sites-available/
. O script (executado com sudo
) solicitará o usuário ( $uzer
) e o nome do host virtual desejado ( $vhost
). Até agora, depois de executar algumas verificações, finalmente cheguei ao seguinte ...
mkdir -vp /home/$uzer/public_html/$vhost
mkdir -vp /home/$uzer/public_html/$vhost/www
mkdir -vp /home/$uzer/public_html/$vhost/logs
mkdir -vp /home/$uzer/public_html/$vhost/backups
Preciso alterar a propriedade dessas pastas recém-criadas, por isso não tenho certeza se devo fazer o seguinte:
chown -vR $uzer:www-data /home/$uzer/public_html/$vhost
chmod 2750 /home/$uzer/public_html/$vhost
Minhas perguntas:
- A minha estrutura de pastas está correta/ideal?
- Eu sei que usei
-R
a opção recursiva (), mas devo repetir o mesmo$vhost/www
para$vhost/logs
e$vhost/backups
? - Estou correto ao pensar que o chmod acima provavelmente é redundante?
- Existe uma maneira de executar os
mkdir
comandos como usuário$uzer
?
Responder1
P: Minha estrutura de pastas está correta/ideal?
R: A estrutura de pastas parece boa.
P: Eu sei que usei a opção recursiva (-R), mas devo repetir o mesmo para $vhost/www, $vhost/logs e $vhost/backups?
R: Seria redundante executá-lo nesses diretórios
P: Estou correto ao pensar que o chmod acima provavelmente é redundante?
Sim, tecnicamente, é redundante porque o sudo inicial que cria os diretórios está definindo o 'set group id bit', mas definir esse bit (o 2 em 2750) não é uma garantia. Já vi diretórios com isso em que os usuários moveram arquivos para o diretório ou alteraram acidentalmente o grupo de arquivos, então eu deixaria assim.
Existe uma maneira de executar os comandos mkdir como o usuário $uzer?
root$ su -u $user -c "mkdir ..."
Além disso, você pode salvar uma etapa no chmod de/www,/log e/backups usando a mkdir --mode=...
opção.
Por exemplo
mkdir -vp --mode=2750 /home/$uzer/public_html/$vhost
mkdir -vp --mode=2750 /home/$uzer/public_html/$vhost/www
mkdir -vp --mode=2750 /home/$uzer/public_html/$vhost/logs
mkdir -vp --mode=2750 /home/$uzer/public_html/$vhost/backups
Responder2
- Na verdade, não importa qual estrutura de pastas você está usando.
- Se você estiver usando
-R
a opção chown, isso afetará apenas os arquivos e diretórios que estão presentes no momento em que você está executando o comando. - Não, porque você sempre terá que usar
chmod
o comando para alterar a permissão se estiver fazendo alguma alteração manualmente. - Você pode pedir
/etc/sudoers
ao arquivo que permita que $user crie qualquer diretório commkdir
comando.