Esclarecer permissões de arquivo

4

Eu tenho procurado informações sobre permissões de arquivos / diretórios, e continuo encontrando os mesmos princípios básicos. O que não consigo encontrar em qualquer lugar é uma justificativa para determinar quais permissões dar ao Proprietário, Grupo e Outros. Exatamente quem / o que cai em cada uma dessas classes? Quais são as implicações de dar / não conceder certas permissões a qualquer um deles? Estou preocupado em garantir que tudo funcione corretamente sem comprometer a segurança.

Por exemplo, estou desenvolvendo um site pequeno em um host compartilhado (Linux) e seria a única pessoa envolvida no desenvolvimento / manutenção dele. Não há nada para os telespectadores baixarem, mas os membros podem enviar imagens através da API picmonkey.com (que um script php finaliza com move_uploaded_file). Os arquivos do site são todos .php, .css, .js, .html, .jpg e .gif (embora existam arquivos .eot, .svg, .ttf e .woff associados a uma fonte). Todos os diretórios e arquivos têm o nome de usuário do site como Proprietário e "inetuser" como Grupo.

Algumas das perguntas que tenho na minha cabeça são:

  • Quando eu faço login com o WS_FTP, sou proprietário?
  • Um navegador da web é outro?
  • Os scripts PHP caem em uma dessas classes?
  • Quais permissões cada tipo de arquivo / diretório precisa sob essas circunstâncias?
  • Existe uma diferença entre ler e executar em um arquivo .php?
  • Como não tenho ideia de quem é "inetuser", estaria correto em não dando ao Group alguma permissão? E se esse não fosse o caso (por exemplo, o nome de usuário do site também foi usado para o Grupo - que está no meu dev. site em um host diferente)?

Eu ficaria grato por qualquer insight que alguém pudesse me dar, assim como por quaisquer artigos ou livros recomendados que responderiam a esse tipo de pergunta.

    
por gr8dane 29.08.2012 / 06:00

3 respostas

4

Você parece entender o conceito de permissões, mas acho que está se envolvendo com usuário / grupo / outro e o que isso significa em vários contextos.

Resumidamente,

  • Um usuário é uma conta POSIX individual
  • Um grupo é um agrupamento lógico de várias contas POSIX

Um arquivo no disco tem dois proprietários. O proprietário user e o proprietário group . Para qualquer arquivo em particular, other é qualquer conta de usuário que não corresponda à user nem seja membro da group . Em outras palavras, other é qualquer usuário que não seja o proprietário do usuário e não é um membro do proprietário do grupo.

Além disso, cada processo é executado sob um ID de usuário específico (ou UID) e é membro de um ou mais IDs de grupo (GID). Use o comando ps -ef (no Linux e Solaris, ou ps -ej no OS X ou * BSD) para ver o usuário executando cada processo. Você verá que o apache e o ws_ftp também estão sendo executados pelos usuários.

Quando um processo tenta acessar um arquivo no disco, ocorre o seguinte:

  • Se o UID do processo corresponder ao proprietário user do arquivo, as permissões user serão aplicadas.
  • Senão, se qualquer GID s do processo corresponder ao proprietário group do arquivo, as permissões group serão aplicadas.
  • Outras permissões de other são aplicadas.

Para responder às suas perguntas especificamente:

When I log in with WS_FTP, am I Owner?

Tecnicamente sim, porque há sempre um proprietário, mas depende da sua definição de "I" .

Se você estiver efetuando login como um usuário POSIX real no sistema, os arquivos criados / acessados serão como o usuário com o qual você efetuou login. Se você registrou anonimamente, os arquivos criados / acessados serão os do UID do WS FTP . Isso provavelmente será ftp ou nobody .

Is a web browser an Other?

O navegador da Web não é nada porque não está sendo executado no servidor. Mas o navegador acessa um servidor da web . O servidor da web está sendo executado como um usuário específico (assim como o WS_FTP é). Esse usuário provavelmente é www-data , apache ou nobody .

Do the PHP scripts themselves fall into one of these classes?

Os scripts PHP são executados pelo módulo do mecanismo de script do servidor da web. Eles serão executados como o mesmo usuário executando o servidor da Web.

Is there a difference between read and execute on a .php file?

Sim. Ler significa que o usuário pode ler o conteúdo do arquivo. Executar significa que o conteúdo pode ser executado como um processo completo.

Como os scripts PHP são executados dentro do mecanismo de script do servidor da Web (isto é, eles fazem parte do espaço de memória e do encadeamento de execução do servidor), eles não precisam ser definidos como executáveis.

