Como posso alterar recursivamente as permissões de arquivos e diretórios?

65

Eu tenho o ubuntu instalado no meu computador local com apache / php / mysql.

Agora tenho um diretório em / var / www - no qual tenho vários dos meus projetos em andamento. Também trabalho com código aberto (drupal, magento, sugarcrm).

O problema que estou enfrentando é alterar a permissão de arquivo com o terminal. Em algum momento, preciso alterar a permissão de uma pasta inteira e de suas subpastas e arquivos subsequentes. Eu tenho que mudar individualmente usando

sudo chmod 777 foldername

Como posso fazer isso recursivamente.

Também por que eu sempre faço isso 777 , tentei 755 para pastas e 644 para arquivos, mas isso não funcionará.

Nikhil
fonte

Respostas:

90

Basta adicionar a -Ropção de alterar recursivamente as permissões dos arquivos. Um exemplo, adicione recursivamente permissões de leitura e gravação para o proprietário e o grupo em foldername:

chmod -R ug+rw foldername

As permissões serão como 664 ou 775.

Definir as permissões para 777 é altamente desencorajado . Você obtém erros no Apache ou no seu editor em relação às permissões porque o apache é executado sob um usuário diferente ( www-data) que você.

Se você deseja gravar /var/www, adicione-se ao www-datagrupo e defina as permissões umask + de acordo.

  • Adicione-se ao www-datagrupo:sudo adduser $USER www-data
  • Altere a propriedade dos arquivos em /var/www:sudo chown -R www-data:www-data /var/www
  • Altere o umask, para que os arquivos recém-criados pelo Apache também concedam permissões de gravação ao grupo. Adicionar umask 007a /etc/apache2/envvars.
  • Conceder a si mesmo (tecnicamente, o grupo www-data) escrever permissões: sudo chmod -R g+w /var/www.
Lekensteyn
fonte
Sim, eu estava adicionando r flag no lugar errado, e depois do o + w para chmod.
31914 JohnMerlino
Além disso, se você tentar usar chmod -r blablabla(pequeno -r vez de -R) Você pode acabar removendo permissões de leitura para todos ...
Cyril Duchon-Doris
11
Após estas instruções, é uma boa ideia verificar se não há .htaccessarquivos com permissões de gravação para o apache. find /var/www/ | grep .htaccess | xargs ls -l.
Reynoldsnlp
23

força bruta:

sudo find foldername -exec chmod a+rwx {} ";"

O que não funciona? Seja mais específico!

sudo find foldername -type d -exec chmod 755 {} ";"
sudo find foldername -type f -exec chmod 644 {} ";"
Usuário desconhecido
fonte
quando estiver dentro da pasta, remova "foldername"
Enrique
4
... e substitua-o por.
djjeck
4

Você não precisa do 777 para nada. Na pior das hipóteses, você precisará alterar o proprietário de determinados arquivos e diretórios para o usuário "www-data".

sudo find /var/www -type d -print0 | xargs -0 chmod 755
sudo find /var/www -type f -print0 | xargs -0 chmod 644
sudo find /var/www/some/subset -print0 | xargs -0 chown www-data:www-data

Se você estiver usando o método de associação ao grupo de Lekensteyn, altere 755 para 775 e 644 para 664, respectivamente acima, e force a aderência do grupo:

sudo find /var/www/some/subset -type d -print0 | xargs -0 chmod g+s
Kees Cook
fonte
3

Você pode alterar as subpastas e arquivos no Nautilus. Como você pode ver na imagem abaixo. Para ter permissões nos botões, você pode ativar a opção no Ubuntu Tweak.

insira a descrição da imagem aqui

Alfredo Hernández
fonte
Use LANG=C [command]para obter traduções para o inglês.
Lekensteyn
1

Se você deseja que todos os seus arquivos sejam legíveis para o mundo (ou seja, é apenas um conjunto estático de arquivos / imagens HTML), use este comando:

chmod -R a+r <base directory>

Isso percorrerá recursivamente todos os arquivos e subdiretórios e adicionará permissão de leitura a eles.

AVISO : Não faça isso para arquivos executáveis! Somente arquivos que devem ser visíveis por todos.

Ryan Shillington
fonte
Você está dizendo "não faça chmod -R a+xnada" ou "não faça chmod -R a+rexecutáveis"?
Aleclarson
Eu consertei isso. O posterior é verdade. Tenha cuidado ao permitir que outras pessoas acessem os executáveis ​​que você criou.
Ryan Shillington