Manipulando Permissões em Linux com chmod

Uma das características que mais me impressionaram no Linux quando comecei a estudá-lo foi a capacidade de modificar as permissões de acesso a tudo no sistema.

Primeiro, por que achei genial poder customizar cada arquivo do meu sistema operacional com as permissões que eu quisesse e, segundo, porque minha maior queixa no Windows era a impossibilidade de ocultar arquivos ou impedir o acesso a eles sem compactar com senha.

Embora eu já tenha um conhecimento razoável sobre como lidar com as permissões no Linux, encontrei um artigo excelente sobre o assunto quando eu procurava por informações sobre permissões SSUID.

O autor é o Roberto, administrador de redes do Paraná. Reproduzo seu artigo abaixo sem quaisquer alterações e o original pode ser encontrado aqui.


O controle de acesso em arquivos e diretórios é a segurança fundamental para qualquer sistema multi-usuário.

Os sistemas de arquivos nativos do Linux implementam controle de acesso utilizando algumas propriedades dos arquivos/diretórios.

Conteúdo:

1 – Lembrando como as permissões básicas funcionam:
2 – Permissões de Acesso Especiais:
3 – SUID ( Set User ID):
3.1 – Exemplo
3.2 – Comandos
4 – SGID ( Set Group ID ):
4.1 – Exemplo
4.2 – Comandos
5 – Sticky ( Sticky bit):
5.1 – Exemplo
5.2 – Comandos

Obs.: Neste e em outros artigos que eu escrevi a formatação do texto possui os seguintes significados:

– O texto em Negrito assume que se trata de um comando que deve ser digitado.
– O texto em Itálico significa que é a saída de um comando ou conteúdo de um arquivo.
– O “>>>” significa que você deve digitar no interpretador do Python.
– O “#” significa que o comando dever ser executado como usuário “root”.
– O “$” significa que o comando deve ser executado como usuário sem privilégios.

1 – Lembrando como as permissões básicas funcionam:

No Linux há três modelos de controle de acesso básicos: Read, Write e Execution.

Veja um exemplo de permissão básica na figura abaixo:

Permissões Básicas

O Tipo do Objeto significa:

d => diretório
b => arquivo de bloco
c => arquivo especial de caractere
p => canal
s => socket
– => arquivo normal

Já os outros caracteres significam:

r => significa permissão de leitura (read);
w => significa permissão de gravação (write);
x => significa permissão de execução (execution);
– => significa permissão desabilitada.

Explicando um pouco mais:

Leitura (r):
Em arquivos, permite examinar o conteúdo do arquivo.
Em diretórios permite listar conteúdo do diretório.

Escrita (w):
Em arquivos, permite escrever, remover e alterar o arquivo.
Em diretórios, permite criar e remover arquivos dentro do diretório.

Execução (x):
Em arquivos, permite executar um arquivo como um programa.
Em diretório, permite ler e escrever em arquivos dentro do diretório.

Sendo que os três primeiros rwx primeiros pertencem ao Dono do arquivo, e os outros três rwx pertencem ao Grupo e por fim os últimos três rwx pertencem há outros usuários que não fazem parte do grupo.

2 – Permissões de Acesso Especiais:

Mas somente as três permissões básicas (rwx), não dão toda flexibilidade para controlar acesso aos arquivos e diretórios.
Por isso o Linux tem mais três modelos especiais para controle de acesso, chamados suid (set user id), sgid (set group id) e Sticky (Sticky bit).

Veja um exemplo de permissão especial na figura abaixo:

Permissões Especiais

3 – SUID ( Set User ID):

A propriedade SUID é somente para arquivos executáveis e não tem efeito em diretórios.

Nas permissões básicas, o usuário que executou o programa é dono do processo.
Mas, em arquivo executável com a propriedade SUID aplicada, o programa rodará com o ID do dono do arquivo, não com o ID do usuário que executou o programa.
Normalmente o usuário dono do programa executável é também dono do processo sendo executado.
Ou seja, quando um arquivo/programa executável tem o controle de acesso SUID, ele é executado como se ele estivesse iniciado pelo dono do arquivo/programa.

A permissão de acesso especial SUID pode aparecer somente no campo Dono.

3.1 – Exemplo:

Um exemplo para arquivo executável com a propriedade SUID é o arquivo /usr/bin/passwd.
Ou seja, quando executamos o comando passwd com qualquer usuário normal, o processo é executado com ID do usuário root ( como se o usuário root tivesse executado o comando passwd), pois somente o usuário root tem permissão para alterar o arquivo /etc/passwd.

# ls -lah /usr/bin/passwd
-rwsr-xr-x 1 root root 27K 2006-04-03 10:37 /usr/bin/passwd

3.2 – Comandos:

– Aplicando SUID:

Aplicando a propriedade SUID em um arquivo executável utilizando formato simbólico (s):

# chmod u+s programa.sh
# ls -lah programa.sh
-rwsr-xr-x 1 root roberto 0 2006-09-26 22:57 programa.sh

