{"id":42,"date":"2010-05-26T18:35:00","date_gmt":"2010-05-26T18:35:00","guid":{"rendered":"http:\/\/artigos.marcomapa.com\/?p=42"},"modified":"2011-09-11T19:31:24","modified_gmt":"2011-09-11T19:31:24","slug":"permissoes-no-linux","status":"publish","type":"post","link":"https:\/\/marcomapa.com\/artigos\/permissoes-no-linux\/","title":{"rendered":"Permiss\u00f5es no Linux"},"content":{"rendered":"<p>O Linux nasceu como um sistema multiusu\u00e1rio, mantendo a tradi\u00e7\u00e3o dos sistemas Unix. Ele oferece um sistema de permiss\u00f5es bastante simples, por\u00e9m ao mesmo tempo bastante efetivo, atendendo tanto a desktops dom\u00e9sticos, usados por apenas duas ou tr\u00eas pessoas, quanto servidores com centenas de usu\u00e1rios.<\/p>\n<p>No Linux, o root \u00e9 o \u00fanico que tem acesso a todos os arquivos e configura\u00e7\u00f5es do sistema. Os usu\u00e1rios normais t\u00eam, por padr\u00e3o, acesso apenas a seus arquivos dentro do diret\u00f3rio \/home e alguns outros arquivos espec\u00edficos. Em um desktop, a id\u00e9ia b\u00e1sica \u00e9 que voc\u00ea use um login normal de usu\u00e1rio para rodar programas e executar as tarefas do dia-a-dia e logue-se como root quando precisar instalar programas ou alterar a configura\u00e7\u00e3o do sistema.<\/p>\n<p>Todos os programas salvam suas configura\u00e7\u00f5es dentro de pastas ocultas, dentro do diret\u00f3rio home, como a \".gnome2\", que armazena a maior parte das configura\u00e7\u00f5es relacionadas ao Gnome e a \".kde\", que guarda as configura\u00e7\u00f5es do KDE e dos aplicativos baseados nele. Cada usu\u00e1rio tem suas pr\u00f3prias pastas de configura\u00e7\u00e3o e pode alterar apenas seus pr\u00f3prios arquivos, o que evita confus\u00e3o em PCs ou servidores compartilhados entre v\u00e1rios usu\u00e1rios. O m\u00e1ximo que poderia acontecer seria um usu\u00e1rio deletar seus pr\u00f3prios arquivos, ou bagun\u00e7ar suas pr\u00f3prias configura\u00e7\u00f5es.<\/p>\n<p>Em qualquer distribui\u00e7\u00e3o, voc\u00ea pode se logar como root usando o comando \"su\" no terminal, fornecendo a senha de root. De uma forma geral, recomenda-se us\u00e1-lo com o par\u00e2metro \"-\", que atualiza as vari\u00e1veis de ambiente:<\/p>\n<p>$ su -<\/p>\n<p>O s\u00edmbolo do terminal muda de um \"$\" para um \"#\", indicando que a partir da\u00ed, todos os comandos digitados nesse terminal espec\u00edfico ser\u00e3o executados como root.<\/p>\n<p>Um problema comum \u00e9 que voc\u00ea n\u00e3o consiga rodar aplicativos gr\u00e1ficos depois de logado como root, recebendo um \"konqueror: cannot connect to X server \" ou um \"Error: no display specified \". Isso acontece por que, na maioria das distribui\u00e7\u00f5es, as permiss\u00f5es do X n\u00e3o s\u00e3o atualizadas, fazendo com que, por paradoxal que possa parecer, o root n\u00e3o tenha permiss\u00e3o para usar o ambiente gr\u00e1fico. Isso acaba sendo um grande empecilho, j\u00e1 que voc\u00ea n\u00e3o pode usar editores de texto como o gedit ou o kwrite para editar arquivos de configura\u00e7\u00e3o, por exemplo.<\/p>\n<p>A&nbsp;solu\u00e7\u00e3o mais simples \u00e9 instalar o pacote \"sux\" e passar a usar o comando no lugar do su. O \"sux\" atualiza as permiss\u00f5es do ambiente gr\u00e1fico, solucionando o problema. Basta passar a us\u00e1-lo no lugar do \"su\" quando quiser rodar aplicativos gr\u00e1ficos:<\/p>\n<p>$ sux<\/p>\n<p>Outra op\u00e7\u00e3o \u00e9 rodar os programas gr\u00e1ficos usando o \"gksu\" (no Gnome) ou o \"kdesu\" (no KDE), seguidos do comando desejado, como em:<\/p>\n<p>$ gksu gedit <\/p>\n<p>ou:<\/p>\n<p>$ kdesu konqueror \/etc<\/p>\n<p>Assim como no caso do sux, eles ajustam as permiss\u00f5es do X automaticamente. Uma forma pr\u00e1tica de us\u00e1-los \u00e9 rodar os comandos usando o Alt+F2.<\/p>\n<p>As distribui\u00e7\u00f5es atuais t\u00eam cada vez mais adotado o uso do \"sudo\", como uma forma de facilitar o uso do sistema, permitindo que voc\u00ea execute aplicativos como root quando precisar.<\/p>\n<p>Muita gente associa o uso do sudo ao Ubuntu, mas ele na verdade come\u00e7ou a ser usado em larga escala um pouco antes, no Knoppix e em outros live-CDs baseados nele, como o Kurumin. No caso dos live-CDs, o sudo \u00e9 usado como um facilitador, para permitir que o sistema permita a execu\u00e7\u00e3o de comandos como root sem que seja preciso definir uma senha default para o root. Quando voc\u00ea precisa abrir uma janela do gerenciador de arquivos como root, para recuperar arquivos dentro de uma parti\u00e7\u00e3o do HD, por exemplo, voc\u00ea precisa apenas cham\u00e1-lo colocando um sudo antes do comando, como em:<\/p>\n<p>$ sudo konqueror \/mnt\/sda2<\/p>\n<p>O sudo pode ser usado at\u00e9 mesmo para alterar a senha de root, permitindo que voc\u00ea defina uma senha para o live-CD, mesmo sem saber a senha anterior:<\/p>\n<p>$ sudo passwd<\/p>\n<p>O Ubuntu (depois de instalado) usa uma abordagem mais conservadora, confirmando sua senha de usu\u00e1rio antes de executar o comando. Essa \u00e9 uma precau\u00e7\u00e3o b\u00e1sica de seguran\u00e7a, que evita que algu\u00e9m possa alterar a senha de root e assumir o controle do seu PC enquanto voc\u00ea estiver tomando um cafezinho, por exemplo.<\/p>\n<p>Em qualquer um dos casos, a configura\u00e7\u00e3o do sudo vai no arquivo \"\/etc\/sudoers\", onde s\u00e3o especificados os usu\u00e1rios que poder\u00e3o usar o sudo. No Ubuntu, por exemplo, \u00e9 usada a seguinte configura\u00e7\u00e3o:<\/p>\n<p>%admin ALL=(ALL) ALL<\/p>\n<p>O \"%admin\" indica que a regra n\u00e3o se aplica a um usu\u00e1rio espec\u00edfico, mas sim a todos os usu\u00e1rios que fazem parte do grupo \"admin\". Por default, apenas o usu\u00e1rio criado durante a instala\u00e7\u00e3o faz parte do grupo e apenas ele poe usar o sudo, mas voc\u00ea pode criar outros usu\u00e1rios administrativos posteriormente simplesmente adicionando-os ao grupo, como em:<\/p>\n<p># addgroup gdh admin<\/p>\n<p>Devido ao \"ALL=(ALL) ALL \", o sistema permite que o sudo seja usado para executar qualquer comando (com algumas poucas exce\u00e7\u00f5es) mas apenas depois de confirmada a senha do usu\u00e1rio.<\/p>\n<p>Para poder executar comandos sem precisar confirmar a senha (como ao rodar usando o live-CD), voc\u00ea precisaria apenas alterar a linha, substituindo o \"(ALL)\" por um \"NOPASSWD:\", como em:<\/p>\n<p>%admin ALL=NOPASSWD: ALL<\/p>\n<p>No caso do Ubuntu, o arquivo vem com uma linha \"%sudo ALL=NOPASSWD: ALL\" comentada, que tem um efeito semelhante, permitindo que os usu\u00e1rios inclu\u00eddos no grupo \"sudo\" possam usar o sudo sem senha.<\/p>\n<p>Por ser um arquivo essencial dentro do sistema de permiss\u00f5es do sistema, o \"\/etc\/sudoers\" \u00e9 um arquivo extremamente sens\u00edvel. Qualquer erro dentro da configura\u00e7\u00e3o, ou qualquer altera\u00e7\u00e3o nas permiss\u00f5es do arquivo (que devem ser, obrigatoriamente, \"0440\") fazem com que o sudo deixe de funcionar, bloqueando parcialmente o sistema at\u00e9 que o problema seja resolvido.<\/p>\n<p>\u00c9&nbsp;por isso que \u00e9 recomendado que voc\u00ea edite o arquivo usando o comando \"visudo\", que n\u00e3o permite que voc\u00ea salve o arquivo caso existam erros na configura\u00e7\u00e3o. O grande problema \u00e9 que ele \u00e9 complicado de usar, o que faz com que muitos dispensem o conselho e usem outros editores de texto. N\u00e3o existe nada de errado nisso, desde que voc\u00ea cheque e recheque a configura\u00e7\u00e3o antes de salvar.<\/p>\n<p>Outra dica \u00e9 que voc\u00ea sempre destrave a conta de root usando o \"sudo passwd\" antes de tentar editar o arquivo. Isso garante que voc\u00ea continue conseguindo se logar como root no sistema caso o sudo fique travado por um erro na configura\u00e7\u00e3o do arquivo.<\/p>\n<p>Em seguida, temos a quest\u00e3o das permiss\u00f5es. Clicando sobre as propriedades de qualquer pasta ou arquivos dentro do gerenciador de arquivos, voc\u00ea encontra um menu com o ajuste de permiss\u00f5es, onde pode ajustar individualmente as permiss\u00f5es para o dono do arquivo, para usu\u00e1rios que fa\u00e7am parte do mesmo grupo e para os outros, que inclui todos os demais usu\u00e1rios com acesso ao sistema:<\/p>\n<p>Cada um dos campos aceita tr\u00eas possibilidades: \"Nenhum\", \"Apenas leitura\" e \"Leitura e escrita\". Por default, o dono \u00e9 o \u00fanico que pode ler e escrever, os demais (grupo e outros) podem apenas ler o arquivo, sem modific\u00e1-lo.<\/p>\n<p>No caso dos arquivos, existe uma quarta permiss\u00e3o que \u00e9 o campo \"Permitir execu\u00e7\u00e3o do arquivo como um programa\". Esta \u00e9 uma daquelas diferen\u00e7as fundamentais entre o Linux e o Windows: o sistema n\u00e3o decide quais arquivos s\u00e3o programas pela extens\u00e3o, mas sim pelas permiss\u00f5es. Isso aumenta bastante a seguran\u00e7a do sistema, mas, por outro lado, causa um pouco de dor de cabe\u00e7a em algumas situa\u00e7\u00f5es. Sempre que voc\u00ea baixar um instalador qualquer via web (o driver da nVidia, por exemplo), vai precisar primeiro ativar a permiss\u00e3o de execu\u00e7\u00e3o nas propriedades do arquivo antes de conseguir instal\u00e1-lo.<\/p>\n<p>O \"dono\" do arquivo \u00e9 por default o usu\u00e1rio que criou o arquivo. Apenas este usu\u00e1rio pode alterar as permiss\u00f5es de acesso ao arquivo e pasta. Em seguida vem a configura\u00e7\u00e3o do grupo, que permite que v\u00e1rios usu\u00e1rios tenham acesso a um arquivo ou pasta, sem ter que apelar para o campo \"outros\" que daria acesso a qualquer um.<\/p>\n<p>Nesse caso, voc\u00ea criaria um novo grupo, adicionaria a ele os usu\u00e1rios que devem ter acesso e em seguida alteraria as permiss\u00f5es de acesso, de forma que o grupo passasse a ser dono da pasta e os integrantes pudessem ter e alterar os arquivos.<\/p>\n<p>Voc\u00ea pode criar novos grupos e adicionar usu\u00e1rios a eles atrav\u00e9s do \"users-admin\" (\"Sistema &gt; Administra\u00e7\u00e3o &gt; Usu\u00e1rios e Grupos\", nas distribui\u00e7\u00f5es derivadas do Gnome), ou usando outra ferramenta gr\u00e1fica inclu\u00edda na distribui\u00e7\u00e3o, como o UserDrake, dispon\u00edvel no Mandriva ou o Kuser.<\/p>\n<p>Para criar um novo grupo, clique em \"Gerenciar Grupo &gt; Adicionar Grupo\". Na janela que ser\u00e1 aberta, especifique o nome do grupo e os usu\u00e1rios que far\u00e3o parte dele. Um mesmo usu\u00e1rio pode fazer parte de v\u00e1rios grupos simultaneamente. Muita gente cria um grupo diferente para cada pasta importante, de forma a poder definir individualmente quem ter\u00e1 acesso a ela.<\/p>\n<p>Voc\u00ea notar\u00e1 que nesta tela aparecem v\u00e1rios usu\u00e1rios que n\u00e3o s\u00e3o mostrados na tela principal, como o \"bin\", \"daemon\" e \"mail\". Estes s\u00e3o usu\u00e1rios ocultos do sistema, contas sem privil\u00e9gios e que n\u00e3o possuem senhas definidas (\u00e9 simplesmente imposs\u00edvel fazer login com qualquer uma delas), que s\u00e3o usadas para isolar os programas, fazendo com que cada um tenha acesso apenas a seus pr\u00f3prios arquivos. Isso limita muito os danos que um programa ou servidor com bugs ou falhas de seguran\u00e7a pode causar quando alguma coisa d\u00e1 errado.<\/p>\n<p>De fato, a configura\u00e7\u00e3o default da maior parte das distribui\u00e7\u00f5es Linux atuais \u00e9 dar acesso de leitura para a maioria das pastas (com exce\u00e7\u00e3o, naturalmente, dos arquivos de senha e outros arquivos cr\u00edticos do sistema) para todos os usu\u00e1rios, mas ao mesmo tempo dar acesso de grava\u00e7\u00e3o apenas para o diret\u00f3rio home de cada um.<\/p>\n<p>Por default, o \u00fanico que pode alterar o dono das pastas \u00e9 o pr\u00f3prio root (os usu\u00e1rios podem alterar apenas o grupo e ainda assim apenas entre os grupos de que fazem parte). Um dos motivos para isso \u00e9 o suporte a quotas, que (embora n\u00e3o seja muito usado em desktops) est\u00e1 dispon\u00edvel em qualquer distribui\u00e7\u00e3o Linux. Se qualquer usu\u00e1rio pudesse alterar a posse dos arquivos, transferindo-os para outros usu\u00e1rios, o sistema de quotas seria muito f\u00e1cil de burlar.<\/p>\n<p>A&nbsp;forma mais simples de alterar os donos e grupos dos arquivos e pastas \u00e9 simplesmente abrir uma janela do gerenciador de arquivos como root, como em:<\/p>\n<p>$ gksu nautilus<\/p>\n<p>Diferente do que temos ao rodar o gerenciador como usu\u00e1rio, ao acessar as propriedades dos arquivos como root os campos do dono e do grupo ficam desbloqueados, permitindo que voc\u00ea ajuste as permiss\u00f5es livremente.<\/p>\n<p>Como de praxe, voc\u00ea pode tamb\u00e9m ajustar as permiss\u00f5es via linha de comando, usando os comandos \"chmod\" e \"chown\". O primeiro permite ajustar as permiss\u00f5es dos arquivos e pastas, enquanto o segundo permite transferir a posse, dizendo a qual usu\u00e1rio e a qual grupo determinada pasta ou arquivo pertence.<\/p>\n<p>Um exemplo comum \u00e9 quando voc\u00ea cria ou copia uma pasta como root e devido a isso fica sem poder modificar os arquivos usando seu login de usu\u00e1rio. Uma maneira simples de resolver o problema seria usar o comando \"chown\" (como root) para transferir a posse da pasta, como em:<\/p>\n<p># chown -R gdh \/home\/gdh\/arquivos\/<\/p>\n<p>O \"-R\" no comando faz com que ele seja recursivo, ou seja, altere as permiss\u00f5es n\u00e3o apenas da pasta, mas de todo o conte\u00fado. Sem ele, voc\u00ea passaria a conseguir escrever dentro da pasta, mas ainda continuaria sem acesso \u00e0s subpastas dentro dela. Em seguida, temos o \"gdh\", que indica o usu\u00e1rio e a pasta que ser\u00e1 modificada.<\/p>\n<p>Outro uso comum \u00e9 especificar tamb\u00e9m o grupo, como em:<\/p>\n<p># chown -R gdh:gdh \/home\/gdh\/arquivos\/<\/p>\n<p>Voc\u00ea pode tamb\u00e9m criar novos usu\u00e1rios e alterar as senhas usando o \"adduser\" e o \"passwd\", que permitem, respectivamente, adicionar novos usu\u00e1rios e alterar as senhas de acesso posteriormente, como em:<\/p>\n<p># adduser joao<\/p>\n<p>(cria o usu\u00e1rio)<\/p>\n<p># passwd joao<\/p>\n<p>(altera a senha posteriormente)<\/p>\n<p>O pr\u00f3prio usu\u00e1rio pode alterar a senha usando o comando \"passwd\", desde que ele saiba a senha antiga. Se o usu\u00e1rio esqueceu a senha, voc\u00ea pode definir uma nova executando o comando como root; nesse caso o sistema pede a nova senha diretamente, sem solicitar a senha antiga.<\/p>\n<p>Bem antigamente, as senhas eram salvas no pr\u00f3prio arquivo \"\/etc\/passwd\", juntamente com as demais informa\u00e7\u00f5es, o que abria brecha para diversos tipos de ataques. A partir de um certo ponto (por volta de 1996), todas as distribui\u00e7\u00f5es passaram a utilizar o sistema shadow, onde as senhas s\u00e3o armazenadas de forma encriptada em um arquivo separado, o \"\/etc\/shadow\".<\/p>\n<p>As senhas s\u00e3o encriptadas usando um algoritmo de m\u00e3o \u00fanica, que permite apenas encriptar as senhas, mas n\u00e3o recuper\u00e1-las. Durante o login, o sistema aplica o mesmo algoritmo \u00e0 senha digitada pelo usu\u00e1rio e compara a string resultante com a armazenada no arquivo. Se o resultado for o mesmo, o sistema sabe que a senha confere e o acesso \u00e9 autorizado.<\/p>\n<p>Para remover um usu\u00e1rio anteriormente criado, utilize o comando \"deluser\", como em:<\/p>\n<p># deluser joao<\/p>\n<p>Por quest\u00e3o de seguran\u00e7a, o comando remove apenas a conta, sem apagar o diret\u00f3rio home ou outras pastas com dados do usu\u00e1rio (como o diret\u00f3rio de spool dos e-mails). O diret\u00f3rio home \u00e9 especialmente importante, pois ele guarda todas as configura\u00e7\u00f5es e os arquivos do usu\u00e1rio, de forma que em um servidor voc\u00ea s\u00f3 deve remov\u00ea-lo depois de ter realmente certeza do que est\u00e1 fazendo.<\/p>\n<p>Concluindo, voc\u00ea pode alterar as permiss\u00f5es de acesso de arquivos e pastas usando o comando chmod. A sintaxe dele parece um pouco complicada \u00e0 primeira vista (justamente por isso a maioria acaba preferindo usar diretamente o gerenciador de arquivos), mas nada que um pouco de pr\u00e1tica n\u00e3o possa resolver.<\/p>\n<p>Um exemplo t\u00edpico seria:<\/p>\n<p># chmod 744 arquivo<\/p>\n<p>Os tr\u00eas n\u00fameros indicam respectivamente as permiss\u00f5es para o dono do arquivo, as permiss\u00f5es para o grupo e as permiss\u00f5es para os demais usu\u00e1rios.<\/p>\n<p>Temos tr\u00eas permiss\u00f5es: leitura, grava\u00e7\u00e3o e execu\u00e7\u00e3o. Cada uma \u00e9 representada por um n\u00famero:<\/p>\n<p>4: Ler.<\/p>\n<p>2: Alterar o conte\u00fado, criar novos arquivos (no caso de uma pasta).<\/p>\n<p>1: Execu\u00e7\u00e3o (no caso dos arquivos) ou listar os arquivos (no caso das pastas).<\/p>\n<p>Voc\u00ea simplesmente soma estes n\u00fameros para ter o n\u00famero referente ao conjunto de permiss\u00f5es que deseja:<\/p>\n<p>0: Sem permiss\u00e3o alguma. Se for uma pasta, o usu\u00e1rio sequer pode ver o conte\u00fado.<\/p>\n<p>1: Permiss\u00e3o apenas para executar (n\u00e3o \u00e9 poss\u00edvel ler o arquivo ou alter\u00e1-lo, apenas executar um programa). No caso de uma pasta, o \"1\" permite que se liste os arquivos dentro dela, mas sem ler ou alterar os arquivos.<\/p>\n<p>4: Apenas leitura.<\/p>\n<p>5 (4+1): Ler e executar (no caso de um arquivo) ou ver os arquivos e abri-los, no caso de uma pasta.<\/p>\n<p>6 (4+2): Leitura + grava\u00e7\u00e3o.<\/p>\n<p>7 (4+2+1): Controle total: leitura + grava\u00e7\u00e3o + permiss\u00e3o para executar.<\/p>\n<p>Uma observa\u00e7\u00e3o importante \u00e9 que ao configurar as permiss\u00f5es de acesso de uma pasta, voc\u00ea sempre deve usar 5 (4+1) ou 7 (4+2+1), pois, sem permiss\u00e3o para listar o conte\u00fado da pasta, voc\u00ea n\u00e3o consegue ver os arquivos dentro dela.<\/p>\n<p>Se voc\u00ea quer dar controle total do arquivo ou pasta para o dono e para o grupo, mas permiss\u00e3o de apenas leitura para os demais usu\u00e1rios, usaria o n\u00famero 774; se voc\u00ea quisesse que todos os usu\u00e1rios tivessem permiss\u00e3o de leitura e grava\u00e7\u00e3o, mas sem poder executar nada, usaria o n\u00famero 666; se quisesse dar controle total para todo mundo, usaria 777 e assim por diante.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>O Linux nasceu como um sistema multiusu\u00e1rio, mantendo a tradi\u00e7\u00e3o dos sistemas Unix. Ele oferece um sistema de permiss\u00f5es bastante<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8],"tags":[],"class_list":["post-42","post","type-post","status-publish","format-standard","hentry","category-linux"],"_links":{"self":[{"href":"https:\/\/marcomapa.com\/artigos\/wp-json\/wp\/v2\/posts\/42","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/marcomapa.com\/artigos\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/marcomapa.com\/artigos\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/marcomapa.com\/artigos\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/marcomapa.com\/artigos\/wp-json\/wp\/v2\/comments?post=42"}],"version-history":[{"count":1,"href":"https:\/\/marcomapa.com\/artigos\/wp-json\/wp\/v2\/posts\/42\/revisions"}],"predecessor-version":[{"id":151,"href":"https:\/\/marcomapa.com\/artigos\/wp-json\/wp\/v2\/posts\/42\/revisions\/151"}],"wp:attachment":[{"href":"https:\/\/marcomapa.com\/artigos\/wp-json\/wp\/v2\/media?parent=42"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/marcomapa.com\/artigos\/wp-json\/wp\/v2\/categories?post=42"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/marcomapa.com\/artigos\/wp-json\/wp\/v2\/tags?post=42"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}