Comandos Shell (Bash) para Gerenciar Permissões de Arquivos e Diretórios

Comando ls

Como mencionado anteriormente, o uso de ls -l exibe as permissões de arquivos e diretórios, não sendo necessário repetir aqui.

Comando chmod

O comando chmod serve para modificar as permissões de arquivos ou diretórios.

Existem dois modos disponíveis:

1) Modo de expressão simbólica

Formato: chmod [OPÇÃO]...[ugoa][[+-=][rwxug]][,...] ARQUIVO...

Onde:

  • Letras "ugoa": Combinam para controlar quais usuários terão suas permissões de acesso ao arquivo alteradas. Se não especificado, o resultado é o mesmo que "a".
  • u: Dono do arquivo ou diretório
  • g: Membros do grupo do arquivo ou diretório
  • o: Outros usuários não pertencentes ao grupo do arquivo ou diretório
  • a: Todos os usuários (equivalente a ugo)
  • Operadores "+-=": Indicam a concessão e remoção de permissões.
  • +: As permissões selecionadas serão adicionadas
  • -: As permissões selecionadas serão removidas
  • =: Apenas as permissões selecionadas serão mantidas
$ ls -l documento.txt # Verificar permissões do arquivo
-rw-rw-r--. 1 usuario1 grupo1 0 Junho 15 14:22 documento.txt

$ chmod g-w documento.txt # Remover permissão de escrita para o grupo
$ ls -l documento.txt 
-rw-r--r--. 1 usuario1 grupo1 0 Junho 15 14:22 documento.txt

$ chmod o+w documento.txt # Adicionar permissão de escrita para outros usuários
$ ls -l documento.txt 
-rw-r--rw-. 1 usuario1 grupo1 0 Junho 15 14:22 documento.txt

$ chmod u=rwx documento.txt # Definir permissões do dono para leitura, escrita e execução
$ ls -l documento.txt 
-rwxr--rw-. 1 usuario1 grupo1 0 Junho 15 14:22 documento.txt

$ chmod o=g documento.txt # Definir permissões de outros usuários iguais às do grupo
$ ls -l documento.txt 
-rwxr--r--. 1 usuario1 grupo1 0 Junho 15 14:22 documento.txt

$ chmod a+rwx documento.txt # Conceder permissões de leitura, escrita e execução para todos
$ ls -l documento.txt 
-rwxrwxrwx. 1 usuario1 grupo1 0 Junho 15 14:22 documento.txt

2) Modo octal

Utiliza números para represetnar permissões: leitura (4), escrita (2) e execução (1). O valor de cada grupo de usuários é a soma desses dígitos (0 a 7).

$ chmod 777 documento.txt # Modificar permissões, 7 significa rwx (todos têm leitura, escrita e execução)

$ chmod -R 775 * # Modificar recursivamente permissões de todos arquivos e subdiretórios, 5 significa r-x (donos e grupo têm leitura e execução)

$ find . -type f -exec chmod 644 {} \; # Combinar com find para modificar apenas permissões de arquivos

Comandos chown e chgrp

O comando chown modifica o dono e o grupo de arquivos ou diretórios.

Sintaxe: chown [OPÇÃO]... [DONO][:[GRUPO]] ARQUIVO


# chown root documento.txt # Modificar dono do arquivo
# ls -l documento.txt 
-rwxrwxrwx. 1 root grupo1 0 Junho 15 14:22 documento.txt

# chown :root documento.txt # Modificar grupo do arquivo
# ls -l documento.txt 
-rwxrwxrwx. 1 root root 0 Junho 15 14:22 documento.txt

# chown usuario1:grupo1 documento.txt # Modificar dono e grupo simultaneamente
# ls -l documento.txt 
-rwxrwxrwx. 1 usuario1 grupo1 0 Junho 15 14:22 documento.txt

# ln -s documento.txt link_simbolico # Criar link simbólico
# ls -l
lrwxrwxrwx. 1 usuario1 grupo1    5 Junho 17 11:23 link_simbolico -> documento.txt
-rwxrwxrwx. 1 usuario1 grupo1    0 Junho 15 14:22 documento.txt

# chown root:root link_simbolico # Tentar modificar dono do link simbólico
# ls -l
lrwxrwxrwx. 1 usuario1   grupo1      5 Junho 17 11:23 link_simbolico -> documento.txt
-rwxrwxrwx. 1 root       root        0 Junho 15 14:22 documento.txt

