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 o sticky 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.txt
chown 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.txt
chown 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.txt
chown :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.txt
chown .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.txt
stat 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-perms
stat 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: -