104.5 Lição 1
Certificação: |
LPIC-1 |
---|---|
Versão: |
5.0 |
Tópico: |
104 Dispositivos, sistemas de arquivos do Linux, hierarquia padrão de sistemas de arquivos |
Objetivo: |
104.5 Gerenciar permissões e propriedade de arquivos |
Lição: |
1 de 1 |
Introdução
Por ser um sistema multiusuário, o Linux precisa de alguma forma de rastrear quem é o proprietário de cada arquivo e se um usuário tem ou não permissão para executar ações em um arquivo. Isso serve para garantir a privacidade dos usuários que desejam manter o conteúdo de seus arquivos em sigilo, bem como para permitir 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 em disco pertence a um usuário e a um grupo de usuários e tem três conjuntos de permissões: um para seu proprietário, um para o grupo que possui o arquivo e um para todos os outros. Nesta lição, você aprenderá a consultar as permissões de um arquivo, o significado dessas permissões e como manipulá-las.
Consulta de informações sobre arquivos e diretórios
O comando ls
é usado para obter uma lista do conteúdo de qualquer diretório. Em sua forma mais básica, tudo o que você obtém são os nomes dos arquivos:
$ ls Another_Directory picture.jpg text.txt
Mas há muito mais informações disponíveis para cada arquivo, incluindo seu tipo, tamanho, propriedade e muito mais. Para ver essas informações, você deve pedir ao ls
uma lista de “formato longo”, 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 da saída acima tem um significado. Vamos dar uma olhada nas colunas relevantes para esta lição.
-
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õe do proprietário do arquivo, também chamado de usuário 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 de todos os outros ouo
.
-
Tip
|
Também é comum chamar as permissões de outros de permissões world (mundo), como em “Todo mundo tem essas permissões”. |
-
A terceira e quarta colunas mostram informações sobre a propriedade: respectivamente o usuário e o grupo que possuem o arquivo.
-
A sétima e a última colunas mostram o nome do arquivo.
A segunda coluna indica o número de links físicos que apontam para aquele arquivo. A quinta coluna mostra o tamanho do arquivo. A sexta coluna mostra a data e hora em que o arquivo foi modificado pela última vez. Mas essas colunas não são relevantes para o tópico atual.
E quanto aos diretórios?
Se você solicitar informações sobre um diretório usando ls -l
, ele mostra 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 próprio diretório, 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 listagem do diretório que recuperamos 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
Existem três outros 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 o nome começa com .
.
Os diretórios .
e ..
, porém, são especiais. .
é um ponteiro para o diretório atual. E ..
é um ponteiro para o diretório pai, aquele que contém o atual. No Linux, cada diretório contém pelo menos esses dois diretórios.
Tip
|
É possível combinar os parâmetros do |
Entendendo os tipos de arquivos
Já mencionamos que a primeira letra em cada saída de ls -l
descreve o tipo do arquivo. Os três tipos de arquivo mais comuns são:
-
(arquivo normal)-
Um arquivo pode conter dados de qualquer tipo e ajuda a gerenciar esses dados. Os arquivos podem ser modificados, movidos, copiados e excluídos.
d
(diretório)-
Um diretório contém outros arquivos ou 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 ponteiro para outro arquivo ou diretório em outro local no sistema de arquivos.
Além desses, existem três outros tipos de arquivo que você precisa pelo menos conhecer, mas estão fora do escopo desta lição:
b
(dispositivo de bloco)-
Este arquivo representa um dispositivo virtual ou físico, geralmente discos ou outros tipos de dispositivos de armazenamento, como o primeiro disco rígido, que pode ser representado por
/dev/sda
. c
(dispositivo de caracteres)-
Este arquivo representa um dispositivo virtual ou físico. Terminais (como o terminal principal em
/dev/ttyS0
) e portas seriais são exemplos comuns de dispositivos de caracteres. s
(socket)-
Sockets servem como “canais” passando informações entre dois programas.
Warning
|
Não altere nenhuma permissão nos dispositivos de bloco, dispositivos de caracteres ou sockets, a menos que saiba muito bem o que está fazendo. Isso pode fazer o sistema parar 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, como três grupos de três caracteres cada, na ordem r
, w
e x
. Eis o que significam. Lembre-se de que um traço -
representa a falta de permissão.
Permissões de arquivos
r
-
Significa read (leitura) e tem um valor octal de
4
(não se preocupe, falaremos de octais em breve). Indica permissão para abrir um arquivo e ler seu conteúdo. w
-
Significa write (escrita) e tem um valor octal de
2
. Indica permissão para editar ou excluir um arquivo. x
-
Significa execute (execução) e tem um valor octal de
1
. Indica que o arquivo pode ser executado como um executável ou script.
Assim, 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
-
Significa read (leitura) e tem um valor octal de
4
. Indica permissão para ler o conteúdo do diretório, como nomes de arquivos. Mas não implica em permissão para ler os arquivos em si. w
-
Stands for write and has an octal value of
2
. This means permission to create or delete files in a directory.Keep in mind that you cannot make these changes with write permissions alone, but also need execute permission (
x
) to change to the directory. x
-
Significa execute (execução) e tem um valor octal de
1
. Indica permissão para entrar em um diretório, mas não para listar seus arquivos (para isso,r
é necessário).
A última parte sobre diretórios pode parecer um pouco confusa. Vamos imaginar, por exemplo, que você tem um diretório chamado Another_Directory
, com as seguintes permissões:
$ ls -ld Another_Directory/ d--x--x--x 2 carol carol 4,0K Dec 20 18:46 Another_Directory
Imagine também que dentro deste diretório há um script de shell chamado hello.sh
:
-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
, receberá uma mensagem de erro, pois seu usuário não tem permissão de leitura para esse diretório:
$ ls -l Another_Directory/ ls: cannot open directory 'Another_Directory/': Permission denied
No entanto, a usuária carol
tem permissões de execução, o que significa que ela pode entrar no diretório. Portanto, a usuária carol
pode acessar arquivos dentro do diretório, desde que tenha as permissões corretas para o respectivo arquivo. Vamos supor que a usuária tem permissões totais (rwx
) para o script hello.sh
. Nesse caso, se souber o nome do arquivo completo, ela pode executar o script, embora não possa ler o conteúdo do diretório que o contém:
$ sh Another_Directory/hello.sh Hello LPI World!
Como dissemos antes, as permissões são especificadas em sequência: primeiro para o proprietário do arquivo, depois para o grupo proprietário e, em seguida, para outros usuários. Sempre que alguém tenta realizar uma ação no arquivo, as permissões são verificadas na mesma ordem.
Primeiro, o sistema verifica se o usuário atual possui o arquivo e, se for o caso, ele 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 o segundo conjunto de permissões apenas. 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 se as permissões do grupo ou outras forem mais permissivas do que as do proprietário.
Modificando as permissões de arquivos
O comando chmod
é usado para modificar as permissões de um arquivo, e pede pelo menos dois parâmetros: o primeiro descreve quais permissões alterar, o segundo aponta para o arquivo ou diretório onde a alteração será feita. Lembre-se de que apenas o proprietário do arquivo ou o administrador do sistema (root) pode alterar as permissões em um arquivo.
As permissões a alterar podem ser descritas de duas maneiras, ou “modos”, diferentes.
O primeiro, denominado modo simbólico, oferece um controle refinado, permitindo adicionar ou revogar uma única permissão sem modificar as outras no conjunto. O outro modo, chamado modo octal, é mais fácil de lembrar e mais rápido de usar quando desejamos definir todos os valores de permissão de uma vez.
Ambos os modos levam ao mesmo resultado final. Assim, por exemplo, os comandos:
$ chmod ug+rw-x,o-rwx text.txt
e
$ chmod 660 text.txt
produzem 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 ver como cada modo funciona.
Modo simbólico
Ao descrever quais permissões alterar no modo simbólico, o(s) primeiro(s) caractere(s) indica(m) as permissões que serão alteradas: de usuário (u
), grupo (g
), outros (o
) e/ou todos (a
).
Então você precisa dizer ao comando o que fazer: você pode conceder uma permissão (+
), revogar uma permissão (-
) ou defini-la com um valor específico (=
).
Por último, você especifica em qual permissão deseja agir: leitura (r
), escrita (w
) ou execução (x
).
Por exemplo, imagine que temos um arquivo chamado text.txt
com o seguinte conjunto de permissões:
$ ls -l text.txt -rw-r--r-- 1 carol carol 765 Dec 20 21:25 text.txt
Se você deseja conceder permissões de gravação aos membros do grupo proprietário do arquivo, deve usar o parâmetro g+w
. É mais fácil pensar desta forma: “Para o grupo (g
), conceda (+
) permissões de escrita (w
)”. Então, o comando seria:
$ 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
Deseja remover as permissões de leitura para o proprietário do mesmo arquivo? Pense assim: “Para o usuário (u
), revogue (-
) as permissões de leitura (r
)”. Portanto, o parâmetro é 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? Nesse caso, pensamos assim: “Para todos (a
), defina exatamente (=
) leitura (r
), escrita (w
), e 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
Claro, é possível modificar diversas permissões ao mesmo tempo. Neste caso, separe-os com uma 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
também possui 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, antes das permissões a alterar:
$ chmod -R u+rwx Another_Directory/
Este comando pode ser lido como: “Recursivamente (-R
), para o usuário (u
), conceda (+
) permissões de leitura, escrita e execução (rwx
)”.
Warning
|
Tenha cuidado e pense duas vezes antes de usar a opção |
Modo octal
No modo octal, as permissões são especificadas de maneira diferente: como um valor 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 execução (x
), representada por 1
. Se não houver permissão, usamos o valor zero (0
). Portanto, uma permissão rwx
seria 7
(4 + 2 + 1
) e rx
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 outros (o
). Se quisermos 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 octal é a mesma que no modo simbólico: o primeiro parâmetro representa as permissões que você deseja alterar e o segundo aponta para o arquivo ou diretório onde a alteração será feita.
Tip
|
Se o valor de uma permissão for ímpar, o arquivo certamente é executável! |
Qual sintaxe você deve usar? O modo octal é recomendado quando se deseja alterar as permissões para um valor específico, por exemplo 640
(rw- r-- ---
).
O modo simbólico é mais útil se você deseja inverter apenas um valor específico, independentemente das permissões atuais do arquivo. Por exemplo, você pode adicionar permissões de execução para o usuário usando apenas chmod u+x script.sh
sem levar em conta, ou mesmo tocar, as permissões atuais de grupo e outros.
Modificando o proprietário de um arquivo
O comando chown
é usado para modificar a propriedade 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 mudar o grupo proprietário do arquivo para um 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 possui o arquivo. No exemplo acima, o usuário carol
não precisa ser um membro do grupo students
.
O conjunto de permissões de usuário ou grupo pode ser omitido se você não quiser alterá-lo. Portanto, para alterar apenas o grupo que possui um arquivo, o comando seria chown: students text.txt
. Para alterar apenas o usuário, o comando seria chown carol: text.txt
ou apenas chown carol text.txt
. Alternativamente, você pode usar o comando chgrp students text.txt
.
A menos que você seja o administrador do sistema (root), não é possível mudar a propriedade de um arquivo para outro usuário ou grupo ao qual você não pertence. Se tentar fazer isso, aparecerá a mensagem de erro Operation not allowed
.
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.
Para ver quais grupos existem em seu sistema, digite getent group
. A saída será semelhante a esta (a saída foi abreviada):
$ getent group root:x:0: daemon:x:1: bin:x:2: sys:x:3: adm:x:4:syslog,rigues tty:x:5:rigues disk:x:6: lp:x:7: mail:x:8: news:x:9: uucp:x:10:rigues
Se quiser saber a quais grupos um usuário pertence, adicione o nome de usuário como um parâmetro a groups
:
$ groups carol carol : carol students cdrom sudo dip plugdev lpadmin sambashare
Para fazer o inverso (ver quais usuários pertencem a um grupo), use groupmems
. O parâmetro -g
especifica o grupo, e -l
lista todos os seus membros:
# groupmems -g cdrom -l carol
Tip
|
|
Permissões padrão
Vamos fazer uma experiência. Abra uma janela de terminal e crie um arquivo vazio com o seguinte comando:
$ touch testfile
Agora, vamos dar uma olhada nas permissões deste arquivo. Eles podem ser diferentes em seu sistema, mas vamos supor que sejam mais ou menos assim:
$ ls -lh testfile -rw-r--r-- 1 carol carol 0 jul 13 21:55 testfile
As permissões são rw-r—r--
: leitura e escrita para o usuário, e leitura para o grupo e outros, ou 644
no modo octal. Agora, tente criar um diretório:
$ mkdir testdir $ ls -lhd testdir drwxr-xr-x 2 carol carol 4,0K jul 13 22:01 testdir
Agora as permissões são rwxr-xr-x
: leitura, escrita e execução para o usuário, leitura e execução para o grupo e outros, ou 755
no modo octal.
Não importa onde você esteja no sistema de arquivos, cada arquivo ou diretório que criar terá as mesmas permissões. Você já se perguntou de onde eles vêm?
Elas vêm da máscara de usuário ou umask
, que define as permissões padrão para cada arquivo criado. Você pode verificar os valores atuais com o comando umask
:
$ umask 0022
Mas isso não se parece com rw-r—r--
, ou mesmo 644
. Talvez devêssemos tentar com o parâmetro -S
, para obter uma saída em modo simbólico:
$ umask -S u=rwx,g=rx,o=rx
Essas são as mesmas permissões que nosso diretório de teste obteve em um dos exemplos acima. Mas por que quando criamos um arquivo as permissões eram diferentes?
Bem, não faz sentido definir permissões globais de execução para todos em qualquer arquivo por padrão, certo? Os diretórios precisam de permissões de execução (caso contrário, não é possível entrar neles), mas os arquivos não, então eles não as recebem. Daí o rw-r—r--
.
Além de exibir as permissões padrão, o umask
também pode ser usado para alterá-las para sua sessão do shell atual. Por exemplo, se usarmos o comando:
$ umask u=rwx,g=rwx,o=
Cada novo diretório irá herdar as permissões rwxrwx---
, e cada arquivo rw-rw----
(já que eles não recebem permissões de execução). Se você repetir os exemplos acima para criar um testfile
e testdir
e verificar as permissões, o resultado será:
$ ls -lhd test* drwxrwx--- 2 carol carol 4,0K jul 13 22:25 testdir -rw-rw---- 1 carol carol 0 jul 13 22:25 testfile
E se você marcar o umask
sem o parâmetro -S
(modo simbólico), você obterá:
$ umask 0007
O resultado não parece familiar porque os valores usados são diferentes. Eis uma tabela com todos os valores e seus respectivos significados:
Value | Permission for Files | Permission for Directories |
---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Como vemos, 007
corresponde a rwxrwx---
, exatamente como solicitamos. O zero inicial pode ser ignorado.
Permissões especiais
Além das permissões de leitura, gravação e execução para usuário, grupo 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 no modo simbólico ou octal e são as seguintes:
Sticky Bit
O sticky bit, também chamado de sinalizador de exclusão restrito, tem o valor octal 1
e no modo simbólico é representado por um t
dentro das permissões de outros. Ele se aplica apenas a diretórios e não tem efeito em arquivos normais. No Linux, ele 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 mostram um t
substituindo o 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 octal, as permissões especiais são especificadas usando uma notação de 4 dígitos, sendo que o primeiro dígito representa a permissão especial sobre a qual agir. Por exemplo, para definir o sticky bit (valor 1
) para o diretório Another_Directory
no modo octal, 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 Set Group ID bit, tem o valor octal 2
e no modo simbólico é representado por um s
nas permissões de grupo. Ele pode ser aplicado a arquivos executáveis ou diretórios. Nos arquivos, fará com que o processo seja executado com os privilégios do grupo que possui o arquivo. Quando aplicado a diretórios, fará com que cada arquivo ou diretório criado herde o grupo do diretório pai.
Arquivos e diretórios com o bit SGID mostram um s
no lugar do x
nas permissões de grupo na saída de ls -l
:
$ ls -l test.sh -rwxr-sr-x 1 carol root 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 o ajudará a entender melhor os efeitos do SGID em um diretório. Suponha que temos um diretório chamado Sample_Directory
, pertencente à usuária 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 esse 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 podemos ver, o arquivo é propriedade da usuária carol
e do 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
O grupo que possui o arquivo é users
. Isso ocorre porque o bit SGID fez o arquivo herdar o proprietário do grupo de seu 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 não tem efeito em diretórios. 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 octal 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
no modo simbólico, 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 seriam as permissões padrão de um arquivo se o valor de
umask
for definido como027
? -
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?
-
Usando a notação octal, qual seria 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 octal, como emchmod 4 emptyfile
? E se usarmos dois, como emchmod 44 emptyfile
? O que aprendemos sobre a maneira comochmod
interpreta o valor numérico? -
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
Nesta lição, você aprendeu como usar o ls
para obter (e decodificar) informações sobre permissões de arquivo, como controlar ou alterar quem pode criar, excluir ou modificar um arquivo com chmod
, tanto nos modos octal e simbólico como para alterar a propriedade de arquivos com chown
e chgrp
, e como consultar e alterar a máscara de permissões padrão para arquivos e diretórios com umask
.
Os seguintes comandos foram abordados nesta lição:
ls
-
Lista os arquivos, incluindo opcionalmente detalhes como as 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.
umask
-
Permite consultar ou definir a máscara de permissões padrão para arquivos e diretórios
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
no modo simbólico, 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 seriam as permissões padrão de um arquivo se o valor de
umask
for definido como020
?As permissões seriam
rw-r-----
-
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”. -
Usando a notação octal, qual seria 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
, para ochmod
. As permissões atuais são755
, de modo que o comando seriachmod 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
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
0044
. Nenhuma permissão especial (por isso o primeiro dígito é0
), sem permissões para o usuário (---
) e somente leitura (r—r--
) para grupo e outros.HugeFile.zip
0664
. Nenhuma permissão especial, por isso o primeiro dígito é0
.6
(rw-
) para o usuário e grupo,4
(r--
) para os outros.Sample_Directory
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 octal, como emchmod 4 emptyfile
? E se usarmos dois, como emchmod 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
Viu só? 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 disso, concluímos que no modo octal o
chmod
lê o valor “de trás pra frente”, do dígito menos significativo (outros) para o mais sigbificativo (usuário). Se você passar um dígito, modifica as permissões de outros. Com dois dígitos, modificamos grupo e outros, com três modificamos usuário, grupo e outros e com quatro dígitos modificamos usuário, grupo, outros e as permissões especiais. -
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 “ativar” 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!