Permissões de configuração do Unix em uma pasta inteira

2

Esta é uma questão noob.

Eu estou em uma pasta chamada imagens - nenhuma delas aparece no meu site. Eu acredito que as permissões não estão definidas corretamente.

O que faço para defini-los corretamente para que eles sejam exibidos. Quais permeações eu dou, e como faço isso, eu navego um nível acima? Posso definir tudo de uma vez?

Obrigado.

    
por Ankur 11.08.2009 / 09:37

7 respostas

4

Eu recomendaria o comando find para definir permissões:

Para tornar todos os diretórios pesquisáveis e legíveis por todos por todos (consulte este link para permissões de diretório do Unix a>, as permissões têm significados diferentes dos arquivos):

sudo bash -c "find /var/www/root/images -type d -print0 | xargs -0 chmod oga+rx"

Para os arquivos:

sudo bash -c "find /var/www/root/images -type f -print0 | xargs -0 chmod oga+r"

E para garantir que nenhum membro do grupo possa escrever nada:

sudo bash -c "find /var/www/root/images -type f -print0 | xargs -0 chmod a-w"

A razão pela qual eu defini as permissões do proprietário, do grupo e de tudo é porque, mesmo que todos tenham permissão de leitura, se o proprietário não o fizer, o proprietário não poderá ler o arquivo.

Executar é permissão 'x' geralmente é referenciada como permissões de 'pesquisa' quando usada com diretórios. Você também precisará de permissão de pesquisa em todos os diretórios até a raiz, no link acima sobre permissões de diretório:

Search permission is required in many common situations. Consider the command "cat /home/user/foo". This command clearly requires read permission for the file foo. But unless you have search permission on /, /home, and /home/user directories, cat can't locate the inode of foo and thus can't read it! You need search permission on every ancestor directory to access the inode of any file (or directory), and you can't read a file unless you can get to its inode.

Então, no meu exemplo, você precisará da permissão de busca (+ x) em / var, / var / www, / var / www / root, etc também.

Não use um + rX , desculpe colocá-lo em uma postagem, mas eu preciso codificar as tags a não sei como usá-las em um comentário. O seguinte não afeta apenas os diretórios, pode afetar os arquivos também se um usuário já tiver permissão de execução.

 chmod -R a+rX images

Exemplo:

[kbrandt@kbrandt-opadmin: ~/scrap/X] touch XnotOnlyDirectories     
[kbrandt@kbrandt-opadmin: ~/scrap/X] ls -l                         
total 0
-rw-rw-r-- 1 kbrandt kbrandt 0 2009-08-11 06:29 XnotOnlyDirectories
[kbrandt@kbrandt-opadmin: ~/scrap/X] chmod u+x XnotOnlyDirectories
[kbrandt@kbrandt-opadmin: ~/scrap/X] ls -l                         
total 0
-rwxrw-r-- 1 kbrandt kbrandt 0 2009-08-11 06:29 XnotOnlyDirectories
[kbrandt@kbrandt-opadmin: ~/scrap/X] cd ..                         
[kbrandt@kbrandt-opadmin: ~/scrap] chmod -R a+rX X                 
[kbrandt@kbrandt-opadmin: ~/scrap] ls -l X                         
total 0
-rwxrwxr-x 1 kbrandt kbrandt 0 2009-08-11 06:29 XnotOnlyDirectories

Na página do manual chmod:

execute/search only if the file is a directory or already has execute permission for some user (X)

Quando se trata do Apache:
Não há nenhuma maneira certa definitiva que eu saiba, você pode usar as permissões que eu configurei e executar o Apache como o usuário nobody, ou você pode usar um grupo ou usuário para o apache, como 'apache' ou 'www-data'. Veja este link . Se seguir a rota de ninguém, certifique-se de que ninguém tenha o ID de usuário correto:

[kbrandt@kbrandt-opadmin: ~/scrap] id nobody                       
uid=65534(nobody) gid=65534(nogroup) groups=65534(nogroup)
    
