104.5 Gerenciar Permissões e Owership de Arquivos (Peso 3)
Ter a capacidade de controlar acesso a arquivos e também e utilizar o controle de permissões e ownerships de modo adequado.
- Gerenciar acesso a permissões em arquivos regulares e especiais como também em diretórios
- Utilizar modos de acesso como o
suid
,sgid
e osticky bit
para manter a segurança - Saber como mudar a máscara de criação de arquivos
- Utilizar o campo de grupo para garantir acesso a arquivos menbros de grupos
chmod
O comando chmod
segundo o man
é:
chmod changes the file mode bits of each given file according to mode, which can be either a symbolic representation of changes to make, or an octal number representing the bit pattern for the new mode bits.
Em resumo esse comando altera as pemissões de um arquivo ou diretório. Através de parâmetros utilizando letras
que podemos chamar de símbolico e o octal que utiliza números.
Modo Símbolico
Para visualizar as pemissões de um arquivo iremos executar o comando
ls -l arquivo.txt
-rwxrwxrwx 1 alphabraga alphabraga 0 Abr 10 23:02 arquivo.txt
As permissões do arquivo arquivo.txt
são representadas pelos caracteres -rw-rw-r--
.
r
permissão de leitura (read)w
permissão de escrita (write)x
permissão de execução (execution)
Esses caracteres representam de forma simplificada 3 níveis de permissão:
- rwxrwxrwx permissões de usuário
- rwxrwxrwx permissões de grupo
- rwxrwxrwx permissões de outros
Primeiro vamos remover todas as permissões do arquivo
sudo chmod 000 arquivo.txt
Para atribuir ao dono do arquivo a permissão de leitura:
chmod u=r arquivo.txt
ls -la arquivo.txt
-r-------- 1 alphabraga alphabraga 0 Abr 10 23:02 arquivo.txt
Para remover a permissão utilizamos o sinal de -
chmod u-r arquivo.txt
ls -l arquivo.txt
---------- 1 alphabraga alphabraga 0 Abr 10 23:02 arquivo.txt
Podemos adicionar e remover varias permissões ao mesmo tempo
chmod u+rwx arquivo.txt
ls -l arquivo.txt
-rwx------ 1 alphabraga alphabraga 0 Abr 10 23:02 arquivo.txt
Ou ainda assim para o dono:
chmod u=rwx arquivo.txt
ls -l arquivo.txt
-rwx------ 1 alphabraga alphabraga 0 Abr 10 23:02 arquivo.txt
Para o grupo:
chmod g=rwx arquivo.txt
ls -l arquivo.txt
----rwx--- 1 alphabraga alphabraga 0 Abr 10 23:02 arquivo.txt
Para os outros:
chmod o=rwx arquivo.txt
ls -l arquivo.txt
-------rwx 1 alphabraga alphabraga 0 Abr 10 23:02 arquivo.txt
Dar permissão de execução para o dono, o grupo e os outros:
chmod +x arquivo.txt
ls -l arquivo.txt
---x--x--x 1 alphabraga alphabraga 0 Abr 10 23:02 arquivo.txt
-R, –recursive
Realiza as alterações de forma recursiva
Modo Octal
O modo octal utiliza o o comando chmod para alterar as pemissoes só que em vez de letras usamos o apenas números onde:
- 4 = leirura
- 2 = escrita
- 1 = execução
chmod 655 arquivo.txt
ls -l arquivo.txt
---x--x--x 1 alphabraga alphabraga 0 Abr 10 23:02 arquivo.txt
chown
O comando chown
(Change Owner) realiza a alteração do dono e do grupo do arquivo
ls -l arquivo.txt
---x--x--x 1 outro outrogrupo 0 Abr 10 23:02 arquivo.txtchown alphabraga arquivo.txt
ls -l arquivo.txt
---x--x--x 1 alphabraga outrogrupo 0 Abr 10 23:02 arquivo.txt
Agora para mudar o grupo podemos fazer assim:
ls -l arquivo.txt
---x--x--x 1 outro outrogrupo 0 Abr 10 23:02 arquivo.txtchown alphabraga:alphabraga arquivo.txt
ls -l arquivo.txt
---x--x--x 1 alphabraga alphabraga 0 Abr 10 23:02 arquivo.txt
Para mudar só o grupo
ls -l arquivo.txt
---x--x--x 1 outro outrogrupo 0 Abr 10 23:02 arquivo.txtchown :alphabraga arquivo.txt
ls -l arquivo.txt
---x--x--x 1 outro alphabraga 0 Abr 10 23:02 arquivo.txt
Podemos usar o separador .
para separar o usuario do grupo
ls -l arquivo.txt
---x--x--x 1 outro outrogrupo 0 Abr 10 23:02 arquivo.txtchown .alphabraga arquivo.txt
ls -l arquivo.txt
---x--x--x 1 outro alphabraga 0 Abr 10 23:02 arquivo.txt
-R, –recursive
Com o -R
podemos aplicar as alterações de forma recursiva, para toda uma pasta por exemplo.
sudo chown -R root:root dir-perms
ls -l dir-perms/*
-rw-rw-r-- 1 root root 0 Apr 12 14:09 dir-perms/exemplo-0.txt -rw-rw-r-- 1 root root 0 Apr 12 14:09 dir-perms/exemplo-10.txt -rw-rw-r-- 1 root root 0 Apr 12 14:09 dir-perms/exemplo-11.txt -rw-rw-r-- 1 root root 0 Apr 12 14:09 dir-perms/exemplo-12.txt -rw-rw-r-- 1 root root 0 Apr 12 14:09 dir-perms/exemplo-13.txt -rw-rw-r-- 1 root root 0 Apr 12 14:09 dir-perms/exemplo-14.txt -rw-rw-r-- 1 root root 0 Apr 12 14:09 dir-perms/exemplo-15.txt -rw-rw-r-- 1 root root 0 Apr 12 14:09 dir-perms/exemplo-16.txt
chgrp
Esse comando muda apenas o grupo do arquivo.
umask
Sempre que o usuário realiza a criação de um arquivo ou diretorio no sistema operacional o mesmo os cria utilizando dois parametros. O primeiro é permissão padrão do elemento criado. Para arquivos a permissão padão é a 666
, já para diretorios é a 777
.
A permissão padrão para criar arquivos é 666 e para diretórios é 777
O segundo parametro utilizado para a criação de arquivos e diretórios é a mascara padrão do sistema. A mascara padrão do sistema é um valor octal que sera subtraido do valor da permissão padrão. O comando umask
retorna o valor da máscara.
Sendo assim a permissão de um arquivo em um sistema linux é igual a 666 - umask
. E a permissão de um diretório é 777 - o umask
.
Para saber o umask
padrão do sistema iremos utilizar o comando umask.
umask
002
Admitindo que o umask é igual a 002
. A permissão final do arquivo será igual a 664
, ou seja, rw-rw-r--
.
666
- 002
____
664
Podemos comprovar isso dando criando e listando o arquivo recem criado.
touch minhas-perms.txt
ls -l minhas-perms.txt
-rw-rw-r-- 1 alphabraga alphabraga 0 Apr 12 13:59 minhas-perms.txtstat minhas-perms.txt
File: 'minhas-perms.txt' Size: 0 Blocks: 0 IO Block: 4096 regular empty file Device: 801h/2049d Inode: 37506501 Links: 1 Access: (0664/-rw-rw-r--) Uid: ( 1000/alphabraga) Gid: ( 1000/alphabraga) Access: 2018-04-12 13:59:02.778333875 -0300 Modify: 2018-04-12 13:59:02.778333875 -0300 Change: 2018-04-12 13:59:02.778333875 -0300
Da mesma forma que ao criar um diretorio a permissão final do diretório será 775
ou ainda rwxrwxr-x
777
- 002
____
775
mkdir dir-perms
ls -l | grep dir-perms
drwxrwxr-x 2 alphabraga alphabraga 4096 Apr 12 14:01 dir-permsstat dir-perms
File: 'dir-perms' Size: 4096 Blocks: 8 IO Block: 4096 directory Device: 801h/2049d Inode: 45350989 Links: 2 Access: (0775/drwxrwxr-x) Uid: ( 1000/alphabraga) Gid: ( 1000/alphabraga) Access: 2018-04-12 14:01:22.751563302 -0300 Modify: 2018-04-12 14:01:19.599535514 -0300 Change: 2018-04-12 14:01:19.599535514 -0300 Birth: -