Aplicando a propriedade SUID em um arquivo executável utilizando formato octal (4):

# chmod 4750 programa.sh
# ls -lah programa.sh
-rwsr-x— 1 root roberto 0 2006-09-26 22:57 programa.sh

– Retirando SUID:

# chmod u-s programa.sh
# ls -lah programa.sh
-rwxr-x— 1 root roberto 0 2006-09-26 22:57 programa.sh

– Procurando SUID:

Procurando a propriedade SUID em um arquivo executável utilizando formato simbólico (s):

# find /home/roberto -perm u=s
/home/roberto/programa.sh

Procurando a propriedade SUID em um arquivo executável utilizando formato octal (4):

# find /home/roberto -perm -4000
/home/roberto/programa.sh

4 – SGID ( Set Group ID ):

A propriedade SGID tem a mesma função que o SUID para arquivos executáveis.
Mas, a propriedade SGID tem um efeito especial para os diretórios.

Quando SGID é aplicado em um diretório, os novos arquivos que são criados dentro do diretório assumem o mesmo ID de Grupo do diretório com a propriedade SGID aplicado.

A permissão de acesso especial SGID pode aparecer somente no campo Grupo.

4.1 – Exemplo:

Se no diretório /home/roberto tem o grupo casa e tem o SGID habilitado, então todos os arquivos dentro do diretório /home/roberto serão criados com o grupo casa.
Esta é um importante atributo para um equipe, assumindo que todos os arquivos compartinhados devem ter o mesmo grupo.

4.2 – Comandos:

– Aplicando SGID:

Aplicando a propriedade SGID em um diretório executável utilizando formato simbólico (s):

# chmod g+s /home/equipe
# ls -lah /home/equipe
total 0
drwxr-sr-x 2 roberto equipe 48 2006-09-26 23:21 .

Aplicando a propriedade SGID em um diretório executável utilizando formato octal (2):

# chmod 2750 /home/equipe
# ls -lah /home/equipe
total 0
drwxr-s— 2 roberto equipe 48 2006-09-26 23:21 .

– Retirando SGID:

# chmod g-s /home/equipe
# ls -lah /home/equipe
total 0
drwxr-xr-x 2 roberto equipe 48 2006-09-26 23:21 .

– Procurando SGID:

Procurando a propriedade SGID em um diretório executável utilizando formato simbólico (s):

# find /home -perm /g=s
/home/equipe

Procurando a propriedade SUID em um diretório executável utilizando formato octal (2):

# find /home -perm -2000
/home/equipe

5 – Sticky ( Sticky bit):

Em arquivos executáveis, a propriedade Sticky faz com que o sistema mantenha uma imagem do programa em memória depois que o programa finalizar.
Esta capacidade aumenta o desempenho, pois será feito um cache do programa para a memória, e da próxima vez que ele for executado, será carregado mais rápido.

Em diretórios, a propriedade Sticky impede que outros usuários deletem ou renomeam arquivos dos quais não são donos.
Isso normalmente é utilizado para aumentar a segurança, pois o diretório estará em modo append-only ( somente incremente )
Sendo assim, somente o usuário que é Dono do arquivo, poderá deletar ou renomear os arquivos dentro de um diretório com a propriedade Sticky aplicada.

A permissão especial Sticky, pode ser especificada somente no campo outros usuários das permissões de acesso.

5.1 – Exemplo:

No diretório /tmp, todos os usuários devem ter acesso para que seus programas possam criar os arquivos temporários, mas nenhum pode apagar arquivos dos outros.
Então é interessante aplicar a propriedade Sticky no diretório /tmp.

5.2 – Comandos:

– Aplicando Sticky:

Aplicando a propriedade Sticky em um arquivo executável utilizando formato octal (1)

# chmod 1750 programa_pesado.sh
# ls -lah programa_pesado.sh
-rwxr-x–T 1 root root 2,9M 2006-09-26 23:51 programa_pesado.sh

Aplicando a propriedade Sticky em um arquivo executável utilizando formato simbólico (t):

# chmod o+t programa_pesado.sh
# ls -lah programa_pesado.sh
-rwxr-x–T 1 root root 2,9M 2006-09-26 23:51 programa_pesado.sh

Aplicando a propriedade Sticky em um diretório utilizando formato simbólico (t):

# chmod o+t /tmp
# ls -lah /tmp
total 5,0K
drwxrwxrwt 8 root root 264 2006-09-26 23:22 .

Aplicando a propriedade Sticky em um diretório utilizando formato octal (1):

# chmod 1777 /tmp
# ls -lah /tmp
total 5,0K
drwxrwxrwt 8 root root 264 2006-09-26 23:22 .

– Retirando Sticky:

# chmod o-t /tmp
# ls -lah /tmp
total 5,0K
drwxrwxrwx 8 root root 264 2006-09-26 23:22 .

– Procurando Sticky:

Aplicando a propriedade Sticky em um diretório utilizando simbólico (t):

