5.3 Lição 1
Certificação: |
Linux Essentials |
---|---|
Versão: |
1.6 |
Tópico: |
5 Segurança e permissões de arquivos |
Objetivo: |
5.3 Gerenciamento de permissões e propriedade de arquivos |
Lição: |
1 de 1 |
Introdução
Por ser um sistema multiusuário, o Linux precisa de uma maneira de rastrear quem é o dono de cada arquivo e se um usuário pode ou não executar ações nesse arquivo. Isso serve para garantir a privacidade dos usuários que desejam manter em sigilo o conteúdo de seus arquivos, além de permitir trabalhar em colaboração, tornando certos arquivos acessíveis a diversos usuários.
Isso é feito por meio de um sistema de permissões em três níveis: cada arquivo no disco pertence a um usuário e a um grupo de usuários e conta com três conjuntos de permissões: uma para o proprietário, uma para o grupo que possui o arquivo e outra para todos os demais. Nesta lição, você aprenderá a consultar as permissões para um arquivo e a manipulá-las.
Como consultar informações sobre arquivos e diretórios
O comando ls
é usado para obter uma lista do conteúdo de qualquer diretório. Nessa forma básica, aparecem somente os nomes de arquivos:
$ ls Another_Directory picture.jpg text.txt
Mas há muito mais informações disponíveis sobre cada arquivo, incluindo tipo, tamanho, dono e muito mais. Para visualizar essas informações, você deve solicitar a ls
uma lista de “forma longa”, usando o parâmetro -l
:
$ ls -l total 536 drwxrwxr-x 2 carol carol 4096 Dec 10 15:57 Another_Directory -rw------- 1 carol carol 539663 Dec 10 10:43 picture.jpg -rw-rw-r-- 1 carol carol 1881 Dec 10 15:57 text.txt
Cada coluna na saída acima tem um significado:
-
A primeira coluna da lista mostra o tipo de arquivo e as permissões.
Por exemplo, em
drwxrwxr-x
:-
O primeiro caractere,
d
, indica o tipo de arquivo. -
Os três caracteres seguintes,
rwx
, indicam as permissões do proprietário do arquivo, também designado como user ouu
. -
Os três caracteres seguintes,
rwx
, indicam as permissões do grupo que possui o arquivo, também chamado deg
. -
Os três últimos caracteres,
r-x
, indicam as permissões para todos os outros, também chamados de others ouo
.
-
-
A segunda coluna indica o número de links fisicos apontando para aquele arquivo. No caso de um diretório, isso significa o número de subdiretórios, além de um link para si mesmo (
.
) e o diretório pai (..
). -
A terceira e quarta colunas mostram as informações de propriedade: respectivamente o usuário e o grupo que possuem o arquivo.
-
A quinta coluna mostra o tamanho do arquivo em bytes.
-
A sexta coluna mostra a data e a hora exatas, ou a marca temporal, de quando o arquivo foi modificado pela última vez.
-
A sétima e última coluna mostra o nome do arquivo.
Se quiser ver os tamanhos de arquivo em formato “legível por humanos”, adicione o parâmetro -h
a ls
. O tamanho dos arquivos com menos de um quilobyte será mostrado em bytes. Nos arquivos com mais de um quilobyte e menos de um megabyte, um K
é adicionado depois do número, indicando que o tamanho está em quilobytes. O mesmo vale para arquivos com tamanhos em megabytes (M
) gigabytes (G
):
$ ls -lh total 1,2G drwxrwxr-x 2 carol carol 4,0K Dec 10 17:59 Another_Directory ----r--r-- 1 carol carol 0 Dec 11 10:55 foo.bar -rw-rw-r-- 1 carol carol 1,2G Dec 20 18:22 HugeFile.zip -rw------- 1 carol carol 528K Dec 10 10:43 picture.jpg ---xr-xr-x 1 carol carol 33 Dec 11 10:36 test.sh -rwxr--r-- 1 carol carol 1,9K Dec 20 18:13 text.txt -rw-rw-r-- 1 carol carol 2,6M Dec 11 22:14 Zipped.zip
Para exibir somente as informações de um conjunto específico de arquivos, adicione o nome desses arquivos a ls
:
$ ls -lh HugeFile.zip test.sh total 1,2G -rw-rw-r-- 1 carol carol 1,2G Dec 20 18:22 HugeFile.zip ---xr-xr-x 1 carol carol 33 Dec 11 10:36 test.sh
E os diretórios?
Se você tentar consultar informações sobre um diretório usando ls -l
, ele exibirá uma lista do conteúdo do diretório:
$ ls -l Another_Directory/ total 0 -rw-r--r-- 1 carol carol 0 Dec 10 17:59 another_file.txt
Para evitar isso e consultar informações sobre o diretório em si, adicione o parâmetro -d
a ls
:
$ ls -l -d Another_Directory/ drwxrwxr-x 2 carol carol 4096 Dec 10 17:59 Another_Directory/
Exibindo arquivos ocultos
A lista de diretórios que obtivemos usando ls -l
anteriormente está incompleta:
$ ls -l total 544 drwxrwxr-x 2 carol carol 4096 Dec 10 17:59 Another_Directory -rw------- 1 carol carol 539663 Dec 10 10:43 picture.jpg -rw-rw-r-- 1 carol carol 1881 Dec 10 15:57 text.txt
Há outros três arquivos nesse diretório, mas eles estão ocultos. No Linux, os arquivos cujo nome começa com um ponto (.
) são ocultados automaticamente. Para vê-los, precisamos adicionar o parâmetro -a
ao ls
:
$ ls -l -a total 544 drwxrwxr-x 3 carol carol 4096 Dec 10 16:01 . drwxrwxr-x 4 carol carol 4096 Dec 10 15:56 .. drwxrwxr-x 2 carol carol 4096 Dec 10 17:59 Another_Directory -rw------- 1 carol carol 539663 Dec 10 10:43 picture.jpg -rw-rw-r-- 1 carol carol 1881 Dec 10 15:57 text.txt -rw-r--r-- 1 carol carol 0 Dec 10 16:01 .thisIsHidden
O arquivo .thisIsHidden
está oculto simplesmente porque seu nome começa com .
.
Porém, os diretórios .
e ..
são especiais. .
é um ponteiro para o diretório atual, enquanto ..
é um ponteiro para o diretório pai (o diretório que contém o diretório atual). No Linux, todo diretório contém pelo menos esses dois diretórios especiais.
Tip
|
É possível combinar diversos parâmetros no |
Compreendendo os tipos de arquivos
Já mencionamos que a primeira letra da saída de ls -l
descreve o tipo de arquivo. Os três tipos de arquivo mais comuns são:
-
(arquivo normal)-
Um arquivo pode conter qualquer tipo de dado. os arquivos podem ser modificados, movidos, copiados e excluídos.
d
(diretório)-
Um diretório contém outros arquivos e diretórios e ajuda a organizar o sistema de arquivos. Tecnicamente, os diretórios são um tipo especial de arquivo.
l
(link simbólico)-
Este “arquivo” é um apontador para outro arquivo ou diretório em outro local do sistema de arquivos.
Além desses, existem outros três tipos de arquivos que você deve pelo menos conhecer, mas que estão fora do escopo desta lição:
b
(dispositivo de bloco)-
Este arquivo representa um dispositivo virtual ou físico, como os discos ou outro tipo de dispositivo de armazenamento. Por exemplo, o primeiro disco rígido do sistema pode ser representado por
/dev/sda
. c
(dispositivo de caracteres)-
Este arquivo representa um dispositivo virtual ou físico. Os terminais (como o terminal principal em
/dev/ttyS0
) e portas seriais são exemplos comuns de dispositivos de caracteres. s
(socket)-
Os sockets são como “dutos” que transmitem informações entre dois programas.
Warning
|
Não altere nenhuma das permissões dos dispositivos de bloco, de caracteres ou sockets, a menos que saiba o que está fazendo. Isso pode fazer com que o sistema pare de funcionar! |
Entendendo as permissões
Na saída de ls -l
, as permissões de arquivo são mostradas logo após o tipo de arquivo, na forma de três grupos de três caracteres cada, na ordem r
, w
e x
. Eis o significado deles. Lembre-se de que um hífen -
representa a ausência de uma permissão determinada.
Permissões de arquivos
r
-
Representa read (leitura) e tem valor octal
4
(não se preocupe, falaremos de octais daqui a pouquinho). Significa a permissão de abrir um arquivo e ler seu conteúdo. w
-
Representa write (escrita) e tem valor octal
2
. Significa a permissão de editar ou remover um arquivo. x
-
Representa execute (execução) e tem valor octal
1
. Significa que o arquivo pode ser rodado como executável ou script.
Então, por exemplo, um arquivo com permissões rw-
pode ser lido e escrito, mas não pode ser executado.
Permissões em diretórios
r
-
Representa read (leitura) e tem valor octal
4
. Significa a permissão para ler o conteúdo do diretório, como os nomes de arquivos. Mas não implica na permissão para ler os arquivos em si. w
-
Representa write (escrita) e tem valor octal
2
. Significa a permissão de editar ou remover um arquivo em um diretório, além de alterar seu nome, permissões e proprietários. Se um usuário tiver permissão de escrita em um diretório, ele pode alterar as permissões de qualquer arquivo desse diretório, mesmo que não tenha permissões sobre o arquivo ou que ele pertença a um outro usuário. x
-
Representa execute (execução) e tem valor octal
1
. Significa a permissão de entrar em um diretório, mas não de listar seus arquivos (para isso, é necessária a permissãor
).
A última parte sobre os diretórios é um pouco confusa. Vamos imaginar, por exemplo, que temos um diretório chamado Another_Directory
, com as seguintes permissões:
$ ls -ld Another_Directory/ d--xr-xr-x 2 carol carol 4,0K Dec 20 18:46 Another_Directory
Imagine também que dentro desse diretório tem um script do shell chamado hello.sh
com as seguintes permissões:
-rwxr-xr-x 1 carol carol 33 Dec 20 18:46 hello.sh
Se você for a usuária carol
e tentar listar o conteúdo de Another_Directory
, aparecerá uma mensagem de erro, pois seu usuário não tem permissão de leitura para aquele diretório:
$ ls -l Another_Directory/ ls: cannot open directory 'Another_Directory/': Permission denied
Todavia, a usuária carol
tem permissões de execução, o que significa que ela pode entrar no diretório. Assim, a usuária carol
pode acessar arquivos dentro do diretório, desde que tenha as permissões corretas para o arquivo respectivo. Neste exemplo, a usuária tem permissões totais para o script hello.sh
, então ela pode executar o script, embora não possa ler o conteúdo do diretório que o contém. Basta dispor do nome de arquivo completo.
$ sh Another_Directory/hello.sh Hello LPI World!
Como dissemos anteriormente, as permissões são especificadas em sequência: primeiro para o proprietário do arquivo, depois para o grupo proprietário e por fim para outros usuários. Sempre que alguém tenta executar uma ação no arquivo, as permissões são verificadas da mesma maneira. Primeiro, o sistema verifica se o usuário atual possui o arquivo e, se for o caso, aplica apenas o primeiro conjunto de permissões. Caso contrário, ele verifica se o usuário atual pertence ao grupo que possui o arquivo. Nesse caso, ele aplica apenas o segundo conjunto de permissões. Em qualquer outro caso, o sistema aplicará o terceiro conjunto de permissões. Isso significa que, se o usuário atual for o proprietário do arquivo, apenas as permissões do proprietário serão efetivas, mesmo que as permissões do grupo ou outras permissões sejam mais permissivas do que as permissões do proprietário.
Modificando as permissões de arquivo
O comando chmod
é usado para modificar as permissões de um arquivo e emprega pelo menos dois parâmetros: o primeiro descreve quais permissões devem ser alteradas e o segundo aponta para o arquivo ou diretório em que a alteração será feita. No entanto, as permissões para alterações podem ser descritas de duas maneiras, ou “modos”, diferentes.
O primeiro, chamado modo simbólico, oferece um controle refinado, permitindo adicionar ou revogar uma única permissão sem modificar as de outras pessoas no conjunto de permissões. O outro modo, chamado modo numérico, é mais fácil de lembrar e mais rápido de usar quando queremos definir todos os valores de permissão de uma só vez.
Ambos os modos permitem o mesmo resultado final. Então, por exemplo, os comandos:
$ chmod ug+rw-x,o-rwx text.txt
e
$ chmod 660 text.txt
produzirão exatamente a mesma saída, um arquivo com as permissões definidas:
-rw-rw---- 1 carol carol 765 Dec 20 21:25 text.txt
Agora, vamos entender como cada modo funciona.
Modo simbólico
Ao descrever quais permissões devem ser alteradas no modo simbólico, o(s) primeiro(s) caractere(s) indicam as permissões que serão alteradas: permissões do usuário (u
), do grupo (g
), outras (o
) e/ou as três juntas (a
).
Em seguida, você precisa dizer ao comando o que fazer: você pode conceder uma permissão (+
), revogar uma permissão (-
) ou configurá-la para um valor específico (=
).
Por fim, você especifica qual permissão deseja afetar: leitura (r
), escrita (w
) ou execução (x
).
Por exemplo, imagine que temos um arquivo chamado text.txt
com a seguinte permissão definida:
$ ls -l text.txt -rw-r--r-- 1 carol carol 765 Dec 20 21:25 text.txt
Se quisermos conceder permissões de escrita aos membros do grupo proprietário arquivo, usamos o parâmetro g+w
. Fica mais fácil entender assim: “Para o grupo (g
), conceda (+
) permissões de escrita (w
)”. Assim, o comando ficaria:
$ chmod g+w text.txt
Vamos conferir o resultado com ls
:
$ ls -l text.txt -rw-rw-r-- 1 carol carol 765 Dec 20 21:25 text.txt
Se quisermos remover as permissões de leitura para o proprietário do mesmo arquivo, podemos raciocinar assim: “Para o usuário (u
), revogue (-
) as permissões de leitura (r
)”. Assim, o parâmetro seria u-r
, desta maneira:
$ chmod u-r text.txt $ ls -l text.txt --w-rw-r-- 1 carol carol 765 Dec 20 21:25 text.txt
E se quisermos definir as permissões exatamente como rw-
para todos? Se for o caso, pensamos desta maneira: “Para todos (a
), defina exatamente (=
) leitura (r
), escrita (w
), mas não execução (-
)”. Assim:
$ chmod a=rw- text.txt $ ls -l text.txt -rw-rw-rw- 1 carol carol 765 Dec 20 21:25 text.txt
Obviamente, é possível modificar várias permissões ao mesmo tempo. Nesse caso, nós as separamos com vírgula (,
):
$ chmod u+rwx,g-x text.txt $ ls -lh text.txt -rwxrw-rw- 1 carol carol 765 Dec 20 21:25 text.txt
O exemplo acima pode ser lido como: “Para o usuário (u
), conceda (+
) permissões de leitura, escrita e execução (rwx
), para o grupo (g
) revogue (-
) permissões de execução (x
)”.
Quando executado em um diretório, chmod
modifica apenas as permissões do diretório. chmod
tem um modo recursivo, útil quando desejamos alterar as permissões para “todos os arquivos dentro de um diretório e seus subdiretórios”. Para usá-lo, adicione o parâmetro -R
após o nome do comando e antes das permissões a alterar, da seguinte maneira:
$ chmod -R u+rwx Another_Directory/
Esse comando pode ser lido como: “Recursivamente (-R
), para o usuário (u
), conceda (+
) permissões de leitura, escrita e execução (rwx
)”.
Warning
|
Tenha cautela e pense duas vezes antes de usar a opção |
Modo numérico
No modo numérico, as permissões são especificadas de maneira diferente: como um valor numérico de três dígitos na notação octal, um sistema numérico de base 8.
Cada permissão tem um valor correspondente e elas são especificadas na seguinte ordem: primeiro vem leitura (r
), que é 4
, depois escrita (w
), que é 2
, e por fim a execução (x
), representada por 1
. Se não houver permissão, use o valor zero (0
). Portanto, uma permissão de rwx
seria 7
(4+2+1
) e r-x
seria 5
(4+0+1
).
O primeiro dos três dígitos no conjunto de permissões representa as permissões do usuário (u
), o segundo as do grupo (g
) e o terceiro as do proprietário (o
). Se desejássemos definir as permissões de um arquivo como rw-rw----
, o valor octal seria 660
:
$ chmod 660 text.txt $ ls -l text.txt -rw-rw---- 1 carol carol 765 Dec 20 21:25 text.txt
Além disso, a sintaxe no modo numérico é a mesma do modo simbólico: o primeiro parâmetro representa as permissões que desejamos alterar e o segundo aponta para o arquivo ou diretório em que a alteração será feita.
Tip
|
Se o valor de uma permissão for ímpar, é certeza que o arquivo é executável! |
Qual sintaxe usar? O modo numérico é recomendado quando queremos alterar as permissões para um valor específico, por exemplo 640
(rw- r-- ---
).
O modo simbólico é mais útil para alterar apenas um valor específico, quaisquer que sejam as permissões atuais do arquivo. Por exemplo, posso adicionar permissões de execução para o usuário somplesmente com chmod u+x script.sh
sem me preocupar e nem sequer tocar nas permissões atuais do grupo e outras.
Modificando o proprietário de um arquivo
O comando chown
é usado para modificar o proprietário de um arquivo ou diretório. A sintaxe é bastante simples:
chown username:groupname filename
Por exemplo, vamos verificar um arquivo chamado text.txt
:
$ ls -l text.txt -rw-rw---- 1 carol carol 1881 Dec 10 15:57 text.txt
O usuário que possui o arquivo é carol
e o grupo também é carol
. Agora, vamos modificar o grupo proprietário do arquivo para outro grupo, como students
:
$ chown carol:students text.txt $ ls -l text.txt -rw-rw---- 1 carol students 1881 Dec 10 15:57 text.txt
Lembre-se de que o usuário que possui um arquivo não precisa pertencer ao grupo que o possui. No exemplo acima, a usuária carol
não precisa ser membro do grupo Students
. No entanto, ela precisa ser membro do grupo para poder transferir a propriedade do arquivo para ele.
O usuário ou o grupo podem ser omitidos se você não quiser alterá-los. Assim, para alterar apenas o grupo que possui um arquivo, usaríamos chown :students text.txt
. Para mudar apenas o usuário, o comando seria chown carol text.txt
. Como alternativa, você pode usar o comando chgrp students text.txt
para alterar apenas o grupo.
A menos que você seja o administrador do sistema (root), não poderá alterar a propriedade de um arquivo pertencente a outro usuário ou grupo ao qual você não pertença. Se tentar fazer isso, receberá a mensagem de erro Operation not permitted
(Operação não permitida).
Consultando os grupos
Antes de alterar a propriedade de um arquivo, pode ser útil saber quais grupos existem no sistema, quais usuários são membros de um grupo e a quais grupos um usuário pertence. Essas tarefas podem ser realizadas com dois comandos, groups
e groupmems
.
Para ver quais grupos existem no seu sistema, basta digitar groups
:
$ groups carol students cdrom sudo dip plugdev lpadmin sambashare
E para saber a quais grupos um usuário pertence, adicione o nome de usuário como parâmetro:
$ groups carol carol : carol students cdrom sudo dip plugdev lpadmin sambashare
Para fazer o inverso, exibindo quais usuários pertencem a um grupo, use groupmems
. O parâmetro -g
especifica o grupo e -l
lista todos os seus membros:
$ sudo groupmems -g cdrom -l carol
Tip
|
|
Permissões especiais
Além das permissões de leitura, escrita e execução para usuários, grupos e outros, cada arquivo pode ter três outras permissões especiais capazes de alterar a maneira como um diretório funciona ou como um programa é executado. Elas podem ser especificadas em modo simbólico ou numérico e são as seguintes:
Sticky Bit
O sticky bit, também chamado de Restricted Deletion Flag, tem o valor octal 1
e, no modo simbólico, é representado por um t
dentro das permissões de outros. Aplica-se apenas aos diretórios e, no Linux, evita que os usuários removam ou renomeiem um arquivo em um diretório, a menos que sejam proprietários desse arquivo ou diretório.
Os diretórios com o sticky bit definido trazem um t
no lugar do x
nas permissões de outros na saída de ls -l
:
$ ls -ld Sample_Directory/ drwxr-xr-t 2 carol carol 4096 Dec 20 18:46 Sample_Directory/
No modo numérico, as permissões especiais são especificadas usando uma “notação de 4 dígitos”, sendo o primeiro dígito a permissão especial para agir. Por exemplo, para definir o sticky bit (valor 1
) para o diretório Another_Directory
no modo numérico, com permissões 755
, o comando seria:
$ chmod 1755 Another_Directory $ ls -ld Another_Directory drwxr-xr-t 2 carol carol 4,0K Dec 20 18:46 Another_Directory
Set GID
O Set GID, também conhecido como SGID ou bit Set Group ID, tem o valor octal 2
e, no modo simbólico, é representado por um s
nas permissões de grupo. Pode ser aplicado a arquivos ou diretórios executáveis. Nos arquivos executáveis, ele concede acesso aos privilégios do grupo que possui o arquivo ao processo resultante da execução do arquivo. Quando aplicado a diretórios, ele faz com que todos os arquivos ou diretórios criados com ele herdem o grupo do diretório pai.
Os arquivos e diretórios com o bit SGID trazem um s
no lugar do x
nas permissões de grupo na saída do ls -l
:
$ ls -l test.sh -rwxr-sr-x 1 carol carol 33 Dec 11 10:36 test.sh
Para adicionar permissões SGID a um arquivo no modo simbólico, o comando seria:
$ chmod g+s test.sh $ ls -l test.sh -rwxr-sr-x 1 carol root 33 Dec 11 10:36 test.sh
O exemplo a seguir ajudará a entender melhor os efeitos do SGID em um diretório. Suponha que tenhamos um diretório chamado Sample_Directory
, pertencente ao usuário carol
e ao grupo users
, com a seguinte estrutura de permissões:
$ ls -ldh Sample_Directory/ drwxr-xr-x 2 carol users 4,0K Jan 18 17:06 Sample_Directory/
Agora, vamos mudar para este diretório e, usando o comando touch
, criar um arquivo vazio dentro dele. O resultado seria:
$ cd Sample_Directory/ $ touch newfile $ ls -lh newfile -rw-r--r-- 1 carol carol 0 Jan 18 17:11 newfile
Como vemos, o arquivo pertence ao usuário carol
e ao grupo carol
. Mas, se o diretório tivesse a permissão SGID definida, o resultado seria diferente. Primeiro, vamos adicionar o bit SGID ao Sample_Directory
e verificar os resultados:
$ sudo chmod g+s Sample_Directory/ $ ls -ldh Sample_Directory/ drwxr-sr-x 2 carol users 4,0K Jan 18 17:17 Sample_Directory/
O s
nas permissões do grupo indica que o bit SGID está definido. Agora, vamos mudar para este diretório e, novamente, criar um arquivo vazio com o comando touch
:
$ cd Sample_Directory/ $ touch emptyfile $ ls -lh emptyfile -rw-r--r-- 1 carol users 0 Jan 18 17:20 emptyfile
Como vemos, o grupo que possui o arquivo é users
. Isso ocorre porque o bit SGID fez o arquivo herdar o grupo proprietário do diretório pai, que é users
.
Set UID
SUID, também conhecido como Set User ID, tem valor octal 4
e é representado por um s
nas permissões de usuário no modo simbólico. Aplica-se apenas aos arquivos e seu comportamento é semelhante ao do bit SGID, mas o processo será executado com os privilégios do usuário proprietário do arquivo. Os arquivos com o bit SUID mostram um s
no lugar do x
nas permissões do usuário, na saída de ls -l
:
$ ls -ld test.sh -rwsr-xr-x 1 carol carol 33 Dec 11 10:36 test.sh
Podemos combinar diversas permissões especiais em um parâmetro somando-as. Assim, para definir o SGID (valor 2
) e o SUID (valor 4
) no modo numérico para o script test.sh
com permissões 755
, digite:
$ chmod 6755 test.sh
E o resultado seria:
$ ls -lh test.sh -rwsr-sr-x 1 carol carol 66 Jan 18 17:29 test.sh
Tip
|
Se o seu terminal exibe cores, como é o caso da maioria atualmente, é fácil ver se essas permissões especiais estão definidas olhando a saída de |
Exercícios Guiados
-
Crie um diretório chamado
emptydir
usando o comandomkdir emptydir
. Em seguida, usandols
, liste as permissões do diretórioemptydir
. -
Crie um arquivo vazio chamado
emptyfile
com o comandotouch emptyfile
. Em seguida, usandochmod
com notação simbólica, adicione permissões de execução ao proprietário do arquivoemptyfile
e remova as permissões de gravação e execução para todos os outros. Faça isso usando apenas um comandochmod
. -
Quais serão as permissões de um arquivo chamado
text.txt
depois de você executar o comandochmod 754 text.txt
? -
Vamos supor que um arquivo chamado
test.sh
seja um script do shell com as seguintes permissões e propriedade:-rwxr-sr-x 1 carol root 33 Dec 11 10:36 test.sh
-
Quais são as permissões do proprietário do arquivo?
-
Se o usuário
john
executar esse script, sob quais privilégios de usuário ele será executado? -
Usando a notação numérica, qual deve ser a sintaxe do chmod para “desfazer” a permissão especial concedida a este arquivo?
-
-
Considere este arquivo:
$ ls -l /dev/sdb1 brw-rw---- 1 root disk 8, 17 Dec 21 18:51 /dev/sdb1
Que tipo de arquivo é
sdb1
? E quem pode escrever nele? -
Considere os 4 arquivos a seguir:
drwxr-xr-t 2 carol carol 4,0K Dec 20 18:46 Another_Directory ----r--r-- 1 carol carol 0 Dec 11 10:55 foo.bar -rw-rw-r-- 1 carol carol 1,2G Dec 20 18:22 HugeFile.zip drwxr-sr-x 2 carol users 4,0K Jan 18 17:26 Sample_Directory
Escreva as permissões correspondentes a cada arquivo e diretório usando a notação numérica de 4 dígitos.
Another_Directory
-
foo.bar
-
HugeFile.zip
-
Sample_Directory
-
Exercícios Exploratórios
-
Experimente o seguinte em um terminal: crie um arquivo vazio chamado
emptyfile
com o comandotouch emptyfile
. Agora “zere” as permissões do arquivo comchmod 000 emptyfile
. O que acontecerá se você mudar as permissões deemptyfile
passando apenas um valor dechmod
para o modo numérico, comochmod 4 emptyfile
? E se usarmos dois, comochmod 44 emptyfile
? O que aprendemos sobre a maneira comochmod
interpreta o valor numérico? -
É possível executar um arquivo para o qual você tem permissões de execução, mas não de leitura (
--x
)? Por que ou porque não? -
Considere as permissões do diretório temporário em um sistema Linux,
/tmp
:$ ls -l /tmp drwxrwxrwt 19 root root 16K Dec 21 18:58 tmp
Usuário, grupo e outros têm permissões totais. Mas um usuário regular pode excluir qualquer arquivo dentro deste diretório? Por quê?
-
Um arquivo chamado
test.sh
tem as seguintes permissões:-rwsr-xr-x
, o que indica que o bit SUID foi definido. Agora, execute os seguintes comandos:$ chmod u-x test.sh $ ls -l test.sh -rwSr-xr-x 1 carol carol 33 Dec 11 10:36 test.sh
O que nós fizemos? O que significa o
S
maiúsculo? -
Como criar um diretório chamado
Box
no qual todos os arquivos pertençam automaticamente ao grupousers
e só possam ser removidos pelo usuário que os criou?
Resumo
Por ser um sistema multiusuário, o Linux precisa de uma maneira de rastrear quem possui e quem pode acessar cada arquivo. Isso é feito por meio de um sistema de permissões em três níveis. Nesta lição, aprendemos como esse sistema funciona.
Nesta lição, você aprendeu como usar ls
para obter informações sobre as permissões de arquivos, como controlar ou alterar quem pode criar, excluir ou modificar um arquivo com chmod
nas notações numérica e simbólica e como alterar a propriedade de arquivos com chown
e chgrp
.
Os seguintes comandos foram discutidos nesta lição:
ls
-
Lista os arquivos, incluindo opcionalmente detalhes como permissões.
chmod
-
Altera as permissões de um arquivo ou diretório..
chown
-
Altera o usuário e/ou o grupo proprietário de um arquivo ou diretório.
chgrp
-
Altera o grupo proprietário de um arquivo ou diretório.
Respostas aos Exercícios Guiados
-
Crie um diretório chamado
emptydir
usando o comandomkdir emptydir
. Em seguida, usandols
, liste as permissões do diretórioemptydir
.Adicionamos o parâmetro
-d
als
para ver os atributos de arquivo de um diretório, em vez de listar seu conteúdo. Assim, a resposta é:ls -l -d emptydir
Você ganha pontos extras se tiver juntado os dois parâmetros em um só, como em
ls -ld emptydir
. -
Crie um arquivo vazio chamado
emptyfile
com o comandotouch emptyfile
. Em seguida, usandochmod
com notação simbólica, adicione permissões de execução ao proprietário do arquivoemptyfile
e remova as permissões de gravação e execução para todos os outros. Faça isso usando apenas um comandochmod
.Pense desta maneira:
-
“Para o usuário que possui o arquivo (
u
) adicione (+
) permissões de execução (x
)”, portantou+x
. -
“Para o grupo (
g
) e outros usuários (o
), remova (-
) permissões de escrita (w
) e execução (x
)”, portantogo-wx
.Para combinar esses dois conjuntos de permissões, adicionamos uma virgula entre eles. Assim, o resultado final será:
chmod u+x,go-wx emptyfile
-
-
Quais serão as permissões de um arquivo chamado
text.txt
depois de você executar o comandochmod 754 text.txt
?Lembre-se de que em notação numérica cada dígito representa um conjunto de três permissões, cada uma com um valor respectivo: leitura é
4
, escrita é2
, execução é1
e a ausência de permissões é0
. Obtemos o valor de um dígito somando os valores correspondentes de cada permissão.7
é4+2+1
, ourwx
,5
é4+0+1
, our-x
, e4
é somente leitura, our--
. As permissões detext.txt
seriamrwxr-xr--
-
Vamos supor que um arquivo chamado
test.sh
seja um script do shell com as seguintes permissões e propriedade:-rwxr-sr-x 1 carol root 33 Dec 11 10:36 test.sh
-
Quais são as permissões do proprietário do arquivo?
As permissões do proprietário (2º ao 4 caracteres na saída de
ls -l
) sãorwx
, por isso a resposta é: “ler, escrever e executar o arquivo”. -
Se o usuário
john
executar esse script, sob quais privilégios de usuário ele será executado?Preste atenção às permissões do grupo. Elas são
r-s
, o que significa que o bit SGID está definido. O grupo proprietário do arquivo éroot
, de modo que o script, mesmo quando iniciado por um usuário regular, será executado com privilégios de root. -
Usando a notação numérica, qual deve ser a sintaxe do chmod para “desfazer” a permissão especial concedida a este arquivo?
Podemos “desfazer” as permissões especiais passando um 4º dígito,
0
, parachmod
. As permissões atuais são755
, então o comando deve serchmod 0755
.
-
-
Considere este arquivo:
$ ls -l /dev/sdb1 brw-rw---- 1 root disk 8, 17 Dec 21 18:51 /dev/sdb1
Que tipo de arquivo é
sdb1
? E quem pode escrever nele?O primeiro caractere da saída de
ls -l
mostra o tipo de arquivo.b
é um dispositivo de bloco, normalmente um disco (interno ou externo), conectado à máquina. O proprietário (root
) e todos os usuários do grupodisk
podem escrever nele. -
Considere os 4 arquivos a seguir:
drwxr-xr-t 2 carol carol 4,0K Dec 20 18:46 Another_Directory ----r--r-- 1 carol carol 0 Dec 11 10:55 foo.bar -rw-rw-r-- 1 carol carol 1,2G Dec 20 18:22 HugeFile.zip drwxr-sr-x 2 carol users 4,0K Jan 18 17:26 Sample_Directory
Escreva as permissões correspondentes a cada arquivo e diretório usando a notação numérica de 4 dígitos.
As permissões correspondentes, em notação numérica, são as seguintes:
Another_Directory
-
Resposta:
1755
1
para o sticky bit,755
para as permissões regulares (rwx
para o usuário,r-x
para grupo e outros). foo.bar
-
Resposta:
0044
Sem permissões especiais (de modo que o primeiro dígito é
0
), sem permissões para o usuário (---
) e somente leitura (r—r--
) para grupo e outros. HugeFile.zip
-
Resposta:
0664
+Sem permissões especiais, de modo que o primeiro dígito é0
.6
(rw-
) para usuário e grupo,4
(r--
) para outros. Sample_Directory
-
Resposta:
2755
2
para o bit SGID,7
(rwx
) para o usuário,5
(r-x
) para o grupo e outros.
Respostas aos Exercícios Exploratórios
-
Experimente o seguinte em um terminal: crie um arquivo vazio chamado
emptyfile
com o comandotouch emptyfile
. Agora “zere” as permissões do arquivo comchmod 000 emptyfile
. O que acontecerá se você mudar as permissões deemptyfile
passando apenas um valor dechmod
para o modo numérico, comochmod 4 emptyfile
? E se usarmos dois, comochmod 44 emptyfile
? O que aprendemos sobre a maneira comochmod
interpreta o valor numérico?Lembre-se de que “zeramos” as permissões de
emptyfile
. Assim, seu estado inicial seria:---------- 1 carol carol 0 Dec 11 10:55 emptyfile
Agora, vamos tentar o primeiro comando,
chmod 4 emptyfile
:$ chmod 4 emptyfile $ ls -l emptyfile -------r-- 1 carol carol 0 Dec 11 10:55 emptyfile
As permissões de outros foram alteradas. E se usássemos dois dígitos, como em
chmod 44 emptyfile
?$ chmod 44 emptyfile $ ls -l emptyfile ----r--r-- 1 carol carol 0 Dec 11 10:55 emptyfile
Agora, as permissões de grupo e outros foram afetadas. A partir daí, podemos concluir que em notação numérica,
chmod
lê o valor “de trás pra frente”, do dígito menos significativo (others) para o mais significativo (usuário). Se você passar um só dígito, as permissões de outros são modificadas. Com dois dígitos modificamos grupo e outros, com três modificamos usuário, grupo e outros e com quatro modificamos usuário, grupo, outros e as permissões especiais. -
É possível executar um arquivo para o qual você tem permissões de execução, mas não de leitura (
--x
)? Por que ou porque não?No início, a resposta parece óbvia: se você tem permissão de execução, o arquivo deveria poder ser executado. Isso se aplica aos programas em formato binário que são executados diretamente pelo kernel. No entanto, existem programas (por exemplo, scripts do shell) que devem antes ser lidos e interpretados. Nesses casos, a permissão de leitura (
r
) também deve ser configurada. -
Considere as permissões do diretório temporário em um sistema Linux,
/tmp
:$ ls -l /tmp drwxrwxrwt 19 root root 16K Dec 21 18:58 tmp
Usuário, grupo e outros têm permissões totais. Mas um usuário regular pode excluir qualquer arquivo dentro deste diretório? Por quê?
/tmp
é o que chamamos um diretório escrito por todos, ou seja, qualquer usuário pode escrever nele. Mas não queremos que um usuário modifique arquivos criados por outros, por isso o sticky bit foi definido (como indicado pelot
nas permissões de outros). Graças a isso, um usuário pode excluir arquivos em/tmp
, mas somente se tiver criado esses arquivos. -
. Um arquivo chamado
test.sh
tem as seguintes permissões:-rwsr-xr-x
, o que indica que o bit SUID foi definido. Agora, execute os seguintes comandos:$ chmod u-x test.sh $ ls -l test.sh -rwSr-xr-x 1 carol carol 33 Dec 11 10:36 test.sh
O que nós fizemos? O que significa o
S
maiúsculo?Removemos as permissões de execução do usuário dono do arquivo. O
s
(out
) toma o lugar dox
na saída dels -l
, por isso o sistema precisa de uma maneira de mostrar se o usuário tem permissões de execução ou não. Para isso, ele muda a caixa do caractere especial.Um
s
minúsculo no primeiro grupo de permissões indica que o usuário dono do arquivo tem permissões de execução e que o bit SUID foi definido. UmS
maiúsculo indica que o usuário dono do arquivo não tem (-
) permissões de execução e que o bit SUID foi definido.Pode-se dizer o mesmo do SGID. Um
s
minúsculo no segundo grupo de permissões indica que o grupo dono do arquivo tem permissões de execução e que o bit SUID foi definido. UmS
maiúsculo indica que o grupo dono do arquivo não tem (-
) permissões de execução e que o bit SUID foi definido.Isso também vale para o sticky bit, representado pelo
t
No terceiro grupo de permissões. Ot
minúsculo indica que o sticky bit foi definido e que os outros têm permissões de execução. OT
maiúsculo indica que o sticky bit foi definido e que os outros não têm permissões de execução. -
Como criar um diretório chamado
Box
no qual todos os arquivos pertençam automaticamente ao grupousers
e só possam ser removidos pelo usuário que os criou?Este seria um processo de vários passos. O primeiro é criar o diretório:
$ mkdir Box
Queremos que cada arquivo criado dentro deste diretório seja atribuído automaticamente ao grupo
users
. Para isso, configuramos esse grupo como proprietário do diretório, depois definimos nele o bit SGID. Também precisamos garantir que qualquer membro do grupo possa escrever nesse diretório.Como não precisamos nos importar com as outras permissões e queremos apenas “ligar” os bits especiais, faz sentido usar o modo simbólico:
$ chown :users Box/ $ chmod g+wxs Box/
Note que se seu usuário atual não pertencer ao grupo
users
, será necessário usar o comandosudo
antes dos comandos acima para fazer a alteração como root.Para terminar, vamos garantir que somente o usuário criador de um arquivo tem a permissão de excluí-lo. Para isso, definimos o sticky bit (representado por um
t
) no diretório. Lembre-se de que ele é configurado nas permissões de outros (o
).$ chmod o+t Box/
As permissões do diretório
Box
devem aparecer da seguinte maneira:drwxrwsr-t 2 carol users 4,0K Jan 18 19:09 Box
Claro que também é possível especificar o bit SGID e o sticky bit usando somente um comando
chmod
:$ chmod g+wxs,o+t Box/
Se você pensou nisso, parabéns!