Chmod + dicas

Publicado por Thiago em 25/05/2006

[ Hits: 193.421 ]

 


Chmod + dicas

By sc4rf4c3@post.com

Usando e entendendo permissões no Linux


Resolvi montar essa pequena dica, sei que já existem várias, porém vou colocar algumas dicas do chmod, porque onde trabalho fizeram o favor de setar um chmod -R 777 na pasta /, aí o servidor ficou com permissão errada para todos os arquivos, tive que setar as permissões arquivo por arquivo comparando com outra máquina com mesmo sistema Slackware, pois não podíamoss desligar o servidor.

Exemplos de permissões nos arquivos:

drwxr-xr-x 19 root     root           4096 Jan  5 16:56 ../
-rwxr-xr-x  1 root     root           38812 Mar  9  2003 MAKEDEV*
-rw-r--r--  1 root     root           1162 Mar  9  2003 README.MAKEDEV
lrwxrwxrwx  1 root     root           4 Oct 15  2003 X0R -> null
crw-rw----  1 root     root           10, 175 Mar 25  2001 agpgart
crw-rw----  1 root     root           1,  10 Mar 25  2001 aio
drwxr-xr-x  2 root     root           4096 Jun 11  2002 amiraid/
crw-r--r--  1 root     root           10, 134 Jun  7  1996 apm_bios
crw-rw----  1 root     root           36,   8 Mar 25  2001 arpd
drwxr-xr-x  2 root     root           4096 May 19  2002 ataraid/
crw-rw----  1 root     sys            10,   3 Jul 17  1994 atibm
crw-rw----  1 root     root           10, 186 Mar 25  2001 atomicps
crw-rw--w-  1 root     sys            14,   4 Jul 18  1994 audio
crw-rw--w-  1 root     sys            14,  20 Jul 18  1994 audio1
brw-r-----  1 root     disk           29,   0 Feb 15  1995 aztcd
crw-r--r--  1 root     root           10, 128 May 24  1996 beep
drwxr-xr-x  2 root     root           36864 Jun  3  2002 cciss/
lrwxrwxrwx  1 root     root           8 Oct 15  2003 cdrom -> /dev/hdd
brw-r-----  1 root     disk           24,   0 Jul 18  1994 cdu535
crw-rw----  1 root     root           67,   0 Mar 25  2001 cfs0

O primeiro caractere da string indica o tipo de arquivo. Se for "d" representa um diretório, se for "-" equivale a um arquivo.
  • d: diretório
  • b: arquivo de bloco
  • c: arquivo especial de caractere
  • p: canal
  • s: socket
  • -: arquivo normal

É necessário ter um certo cuidado com as permissões. Por exemplo, do que adianta o usuário ter permissão de gravação se ele não tem permissão de leitura habilitada? Ele poderá ler o arquivo para poder modificá-lo? Não! De certo, isso tem utilidade em arquivos de log.

Fazendo associação com as letras r, w, x e o caractere -, vamos entender cada uma:
  • r: significa permissão de leitura (read);
  • w: significa permissão de gravação (write);
  • x: significa permissão de execução (execution);
  • -: significa permissão desabilitada.

Atenção:
  • ---: nenhuma permissão;
  • r--: permissão de leitura;
  • r-x: leitura e execução;
  • rw-: leitura e gravação;
  • rwx: leitura, gravação e execução.

Vamos supor que o arquivo estava assim:

crwxrwxrwx 1 root disk 37, 128 Dec 11 1995 nht0

Dessa forma ele está errado. Sua forma correta é:

crw-r----- 1 root disk 37, 128 Dec 11 1995 nht0

Usei o comando:

# chmod 640 nht0

Alterando as permissões de crwxrwxrwx para crw-r-----. Note que sempre as letras iniciais não mudam, ok?

O comando chmod -R seta as permissões no diretório e nos arquivos dentro dele, cuidado com isso, foi o que fizeram aqui no meu servidor.

Use assim:

$ chmod [número] [nomedoarquivo]

Exemplo:

# chmod 755 apache

Comando Número Permissão
chmod 000 ---------
chmod 400 r--------
chmod 444 r--r--r--
chmod 600 rw-------
chmod 620 -rw--w----
chmod 640 -rw-r-----
chmod 644 rw-r--r--
chmod 645 -rw-r--r-x
chmod 646 -rw-r--rw-
chmod 650 -rw-r-x---
chmod 660 -rw-rw----
chmod 661 -rw-rw---x
chmod 662 -rw-rw--w-
chmod 663 -rw-rw--wx
chmod 664 -rw-rw-r--
chmod 666 rw-rw-r--
chmod 700 rwx------
chmod 750 rwxr-x---
chmod 755 rwxr-xr-x
chmod 777 rwxrwxrwx
chmod 4711 -rws--x--x

Outro detalhe, os símbolos:
  • u: usuário
  • g: grupo
  • o: outros
  • a: totos

Para mostrar como essa combinação é feita, vamos supor que você deseje adicionar permissão de gravação no arquivo teste.txt para um usuário. Então o comando a ser digitado será:

$ chmod u+w teste.txt