Since I have no idea who "inetuser" is, would I be correct in not giving Group any permissions? What if this was not the case (i.e., the site's username was also used for Group - which it is on my dev site on a different host)?

inetuser é uma conta de usuário no sistema, assim como sua conta. Também pode ser um grupo. Espero que você possa responder a essa pergunta depois de ler isto.

What permissions does each kind of file/dir need under these circumstances?

Geralmente, você deseja que os arquivos de dados sejam possuídos por contas de usuário que são usadas por pessoas reais (por exemplo, você). Em outras palavras, o seu conteúdo da web não deve ser de propriedade do usuário do apache .

  • As permissões de usuário devem ser quase sempre rw - para arquivos de dados ou rwx para diretórios e programas.
  • As permissões de grupo geralmente devem ser r-- para arquivos de dados ou r-x para diretórios e programas. Se você quiser que os membros desse grupo possam gravar nesses arquivos, ele deverá ser rw- e rwx.
  • Outras permissões devem ser quase sempre r - para arquivos de dados e rx para diretórios e programas ou --- se você quiser negar todo o acesso.
por 29.08.2012 / 23:15
2

OK, vamos colocar um pouco de luz sobre as noções básicas de permissões de arquivo e, em seguida, passaremos para o seu caso específico.

Permissões

As permissões básicas do arquivo são:

  1. r ead - permite ler o conteúdo de um arquivo.
  2. w rite - permite gravar no arquivo.
  3. e x ecute - permite executar um arquivo ou um script.

No caso de diretórios , os nomes são os mesmos, mas têm um significado ligeiramente diferente:

  1. r - permite ler os nomes dos arquivos no diretório, mas nada mais.
  2. w - permite criar um arquivo no diretório ou gravar em um arquivo que já existe.
  3. x - permite ler o conteúdo de um arquivo específico no diretório, mas não permite listar os arquivos nele (você precisa de permissões de leitura para fazer isso). Também permite alterar (cd) para este diretório.

Usuários, grupos e outros

Cada arquivo e diretório tem o atributo de um proprietário e um grupo. Você pode verificá-los chamando o comando ls -l ou observando indicadores em um software como o cliente FTP. Vamos ver um exemplo:

-rwxr-xr-- 1 jdoe zeppelins  0 08-29 21:50 example_file

Aqui você tem um arquivo chamado example_file , que foi criado às 21:50 de 29-08 e tem comprimento de 0 bytes. Seu proprietário é um usuário com o nome username e pertence a um grupo zeppelins .

Agora vamos ver as permissões de arquivo -rwxr-xr-- .

  • O primeiro caractere indica um tipo de arquivo - único traço - significa que é um arquivo regular (não um link ou um diretório).
  • A tríade seguinte rwx indica que o usuário jdoe pode ler, gravar e executar este arquivo.
  • Seguir r-x significa que todos os membros do grupo zeppelins podem ler e executar, mas não modificar este arquivo
  • Por último, r-- indica que os usuários que não são jdoe e não pertencem ao grupo zeppelins só podem ler este arquivo.

Agora, voltemos ao seu caso

  1. Quando você faz o login via WS_FTP, você é identificado como um usuário com o nome de usuário que você forneceu no login. Você pode ser o proprietário de alguns arquivos, mas não precisa (pode haver arquivos que tenham outro proprietário especificado).

  2. O navegador da Web não acessa os arquivos. O que os acessa é o servidor da web, que lê o arquivo e, em seguida, alimenta seu navegador com seu conteúdo. O servidor Web pode ser executado em nomes como apache httpd ou similar, mas se você estiver usando uma hospedagem, ele também pode se identificar como inetuser . Se não for o caso, ele acessa o arquivo como outro usuário

  3. .
  4. Os scripts PHP devem ser legíveis e graváveis pela pessoa que os modifica (provavelmente o proprietário) e legível mas não é gravável pelo servidor da Web.

  5. Para um script PHP simples editado por jdoe , supondo que o servidor da Web seja executado em webserver name, as permissões apropriadas seriam -rwxr----- . Em alguns casos, também pode ser necessário ser lido por alguns outros usuários - neste caso -rwxr--r-- pode ser mais apropriado.

  6. Para um arquivo PHP, permissões de leitura são suficientes.

  7. A melhor ideia seria fazer um teste rápido - remover todas as permissões do grupo para um arquivo específico e verificar se você ainda pode acessá-lo. Minha aposta é que inetuser é um alias para o servidor da Web e, portanto, seus arquivos devem ter acesso de leitura para esse grupo.

  8. Para fazer upload de arquivos, você deve criar um diretório separado, sem direitos de leitura ou execução, mas com acesso de gravação.

por 29.08.2012 / 22:14
1

As permissões no Linux não funcionam de acordo com o software em uso, como às vezes acontece no Windows (os serviços se instalam com permissões específicas). No Linux, o programa que tenta ler / executar arquivos / diretórios está sendo executado como um usuário específico, que pode ser diferente em um ambiente compartilhado.

Sobre os scripts, o usuário com o qual o servidor da Web deve executar deve ter permissões de execução, caso contrário, o usuário final verá o script e não o executará.

Alguns servidores web são executados com o usuário www-data, mas como este é um ambiente compartilhado, as chances são de que isso é diferente no seu caso e você deve entrar em contato com o seu provedor para verificar.

Se você sabe qual servidor http está sendo executado e tem acesso ao shell, pode executar:

ps -ef | grep <server>

Na primeira coluna você deve ver o usuário no qual o servidor está sendo executado, pode ser o mesmo usuário com o qual você está efetuando login.

Lembre-se de que, em um servidor compartilhado, pode haver mais de um servidor sendo executado ao mesmo tempo e você terá que descobrir qual deles é seu.

O cliente de FTP que você está usando não afeta as permissões, depende do usuário com o qual você está logado, mas isso pode ser diferente do seu nome de usuário de login.

Um navegador da Web não é uma entidade neste cenário, apenas o servidor da Web é, e como mencionei antes, ele está sendo executado usando seu próprio usuário.

Como regra geral, para áreas públicas do seu site eu daria permissões de execução para usuário, grupo e outros em scripts e diretórios e permissões de leitura em outros arquivos.

Se você tiver um diretório para o qual o servidor da Web deve permitir a criação de novos arquivos, o diretório deve pertencer ao usuário no qual o servidor está sendo executado ou com acesso de gravação a todos e ao diretório sticky bit (t). / p>     

por 29.08.2012 / 10:11