O uso de chmod
é para alterar permissões, o comando chown
é para alterar a propriedade dos arquivos & diretórios.
propriedade
Para alterar a propriedade de um diretório, você pode usar o seguinte comando:
$ sudo chown -R me /srv/www/htdocs
OBSERVAÇÃO: estamos usando o recurso sudo
para elevar nossos privilégios para o mesmo nível que o root para esses comandos, sem precisar se tornar root.
permissões
Para alterar as permissões neste diretório:
$ sudo chmod -R 777 /srv/www/htdocs
umask
Usar o comando umask
configura seu terminal para que, quando arquivos & diretórios são criados suas permissões podem ser influenciadas um pouco. Cuidado deve ser usado ao usar umask
, pois há situações em que ele não lhe dará as permissões exatamente da maneira que você pensa.
Para um diretório, parece bem:
$ for i in 'seq 1 7';do echo "umask: 00$i"; umask 00$i; rm -fr blah; mkdir blah;ls -l|grep blah;done
umask: 001
drwxrwxrw- 2 saml saml 4096 Jul 29 14:39 blah
umask: 002
drwxrwxr-x 2 saml saml 4096 Jul 29 14:39 blah
umask: 003
drwxrwxr-- 2 saml saml 4096 Jul 29 14:39 blah
umask: 004
drwxrwx-wx 2 saml saml 4096 Jul 29 14:39 blah
umask: 005
drwxrwx-w- 2 saml saml 4096 Jul 29 14:39 blah
umask: 006
drwxrwx--x 2 saml saml 4096 Jul 29 14:39 blah
umask: 007
drwxrwx--- 2 saml saml 4096 Jul 29 14:39 blah
No entanto, ele não permite que você tenha arquivos exatamente da maneira que você pretende que sejam com determinados membros. Veja umask 006
, por exemplo, abaixo:
$ for i in 'seq 1 7';do echo "umask: 00$i"; umask 00$i; rm -fr blah; touch blah;ls -l|grep blah;done
umask: 001
-rw-rw-rw- 1 saml saml 0 Jul 29 14:40 blah
umask: 002
-rw-rw-r-- 1 saml saml 0 Jul 29 14:40 blah
umask: 003
-rw-rw-r-- 1 saml saml 0 Jul 29 14:40 blah
umask: 004
-rw-rw--w- 1 saml saml 0 Jul 29 14:40 blah
umask: 005
-rw-rw--w- 1 saml saml 0 Jul 29 14:40 blah
umask: 006
-rw-rw---- 1 saml saml 0 Jul 29 14:40 blah
umask: 007
-rw-rw---- 1 saml saml 0 Jul 29 14:40 blah
Existem outros, isso é só para destacar um exemplo!
Então o que você deve fazer?
Dado que você está lidando com um diretório Apache (baseado no caminho /srv/www/htdocs
) eu procuraria por um grupo Unix que seu usuário me
e o usuário que o Apache está executando como ambos são membros. Você pode usar o comando groups
para determinar isso:
$ groups saml
saml : saml vboxusers jupiter newgrp
$ groups apache
apache : apache
Você também pode usar o comando id
:
$ id saml
uid=500(saml) gid=501(saml) groups=501(saml),502(vboxusers),503(jupiter),10000(newgrp)
$ id apache
uid=48(apache) gid=48(apache) groups=48(apache)
No meu sistema, o Apache é executado por um usuário apache
. Olhando para este usuário, você pode ver que ele está em um único grupo apache
também. Então, uma abordagem seria adicionar o usuário me
a esse grupo.
Por exemplo, adicione me
aos apache
groups:
$ sudo usermod -a -G apache me
A outra abordagem seria criar outro grupo e adicionar apache
e me
a esse grupo secundário (por exemplo, apacheplus) e, em seguida, executar este comando em /srv/www/htdocs
:
$ sudo chgrp -R apacheplus /srv/www/htdocs