# find /home/roberto/ -perm /o=t
/home/roberto/programa_pesado.sh

Aplicando a propriedade Sticky em um diretório utilizando formato octal (1):

# find /home/roberto/ -perm -1000

/home/roberto/programa_pesado.sh


Uma fonte importante sobre o assunto é o Foca Linux e para ler especificamente sobre chmod, clique aqui.

Agradeço ao Roberto pelo artigo e recomendo que acessem seu blog, vale a pena.

É isso aí, abraço.

Ativar tecla NumLock na inicialização do Fedora 15

No Fedora, a tecla NumLock não vem ativada na inicialização do sistema.  Se sua senha tem números você tem que pressionar a tecla ou usar as do teclado central.

Depois de fuçar, achei a solução aqui (obrigado, Lauro Frutal) e repasso aos meus leitores (eles existem?…..hahahaha).

Atenção: a responsabilidade por qualquer ação feita em seu sistema é só sua! Na dúvida, não faça nada.

– Faça um backup do arquivo Default com o comando sudo cp /etc/gdm/Init/Default /etc/gdm/Init/DefaultBackup;

– Altere o arquivo com o comando sudo vim /etc/gdm/Init/Default;

– Encontre a linha exit 0 (isso é um zero, ok?);

– Imediatamente acima, copie e cole o que vem em seguida:

if [ -x /usr/bin/numlockx ]; then
/usr/bin/numlockx on
 fi

– Salve o arquivo e reinicie o computador.

Pronto, problema resolvido.

É isso aí, abraço.

Fábio

Packet Tracer para Linux

Hoje trago uma ferramenta bastante interessante para quem trabalha com redes, o Packet Tracer.

É um aplicativo da Cisco que permite que se crie uma rede completa e a teste. Você pode configurar IPs (IPv4 e IPv6), netmasks, default gateway, sub-nets, etc, e analisar tráfego de pacotes, por exemplo.

O softaware, originalmente, é para windows mas consegui um para Linux então o disponibilizo.

Links para download:

ftp://200.87.198.196/software/Redes/PacketTracer-5/PacketTracer5_generic.tar.gz
http://www.megaupload.com/?d=PCP60F0D

Para instalar, você terá que escolher o local padrão ou outro de sua preferência. O software cria uma pasta (/pt) dentro de /opt mas você pode modificar isso na instalação.

Sendo assim, você pode descompactar em qualquer lugar que queira mas eu sugiro que siga um certo padrão. Por exemplo, o diretório /usr/local é para instalação de programas não oficiais (como o Packet Tracer) mas você pode modificar essa estrutura.

Eu mesmo, descompacto os softwares dentro de /usr/bin/ pois é onde ficam os binários de programas do usuário.

Bem, vamos à instalação (testado com sucesso em Ubuntu 9.10 e Ubuntu 10.04).

Atenção: a responsabilidade por qualquer ação feita em seu sistema é só sua! Na dúvida, não faça nada.

01) Após descompactar, altere o arquivo install para executável (sudo chmod 755 install);

02) Execute o install (sudo ./install);

03) Pressione Enter para ler a EULA (End User License Agreement);

04) Pressione Enter até o final do documento (cuidado para não pressionar Enter na última linha pois a instalação se finaliza);

05) Pressione Y para aceitar a EULA e começar a instalação;

06) Escolha o local para instalação ou pressione Enter para que seja usado o default (/opt/pt);

07) Por padrão, /pt não existe então o programa tentará criá-lo mas, como não tem permissões de escrita no diretório, vai perguntar se pode usar o sudo para isso (Should we try to gain root access with sudo? [Yn]). Ou você permite ou interrompe, altera as permissões do diretório /opt e inicia tudo novamente. Atenção: não tente criar o diretório /pt com as devidas permissões pois o script de instalação tenta criá-lo e interrompe a execução se ele já existe.

08) Depois, você terá que dizer se quer criar um link simbólico (Should we create a symbolic link “packettracer” in /usr/local/bin for easy Packet Tracer 5 startup? [Yn]). Eu até criei mas não serviu para nada, explico mais abaixo;

Com isso a instalação está completa mas o programa ainda não está pronto para ser usado. Vamos configurar o acesso ao programa:

– Acesse /opt e altere a propriedade de todo o diretório /pt para seu usuário e grupo (sudo chown user:group -R pt/);
– Acesse /opt/pt e torne PacketTracer5 em um executável (chmod 755 PacketTracer5);
– Salve e feche o terminal;
– Acesse Sistema, Preferências, Menu Principal;
– No ítem Desenvolvimento, clique em Novo Ítem;
– Selecione PacketTracer5 em /opt/pt/bin e salve.

Pronto, o atalho para lançar o aplicativo estará disponível em Aplicativos / Desenvolvimento. Vejam que o atalho criado em /usr/local/bin não foi usado para nada.

Depois de baixar o programa, utilize este exemplo (http://www.megaupload.com/?d=D5F94GIV) para testá-lo.

É isso aí.

Abraço,
Fábio