# chown -h :root link_simbolico # Usar opção -h para modificar apenas o link
# ls -l
lrwxrwxrwx. 1 usuario1 root        5 Junho 17 11:23 link_simbolico -> documento.txt
-rwxrwxrwx. 1 root      root       0 Junho 15 14:22 documento.txt

# chown --from=usuario1 root documento.txt # Usar --from para modificar apenas se o dono atual corresponder

# chown --from=:grupo1 :root documento.txt # Usar --from para verificar e modificar grupo

# chown -R root:root /diretorio_raiz # Modificar recursivamente dono e grupo de todos arquivos e subdiretórios

Modificação recursiva através de links simbólicos de diretórios


# mkdir d/d1 d/d2 d/d3
# ln -s d link_diretorio # Criar link simbólico para diretório
# ls -l
drwxr-xr-x. 5 root   root   4096 Junho 17 11:27 d
lrwxrwxrwx. 1 root   root      1 Junho 17 11:27 link_diretorio -> d
# ls -l d
total 12
drwxr-xr-x. 2 root root 4096 Junho 17 11:27 d1
drwxr-xr-x. 2 root root 4096 Junho 17 11:27 d2
drwxr-xr-x. 2 root root 4096 Junho 17 11:27 d3

# chown -R usuario1:grupo1 link_diretorio # Tentar modificar dono e grupo recursivamente
# ls -l
drwxr-xr-x. 5 root   root   4096 Junho 17 11:27 d
lrwxrwxrwx. 1 usuario1 grupo1    1 Junho 17 11:27 link_diretorio -> d
# ls -l d
total 12
drwxr-xr-x. 2 root root 4096 Junho 17 11:27 d1
drwxr-xr-x. 2 root root 4096 Junho 17 11:27 d2
drwxr-xr-x. 2 root root 4096 Junho 17 11:27 d3


# chown -R -H usuario1:grupo1 link_diretorio # Usar opção -H para modificar recursivamente através do link
# ls -l
drwxr-xr-x. 5 usuario1 grupo1 4096 Junho 17 11:27 d
lrwxrwxrwx. 1 usuario1 grupo1    1 Junho 17 11:27 link_diretorio -> d
# ls -l d
total 12
drwxr-xr-x. 2 usuario1 grupo1 4096 Junho 17 11:27 d1
drwxr-xr-x. 2 usuario1 grupo1 4096 Junho 17 11:27 d2
drwxr-xr-x. 2 usuario1 grupo1 4096 Junho 17 11:27 d3

Comando chmod - Configurando permissões setuid e setgid

O setuid (set user ID) é uma permissão que permite que usuários executem um programa com as permissões do dono do arquivo.

O setgid (set group ID) é uma permissão que permite que usuários executem um programa com as permissões do grupo do arquivo.

Aviso: A configuração dessas permissões deve ser feita com cuidado, pois pode representar riscos de segurança.

$ ls -l script_teste.sh # Verificar se o arquivo tem setuid e setgid
-rwxrw-r--. 1 usuario1 grupo1 28 Junho 18 11:32 script_teste.sh

$ stat script_teste.sh # Outro método para verificar permissões especiais
  Arquivo: 'script_teste.sh'
  Tamanho: 28             Blocos: 8          IO Block: 4096   arquivo regular
Dispositivo: fd01h/64769d    Inode: 265184      Links: 1
Acesso: (0764/-rwxrw-r--)  Uid: ( 1002/  usuario1)   Gid: ( 1002/  grupo1)
Contexto: unconfined_u:object_r:user_home_t:s0
Acesso: 2020-06-18 11:32:15.472037672 +0800
Modificação: 2020-06-18 11:32:15.473037672 +0800
Alteração: 2020-06-18 11:32:24.613037672 +0800
 Criação: -
 
$ chmod u+s script_teste.sh # Configurar setuid usando modo simbólico
$ ls -l script_teste.sh # Verificar, agora tem setuid
-rwsrw-r--. 1 usuario1 grupo1 28 Junho 18 11:32 script_teste.sh

$ chmod g+s script_teste.sh # Configurar setgid usando modo simbólico
$ ls -l script_teste.sh # Verificar, agora tem setuid e setgid
-rwsrwsr--. 1 usuario1 grupo1 28 Junho 18 11:32 script_teste.sh

$ chmod 4755 script_teste.sh # Configurar setuid usando modo numérico

$ chmod 2755 script_teste.sh # Configurar setgid usando modo numérico

$ chmod 0755 script_teste.sh # Remover setuid e setgid usando modo numérico

Tags: Linux Bash shell permissões chmod

Publicado em 6-29 02:00