por 11.08.2009 / 13:50
2

Use o seguinte comando

 chmod -R a+rX images

-R : faz com que o comando seja executado recursivamente, percorrendo todos os diretórios sob ele.

a + rX : torna os arquivos legíveis por todos e diretórios "editáveis" por todos. O X maiúsculo concede a permissão de execução somente aos diretórios, não aos arquivos regulares. ( editar : a menos que os arquivos já tenham permissão de execução para algum usuário)

images : nome da pasta, você pode fornecer um caminho completo como /home/user/public_html/images

A propósito, você não pode chown a menos que você seja root ( edit : ou o chown binário suid root)

    
por 11.08.2009 / 11:08
1

use o comando chmod com o parâmetro -R para executar a ação recursivamente. comando chmod man irá mostrar-lhe a ajuda.

    
por 11.08.2009 / 09:43
1

Não se esqueça de incluir os arquivos na conta / grupo do proprietário do website correto. Se você copiou usando conta root, por exemplo, o servidor provavelmente não terá acesso aos arquivos. Configure a permissão do arquivo de imagem para 644 usando chmod.

Use -R te recursórios subdiretórios.

    
por 11.08.2009 / 09:48
1

(vou tentar explicar o porquê, não apenas como)

Você tem dois problemas para lidar: propriedade e permissões.

Existem dois tipos de propriedade: usuário e grupo. Uma boa administração da web deixa o servidor web de propriedade de "nobody" (ou equivalente) e os arquivos que ele exibe são de propriedade do administrador da web. A propriedade do grupo e o grupo de administração da web, se houver mais de uma pessoa, ou apenas o grupo padrão do usuário administrador da web.

Existem três tipos de permissões: usuário, grupo e mundo. Cada RWX no comando ls -l concede as permissões de leitura, gravação e execução do usuário primeiro, em seguida, grupo e, em seguida, mundo.

Se você estiver exibindo fotos para todos e para todos, configure o acesso mundial de leitura ao diretório de imagens e as próprias imagens resolverão seu problema sem se preocupar com a propriedade. Se as imagens estiverem restritas apenas a membros logados, o mundo r / w / x deve ser desativado (aparecer como --- em ls -l )

No mínimo, o usuário administrador da web deve ter acesso de leitura / gravação às imagens ou rwx. (Há exceções para sites gerenciados bloqueados, mas tenho a sensação de que esse não é o caso aqui).

Quando você terminar, suas permissões de propriedade devem ficar assim:

chmod 774 *.jpg
rwxrwxr--   webadmin  webgroup   # Allow web admin and group to modify, everyone to view


chmod 744 *.jpg
rwxr--r--   webadmin  webgroup   # Allow only web admin to modify, everyone to view

chmod 740 *.jpg
rwxr-----   webadmin  webgroup   # Allow only web admin to modify, only him and webgroup to view, this means web server must be in webgroup.

chmod 740 *.jpg
chgrp nobody *.jpg
rwxr-----   webadmin nobody      # If apache user is nobody/nobody, this is better
    
por 11.08.2009 / 14:14
0

Você pode querer chown chown em vez de chmod. Chown == C hange OWN ership que deve ser usado e arquivos com permissões do usuário que está servindo o serviço. O httpd geralmente roda sob www-data ou link usuário e grupo na maioria das distribuições linux modernas.

    
por 11.08.2009 / 09:52
0

Você não menciona se está adicionando arquivos regularmente a essa pasta.

Descobri que, se uma pasta é regularmente adicionada, a configuração do grupo sticky bit na pasta corrige as coisas sem pensar.

Por exemplo, ter a propriedade de grupo configurada como o grupo de servidores da Web e permissões de leitura / colagem de grupo na pasta significa que os novos arquivos serão definidos para esse grupo e legíveis. Se houver uma equipe gerenciando a pasta, a gravação em grupo também ajuda.

Nem sempre funciona ao mover arquivos para uma pasta.

    
por 11.08.2009 / 10:41