O "u" indica que a permissão será dada a um usuário. O sinal de adição (+) indica que está sendo adicionada a permissão e "w" indica que a permissão que está sendo dada é de gravação.

Caso você queira dar permissões de leitura e execução ao seu grupo, o comando será:

$ chmod g+rw teste.txt

vamos supor que o arquivo teste.old deverá estar com todas as permissões disponíveis para o grupo. Podemos usar então:

$ chmod g=rwx teste.txt

Usar o chmod com valores numéricos é algo bastante prático. Em vez de usar letras como símbolos para cada permissão, usam-se números. Se determinada permissão é habilitada, atribui-se valor 1, caso contrário, atribui-se valor 0. Sendo assim, a string de permissões r-xr----- na forma numérica fica 101100000. Essa combinação de 1 e 0 é um número binário.

Mas temos ainda que acrescentar a forma decimal (ou seja, números de 0 a 9). Para isso, observe a tabela abaixo:

Permissão Binário Decimal
--- 000 0
--x 001 1
-w- 010 2
-wx 011 3
r-- 100 4
r-x 101 5
rw- 110 6
rwx 111 7

Pra quem está começando agora vai ser um pouco complicado entender de uma vez isto, porém se você possui uma maquina com Linux, treine.

Outras dicas deste autor

Remontar IBM Tivoli Storage

Leitura recomendada

Arquivo executável sem a necessidade de informar a localização

100 Programas para GNU/Linux que todo usuário iniciante precisa conhecer

Bloqueando meebo

Identificação de File Systems (Check File Systems on Linux)

Chamada de código Java através de programas C++


Comentários
[1] Comentário enviado por hccelo em 25/05/2006 - 16:43h

acho que é formato octal e nao decimal não?!?! numeros de 0 a 7 na verdade.
mas tá mto legal...

falou....

[2] Comentário enviado por PCMasterPB em 27/05/2006 - 17:07h

Muito bom pra se ter como referência. Valeu pela dica.

[3] Comentário enviado por rafaiusko em 09/08/2007 - 16:46h

Muito boa essa dica!
Fica bem explícito a função do chmod e me ajudou pra caramba!

[4] Comentário enviado por gandiva em 24/09/2007 - 20:59h

Valeu, parabens, eu estava procurando uma ajuda para entender as opções do chmod e adorei essa dica! Ótima!

[5] Comentário enviado por chuvisco em 15/11/2007 - 08:43h

Olá, eu uso Ubuntu e não consigo setar as permissões para gravar na minha partição do windows. É windows vista, faz alguma diferença???

[6] Comentário enviado por vinicius.fonseca em 19/11/2007 - 15:16h

ow legal a dica e bem prático pra quem já tem experiencia, pra galera que naum saca muito ainda fica meio soh de cola msm, mas tah valendo.

[7] Comentário enviado por vinicius.fonseca em 19/11/2007 - 15:21h

olá chuvisco, veja se sua partição do vista é ntfs (o que com certeza deve ser), se for vc deve habilitar o modo de escrita, que naum vem como padrão no Ubuntu (depende da versão).

[8] Comentário enviado por peparocha em 28/12/2007 - 07:58h

Salve, comunidade:

Chuvisco: nunca usei ubuntu, mas me parece que, a maioria das distros linux usam praticamente a mesma arquitetura de arquivos, portanto a dica que o nosso irmão vinicius postou, tem que ser vista no "fstab", que é o arquivo que monta as partições na inicialização, lá, procure a referência à partição windows e onde tiver a chave "ro" que é de leitura somente, troque por "rw", que é de leitura e escrita.........
espero ter ajudado de alguma forma......
[]'s

[9] Comentário enviado por chuvisco em 31/12/2007 - 16:28h

esse é o meu fstab
----------------------------------------------------------------------------------------------------------
# /etc/fstab: static file system information.
#
# <file system> <mount point> <type> <options> <dump> <pass>
proc /proc proc defaults 0 0
# /dev/sda7
UUID=5e5cceac-d6d9-4d27-a17d-9f8e37a7cc39 / ext3 defaults,errors=remount-ro 0 1
# /dev/sda1
UUID=A054DCDD54DCB6EE /media/sda1 ntfs defaults,nls=utf8,umask=007,gid=46 0 1
# /dev/sda5
UUID=D4027F13027EFA36 /media/sda5 ntfs defaults,nls=utf8,umask=007,gid=46 0 1
# /dev/sda6
UUID=7a605298-50a2-456e-892e-d22c657a79a1 none swap sw 0 0
/dev/scd0 /media/cdrom0 udf,iso9660 user,noauto 0 0
---------------------------------------------------------------------------------------------------

o que eu tenho que mudar aqui para que eu possa gravar as coisas na partição ntfs ???=0P

[10] Comentário enviado por mattiell00 em 12/02/2008 - 19:25h

cara show de bola, esse artigo gostei !!!

[11] Comentário enviado por fguedess em 10/05/2008 - 18:41h

Ótimo artigo!

Já foi pros favoritos.
Parabéns.

[12] Comentário enviado por galdinocamargo em 07/07/2008 - 13:17h

MUITO BOM!

GRATO.

