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