[13] Comentário enviado por albfneto em 16/07/2008 - 23:12h

Olha, o artigo é antigo, mas é massa!!!
todas as opções do importante comando chmod.
Tá no meus favoritos também....

[14] Comentário enviado por alexandreromeu em 06/12/2008 - 17:00h

Excelênte!

Mesmo depois de dois anos continua sendo fonte de esclarecimento para os usuário que como eu, querem entender como funciona o chmod.

Parabéns!

Alexandre Romeu

[15] Comentário enviado por rafiwskis em 02/02/2010 - 23:08h

Então [chmod +x arquivo] altera a permissão para execução de todos os usuários, estou certo?

[16] Comentário enviado por dnk em 21/06/2010 - 13:17h

ótima dica, mas só para contribuir ai e ajudar um pouco, em vez de decorar toda a tabelinha de 0 a 7, precisa decorar somente 3: x = 1, r = 2 e w = 4 quando for rw, por exemplo, é só somar os valores de r e de w 2+4=6 e assim por diante.

[17] Comentário enviado por ederpardeiro em 13/10/2010 - 13:24h

Boa tarde pessoal...

Muito bem explicado, porém, ainda tenho uma dúvida.

Tenho o usuário joaosilva e quero dar permissão de gravação para ele em um determinado arquivo, por exemplo: teste.txt.

De acordo com o artigo, para dar esta permissão, usamos o comando abaixo:

chmod u+w teste.txt

Mas, onde eu especifico que este usuário é o joaosilva?

Fico no oaguardo...



[18] Comentário enviado por dnk em 13/10/2010 - 15:35h

a sintaxe é chmod opcao arquivo

exemplo:
chmod +w teste.txt

se vc quiser alterar o usuario usa chown usuario.grupo arquivo

exemplo chown joaosilva.users teste.txt

espero ter ajudado haehae

[]s
DNK

[19] Comentário enviado por ederpardeiro em 13/10/2010 - 18:51h

Boa noite DNK,

Obrigado por responder...

Mas, pelo que percebi, o comando chown serve para definir o PROPRIETÁRIO do arquivo, sendo assim, obviamente ele terá permissão de gravação.

Mas... vamos pensar então na seguinte situação:

Tenho três usuários: pedrocabral, joaquimxavier e joanadarc

Tenho também um arquivo: teste.txt

Quero que os usuários pedrocabral e joanadarc, tenham permissão de gravação
Quero que o usuário joaquimxavier tenha permissão somente de leitura....

Como fazer?

Continuo no aguardo,

Eder Pardeiro

[20] Comentário enviado por alexandreromeu em 13/10/2010 - 19:12h

Boa noite!

O chmod permite alterar as permissões do dono do arquivo, do grupo de usuários do qual o dono do arquivo faz parte e também de "outros usuários" (que não seja o proprioetário e que também não está no grupo do proprietáario do arquivo).

Então se um único usuário deve ter acesso, é como já te falaram: deixar ele como proprietário do arquivo e só ele com permissão.

Na situação que você colocou, o ideal acredito que é:
pedrocabral e joanadarc no mesmo grupo, e esse grupo com permissão de leitura e escrita no arquivo (eles devem estar no mesmo grupo do proprietário do arquivo ou um deles ser o proprietário do arquivo)
e o usuário joaquimxavier fora desse grupo e o arquivo com permissão só de leitura para "outros" usuários.

Lembrando que um usuário pode fazer parte de mais de um grupo ao mesmo tempo.

Alexandre Romeu

[21] Comentário enviado por ederpardeiro em 14/10/2010 - 09:08h

Bom dia Alexandre, bom dia pessoal....

Na verdade eu precisava de algo mais profissional... para ambientes maiores que exigem maior flexibilidade para administração. Me indicaram as ACL's que são metodos diferentes de dar permissões em pastas e arquivos. Funciona como no Windows, ao qual já estou acostumado.

Segue abaixo o link para quem precisar:

http://www.guiadohardware.net/dicas/acl-linux.html

Muito obrigado pelo empenho de todos.

[22] Comentário enviado por walquira em 29/08/2012 - 10:36h

Parabéns!!!
Alguem podia me explicar essa permissão chmod 4711 -rws--x--x?

Agradeço!!

:)

[23] Comentário enviado por davidconceicao em 08/04/2013 - 15:40h

Valeu ajudou !!

[24] Comentário enviado por thiagoams em 27/05/2013 - 16:05h

olá walquira, seguinte a permissão chmod 4711 -rws--x--x é sobre SUID (Set User ID)
Esta permissão sempre trabalhará no campo do proprietário do arquivo (u) e esta é uma permissão que só trabalha com arquivos executáveis, ela serve para o propósito de um usuário comum poder executar aplicativos ou comandos de root ou do dono do arquivo.

Veja melhor em: http://www.vivaolinux.com.br/artigo/Leia-grave-e-execute?pagina=8

att, Thiago

[25] Comentário enviado por skywalk em 08/12/2014 - 18:42h

Existe um artigo também sobre o comando CHMOD no akkiri.com

http://www.akkiri.com/dicas/chmod.php



Contribuir com comentário