Post

Guia Completo de Permissões com sudo, su e Configuração do sudoers

Este guia oferece uma visão abrangente sobre o uso de sudo e su, além de uma configuração segura e detalhada do arquivo sudoers.

Guia Completo de Permissões com sudo, su e Configuração do sudoers

Introdução

A administração de sistemas Unix/Linux depende fortemente do controle de permissões para garantir a segurança e a eficiência na execução de tarefas administrativas. Duas das ferramentas mais importantes para esse controle são os comandos sudo e su, que permitem a execução de tarefas com permissões elevadas e facilitam a administração de usuários.

O comando sudo, em especial, é altamente flexível e seguro, oferecendo a capacidade de definir permissões detalhadas para cada usuário por meio do arquivo de configuração sudoers. Este tutorial explora o uso avançado de sudo, incluindo a configuração do sudoers com práticas recomendadas de segurança e a criação de alias para simplificar e organizar o controle de acessos. Além disso, abordaremos o comando su, que permite a troca de usuário em sessões contínuas, útil em cenários específicos de administração.

Ao longo deste guia, você encontrará explicações detalhadas e exemplos práticos para cada conceito, ajudando a aplicar esses comandos com segurança e precisão em seu ambiente de trabalho. Siga cada seção para desenvolver uma compreensão completa e prática dessas ferramentas essenciais.


Sumário

  1. Introdução
  2. Configuração do Arquivo sudoers
  3. Uso da Diretiva Host_Alias
  4. Uso da Diretiva User_Alias
  5. Uso da Diretiva Cmd_Alias
  6. Uso da Diretiva Runas_Alias
  7. A Diretiva Defaults no sudoers
  8. Configuração de Permissões por Usuário
  9. Configuração de Permissões por Grupo
  10. Usando o Comando sudo
  11. Usando o Comando su
  12. Conclusão

1. Configuração do Arquivo sudoers

Objetivo

O arquivo sudoers é o centro de controle para as permissões de uso do comando sudo no sistema, definindo o que cada usuário ou grupo de usuários pode fazer com permissões elevadas. Este arquivo permite que administradores de sistema concedam acesso seletivo e seguro a usuários para executarem comandos específicos, mantendo o controle sobre quem pode executar o quê, sob que contexto e em quais máquinas.

Conteúdo

Estrutura Básica do Arquivo sudoers

O arquivo sudoers é normalmente encontrado em /etc/sudoers. Ele contém definições que especificam quais usuários ou grupos têm permissão para executar comandos privilegiados com o comando sudo. A configuração é feita com sintaxe específica, que deve ser rigorosamente respeitada para evitar erros que possam comprometer a segurança do sistema.

Exemplo básico de entrada no sudoers:

1
user1 ALL=(ALL:ALL) ALL

Esse exemplo permite que o usuário user1 execute qualquer comando (ALL) como qualquer usuário ((ALL:ALL)) e em qualquer host (ALL).

Explicação das Seções:

  • user1: Nome do usuário ou grupo que terá as permissões configuradas.
  • ALL: Especifica o conjunto de hosts nos quais as permissões se aplicam. Aqui, ALL indica que a regra vale para todos os hosts.
  • (ALL:ALL): Define os usuários como quem o comando pode ser executado. A primeira parte refere-se ao usuário de destino (ex.: root) e a segunda ao grupo de destino.
  • ALL: Representa a lista de comandos que o usuário tem permissão para executar com sudo.

Métodos Seguros de Edição do Arquivo sudoers

Modificar o arquivo sudoers requer cuidado, pois erros de sintaxe podem comprometer o acesso administrativo ao sistema. A edição direta com editores comuns como vim ou nano não é recomendada, pois eles não verificam automaticamente erros de sintaxe no arquivo. O comando adequado para editar o sudoers com segurança é o visudo, que abre o arquivo no editor padrão e realiza uma checagem de sintaxe ao salvar.

1
sudo visudo

Por que usar o visudo?

  • Validação de Sintaxe: O visudo impede que erros de sintaxe sejam salvos, protegendo o arquivo de configurações incorretas que poderiam bloquear o acesso ao sudo.
  • Bloqueio de Arquivo: Apenas uma instância de visudo pode editar o arquivo sudoers por vez, evitando conflitos entre edições simultâneas.

Dica: Ao usar o visudo, você pode configurar o editor padrão com o comando export EDITOR=vim, substituindo vim pelo editor de sua preferência.

Estrutura Básica de Entrada no Arquivo sudoers

Cada entrada no sudoers especifica permissões para usuários ou grupos. Veja um exemplo mais detalhado de configuração:

1
2
%admin ALL=(ALL) ALL
%developers ALL=(root) /usr/bin/systemctl, /bin/ls

Explicação:

  • %admin ALL=(ALL) ALL: Usuários no grupo admin têm permissão para executar qualquer comando como qualquer usuário, em qualquer host.
  • %developers ALL=(root) /usr/bin/systemctl, /bin/ls: Usuários no grupo developers podem executar systemctl e ls com permissões de root, mas não outros comandos.

Boas Práticas de Organização do Arquivo sudoers

  1. Use grupos sempre que possível: Ao configurar permissões para equipes, é mais eficiente usar grupos em vez de definir permissões individualmente para cada usuário. Por exemplo, usuários de uma equipe de desenvolvedores podem ser adicionados ao grupo developers, que possui permissões específicas.

  2. Defina alias para simplificar configurações complexas: Em vez de listar permissões separadas para cada host, usuário ou comando, use alias para organizar o arquivo de maneira mais limpa e gerenciável. Essas definições serão detalhadas nas próximas seções.

  3. Restrinja comandos críticos: Evite conceder permissões amplas com ALL, a menos que absolutamente necessário. Em vez disso, permita o uso apenas de comandos específicos que o usuário ou grupo precisa executar.

  4. Teste após mudanças: Após qualquer alteração, verifique se as configurações funcionam como esperado. É possível usar o comando sudo -l -U <username> para listar as permissões sudo de um usuário e garantir que tudo está conforme o esperado.

  5. Comentários: Documente cada entrada com comentários explicativos. Isso torna o arquivo mais fácil de entender e manter. Por exemplo:

    1
    2
    
    # Permite que a equipe de suporte reinicie o serviço Apache
    %support ALL=(root) /bin/systemctl restart apache2
    

Exemplo Prático de Configuração

Imagine que temos as seguintes necessidades de controle de permissões:

  1. Equipe de Suporte: Deve reiniciar serviços do sistema, mas não ter acesso administrativo completo.
  2. Equipe de Desenvolvimento: Precisa de permissões para gerenciar o repositório Git e visualizar logs do sistema.
  3. Administração Geral: Um grupo de administradores precisa de permissões totais.

Configuração no sudoers:

1
2
3
4
5
6
7
8
# Admins têm acesso completo
%admin ALL=(ALL) ALL

# Equipe de Suporte pode reiniciar serviços
%support ALL=(root) /usr/bin/systemctl restart, /usr/bin/systemctl stop, /usr/bin/systemctl start

# Equipe de Desenvolvimento pode gerenciar o Git e visualizar logs
%developers ALL=(root) /usr/bin/git, /usr/bin/journalctl

Resumo da Seção

O arquivo sudoers é uma ferramenta fundamental para delegar controle administrativo de forma segura no sistema. Com o uso de visudo, é possível garantir que as edições no sudoers sejam feitas de forma segura e sem erros. Configurações bem estruturadas e organizadas com boas práticas tornam o gerenciamento de permissões muito mais eficiente e seguro, especialmente em ambientes com múltiplos usuários e equipes.


2. Uso da Diretiva Host_Alias no Arquivo sudoers

Objetivo

A diretiva Host_Alias permite definir grupos de hosts no arquivo sudoers, facilitando a gestão de permissões em ambientes onde há múltiplos servidores ou endereços IP. Isso é especialmente útil para centralizar configurações e simplificar a leitura do arquivo em redes complexas.

Conteúdo

O Que é a Diretiva Host_Alias

Host_Alias permite que você crie “apelidos” para um ou mais hosts, em vez de especificar manualmente cada IP ou hostname nas permissões do sudoers. Com isso, você pode referenciar um grupo de servidores sob um único nome, o que melhora a organização e a escalabilidade das configurações.

Sintaxe Básica:

1
Host_Alias NOME_DO_ALIAS = host1, host2, IP_address, etc
  • NOME_DO_ALIAS: Nome que você escolhe para o alias, que pode ser utilizado em outras configurações do arquivo sudoers.
  • host1, host2, IP_address: Lista de nomes de hosts ou endereços IP para os quais o alias será aplicado. Esses hosts podem ser especificados por hostname, IP, ou até mesmo por intervalos de IP.

Exemplo de Configuração com Host_Alias

Imagine que você gerencia uma rede com os seguintes servidores:

  1. Servidores de produção (prod01, prod02, prod03).
  2. Servidores de desenvolvimento (dev01, dev02).
  3. Servidores de teste (test01, test02).

Em vez de configurar permissões para cada servidor individualmente, você pode agrupar os servidores por função:

1
2
3
4
# Definindo aliases para ambientes
Host_Alias PROD_SERVERS = prod01, prod02, prod03
Host_Alias DEV_SERVERS = dev01, dev02
Host_Alias TEST_SERVERS = test01, test02

Aviso! É recomendável usar nomes de alias que reflitam claramente o propósito dos servidores, como PROD_SERVERS, DEV_SERVERS ou TEST_SERVERS, para manter o arquivo organizado e intuitivo.

Utilizando Host_Alias em Configurações de Permissão

Depois de definir os aliases, você pode usá-los para simplificar as permissões. Digamos que você deseja que a equipe de suporte tenha permissões para reiniciar serviços apenas nos servidores de teste e desenvolvimento.

1
2
3
# Permissões específicas para equipes em diferentes ambientes
%support TEST_SERVERS=(root) /usr/bin/systemctl restart, /usr/bin/systemctl stop, /usr/bin/systemctl start
%support DEV_SERVERS=(root) /usr/bin/systemctl restart, /usr/bin/systemctl stop, /usr/bin/systemctl start

Neste exemplo:

  • A equipe de suporte (grupo %support) pode executar comandos de gerenciamento de serviços (systemctl) apenas nos hosts definidos pelos aliases TEST_SERVERS e DEV_SERVERS.
  • Isso evita que o suporte tenha permissões de reiniciar serviços em servidores de produção, onde um erro pode ser mais crítico.

Casos de Uso Comuns para Host_Alias

  1. Redes Corporativas com Segmentação de Ambientes: Em empresas onde existem diferentes ambientes de produção, desenvolvimento e testes, Host_Alias ajuda a segmentar as permissões, garantindo que usuários tenham acessos apropriados para cada ambiente.

  2. Acesso Remoto a Vários Data Centers: Em cenários com múltiplos data centers, você pode criar aliases para cada centro de dados, o que facilita a gestão de permissões por localização.

  3. Segurança em Ambientes com Múltiplos Endpoints: Host_Alias ajuda a restringir acessos a servidores específicos, reduzindo o risco de ações indevidas em servidores críticos.

Boas Práticas ao Usar Host_Alias

  • Documente: Adicione comentários que expliquem a função de cada alias para facilitar a manutenção do arquivo sudoers.
  • Agrupe por Função: Organize os hosts de acordo com seu papel (produção, desenvolvimento, teste, etc.) ou localização (data center específico).
  • Evite Aliases Muito Grandes: Se um alias cobre muitos hosts, pode ser mais seguro subdividir em grupos menores, o que oferece mais controle e legibilidade.

Exemplo Completo de Configuração Usando Host_Alias

Suponha que temos a seguinte configuração de servidores:

  1. app01, app02, e app03 são servidores de aplicação em produção.
  2. db01 e db02 são servidores de banco de dados.
  3. web01 e web02 são servidores de frontend.

Configuração:

1
2
3
4
# Aliases para diferentes tipos de servidores
Host_Alias APP_SERVERS = app01, app02, app03
Host_Alias DB_SERVERS = db01, db02
Host_Alias WEB_SERVERS = web01, web02

Com esses aliases, agora é possível conceder permissões específicas para diferentes equipes:

1
2
3
4
5
6
7
8
# A equipe de desenvolvedores pode reiniciar aplicações em servidores de aplicação
%developers APP_SERVERS=(root) /usr/bin/systemctl restart app_service

# A equipe de DBAs tem permissão para gerenciar serviços nos servidores de banco de dados
%dba DB_SERVERS=(root) /usr/bin/systemctl start, /usr/bin/systemctl stop, /usr/bin/systemctl restart

# A equipe de suporte pode gerenciar o servidor web, mas não o backend
%support WEB_SERVERS=(root) /usr/bin/systemctl restart web_service

Resumo da Seção

A diretiva Host_Alias é uma poderosa ferramenta para organizar e simplificar permissões em ambientes complexos. Ao agrupar servidores com aliases, você facilita o gerenciamento de permissões e reduz o risco de erros ao configurar o arquivo sudoers. Usando boas práticas, como nomeação intuitiva e documentação, o uso de Host_Alias contribui para uma configuração mais segura e eficiente.


3. Uso da Diretiva User_Alias no Arquivo sudoers

Objetivo

A diretiva User_Alias permite criar grupos de usuários com permissões específicas no arquivo sudoers, facilitando a gestão de acessos em sistemas com múltiplos usuários e equipes. Ao definir alias de usuários, você organiza o controle de permissões, especialmente quando usuários distintos precisam executar comandos semelhantes.

Conteúdo

O Que é a Diretiva User_Alias

A diretiva User_Alias é usada para agrupar vários usuários sob um único nome, simplificando a configuração do arquivo sudoers. Com isso, você pode definir permissões para uma equipe inteira ou para um grupo de usuários com funções semelhantes, evitando repetições no arquivo e centralizando o controle de permissões.

Sintaxe Básica:

1
User_Alias NOME_DO_ALIAS = usuario1, usuario2, usuario3
  • NOME_DO_ALIAS: Nome que você atribui ao grupo de usuários.
  • usuario1, usuario2, usuario3: Lista de usuários que fazem parte desse grupo e compartilharão as mesmas permissões.

Exemplo de Configuração com User_Alias

Imagine que você tenha os seguintes usuários no sistema:

  • ana, joao, maria fazem parte da equipe de desenvolvimento.
  • carla, ricardo, leticia fazem parte da equipe de suporte.

Em vez de configurar permissões individualmente, você pode agrupar esses usuários usando User_Alias:

1
2
3
# Definindo aliases de usuários por equipe
User_Alias DEVELOPERS = ana, joao, maria
User_Alias SUPPORT = carla, ricardo, leticia

Esses alias agora podem ser utilizados em entradas de permissão no sudoers, o que facilita o gerenciamento.

Usando User_Alias em Configurações de Permissão

Com os alias definidos, é possível configurar permissões específicas para cada grupo. Por exemplo, suponha que você deseja que a equipe de desenvolvimento possa gerenciar serviços de aplicação, enquanto a equipe de suporte tem permissões para visualizar logs do sistema.

1
2
3
4
5
# Permissões para desenvolvedores gerenciarem o serviço de aplicação
DEVELOPERS ALL=(root) /usr/bin/systemctl restart app_service

# Permissões para a equipe de suporte visualizar logs do sistema
SUPPORT ALL=(root) /usr/bin/journalctl

Nesse exemplo:

  • A equipe de desenvolvimento (DEVELOPERS) pode reiniciar o serviço de aplicação com permissões de root.
  • A equipe de suporte (SUPPORT) pode visualizar os logs do sistema através do comando journalctl, também com permissões de root.

Casos de Uso Comuns para User_Alias

  1. Gestão de Equipes Grandes: Quando várias equipes precisam de permissões específicas, User_Alias ajuda a organizar e aplicar permissões para toda a equipe de uma só vez.

  2. Delegação de Tarefas Específicas: Em cenários onde diferentes grupos de usuários têm responsabilidades distintas, como desenvolvedores, suporte, e administradores, User_Alias permite configurar permissões de acordo com cada papel.

  3. Facilidade de Atualização de Permissões: Com User_Alias, adicionar ou remover permissões para um grupo se torna mais fácil e centralizado. Basta ajustar o alias no sudoers, e as alterações refletem em todos os usuários do grupo.

Boas Práticas ao Usar User_Alias

  • Nomeação Significativa: Use nomes de alias que representem a função ou equipe dos usuários, como DEVELOPERS, SUPPORT, ou ADMINS, para facilitar a compreensão do arquivo.

  • Evite Usar ALL para Todos os Usuários: Em vez de conceder permissões amplas com ALL para grandes grupos, limite as permissões a comandos específicos para melhorar a segurança.

  • Documentação: Comente as entradas do User_Alias com descrições sobre os grupos e seus membros. Isso é importante para manutenção e auditoria futuras.

Exemplo Completo de Configuração Usando User_Alias

Vamos ver um exemplo mais completo, onde três equipes são configuradas com permissões específicas:

  1. analistas: Responsáveis por monitorar o sistema.
  2. desenvolvedores: Têm permissões para reiniciar serviços de aplicação e acessar o repositório Git.
  3. dba: Responsáveis pela gestão dos serviços de banco de dados.

Configuração:

1
2
3
4
# Definindo grupos de usuários por função
User_Alias ANALISTAS = alice, bruno, carlos
User_Alias DESENVOLVEDORES = david, elisa, fabio
User_Alias DBA = gustavo, helena

Com os alias definidos, podemos especificar permissões mais detalhadas para cada grupo:

1
2
3
4
5
6
7
8
# Permitir que analistas visualizem logs do sistema
ANALISTAS ALL=(root) /usr/bin/journalctl

# Permitir que desenvolvedores reiniciem o serviço de aplicação e utilizem o Git
DESENVOLVEDORES ALL=(root) /usr/bin/systemctl restart app_service, /usr/bin/git

# Permitir que DBAs gerenciem o serviço de banco de dados
DBA ALL=(root) /usr/bin/systemctl start db_service, /usr/bin/systemctl stop db_service, /usr/bin/systemctl restart db_service

Resumo da Seção

A diretiva User_Alias no arquivo sudoers é uma ferramenta essencial para facilitar o controle de permissões em sistemas com vários usuários. Com User_Alias, você pode agrupar usuários com funções semelhantes e conceder permissões de forma centralizada e organizada. Utilizar nomes significativos e documentar bem cada alias contribui para a segurança e manutenção do sistema, especialmente em ambientes corporativos onde o gerenciamento de permissões precisa ser rigoroso.


4. Uso da Diretiva Cmd_Alias no Arquivo sudoers

Objetivo

A diretiva Cmd_Alias permite criar grupos de comandos no arquivo sudoers, facilitando a atribuição de permissões para conjuntos específicos de comandos. Isso é especialmente útil para conceder acessos a grupos de comandos relacionados (como comandos de rede ou de gerenciamento de sistema) de forma organizada e segura, sem precisar listar cada comando individualmente em todas as configurações.

Conteúdo

O Que é a Diretiva Cmd_Alias

Cmd_Alias é utilizada para agrupar vários comandos sob um único alias. Com isso, você pode aplicar permissões a conjuntos de comandos para grupos de usuários ou usuários individuais. Essa abordagem simplifica o gerenciamento de permissões e ajuda a tornar o arquivo sudoers mais legível.

Sintaxe Básica:

1
Cmd_Alias NOME_DO_ALIAS = /caminho/comando1, /caminho/comando2, /caminho/comando3
  • NOME_DO_ALIAS: Nome escolhido para o grupo de comandos.
  • /caminho/comando: Lista de comandos que fazem parte desse grupo, especificando o caminho completo de cada comando.

Exemplo de Configuração com Cmd_Alias

Suponha que você deseja agrupar comandos de gerenciamento de rede (como reiniciar a interface de rede e verificar configurações de IP) para conceder essas permissões a um grupo de administradores de rede.

1
2
# Definindo um alias para comandos de rede
Cmd_Alias NETWORK_CMDS = /sbin/ifconfig, /usr/sbin/iptables, /sbin/ip

Agora, com NETWORK_CMDS definido, você pode conceder permissões a usuários ou grupos para executar todos os comandos listados sob este alias, ao invés de definir cada comando separadamente.

Usando Cmd_Alias em Configurações de Permissão

Depois de criar um alias para os comandos, você pode usá-lo para simplificar as permissões no arquivo sudoers. Vamos ver um exemplo em que o grupo net_admins tem permissão para executar todos os comandos agrupados em NETWORK_CMDS com privilégios de root.

1
2
# Permissões para o grupo net_admins executar comandos de rede
%net_admins ALL=(root) NETWORK_CMDS

Aqui, todos os membros do grupo net_admins podem executar ifconfig, iptables e ip com permissões de root. Essa abordagem facilita o gerenciamento de permissões, especialmente em ambientes onde há vários comandos relacionados que precisam ser permitidos para determinados grupos.

Casos de Uso Comuns para Cmd_Alias

  1. Agrupamento de Comandos por Função: Cmd_Alias é ideal para agrupar comandos por área de atuação, como comandos de rede para administradores de rede, comandos de gerenciamento de serviços para administradores de sistema, e comandos de análise para equipes de suporte.

  2. Segurança e Simplicidade: Definir alias de comandos ajuda a restringir o acesso de usuários, agrupando apenas os comandos necessários. Isso evita permissões amplas como ALL, reduzindo o risco de execuções indevidas de comandos.

  3. Controle Granular de Acessos: Quando combinado com User_Alias, Cmd_Alias permite conceder permissões precisas a grupos de usuários para conjuntos específicos de comandos, garantindo um controle rigoroso das permissões.

Boas Práticas ao Usar Cmd_Alias

  • Especifique o Caminho Completo dos Comandos: No arquivo sudoers, é importante sempre usar o caminho completo dos comandos (por exemplo, /usr/sbin/iptables em vez de apenas iptables). Isso evita erros e garante que os comandos corretos sejam executados.

  • Crie Alias por Tipo de Comando: Organize os alias de comandos por área ou função, como SYSTEM_CMDS, USER_MGMT_CMDS, e NETWORK_CMDS, para uma melhor legibilidade e manutenção.

  • Evite Uso Extensivo de Comandos Críticos: Tente limitar o uso de alias com comandos críticos (como shutdown ou reboot) para casos realmente necessários, garantindo que apenas usuários ou grupos de extrema confiança possam utilizá-los.

Exemplo Completo de Configuração Usando Cmd_Alias

Para ilustrar, suponha que temos três categorias de comandos que desejamos agrupar com Cmd_Alias:

  1. Comandos de Rede: Para administração e configuração da rede.
  2. Comandos de Gerenciamento de Usuários: Para operações de gerenciamento de usuários e grupos.
  3. Comandos de Serviço: Para controle de serviços do sistema.

Configuração dos Alias:

1
2
3
4
# Definindo aliases para diferentes tipos de comandos
Cmd_Alias NETWORK_CMDS = /sbin/ifconfig, /usr/sbin/iptables, /sbin/ip
Cmd_Alias USER_MGMT_CMDS = /usr/sbin/adduser, /usr/sbin/deluser, /usr/bin/passwd
Cmd_Alias SERVICE_CMDS = /usr/bin/systemctl start, /usr/bin/systemctl stop, /usr/bin/systemctl restart

Agora, vamos configurar permissões para esses alias de comandos para três grupos de usuários:

  1. net_admins: Responsável pela administração de rede, com permissões para NETWORK_CMDS.
  2. support: Equipe de suporte com permissão para gerenciar usuários.
  3. admin: Administradores do sistema com permissão para gerenciar serviços.
1
2
3
4
5
6
7
8
# Permitir que os administradores de rede executem comandos de rede
%net_admins ALL=(root) NETWORK_CMDS

# Permitir que a equipe de suporte execute comandos de gerenciamento de usuários
%support ALL=(root) USER_MGMT_CMDS

# Permitir que administradores do sistema gerenciem serviços do sistema
%admin ALL=(root) SERVICE_CMDS

Resumo da Seção

A diretiva Cmd_Alias é uma poderosa ferramenta no arquivo sudoers que permite agrupar comandos e simplificar a concessão de permissões para conjuntos específicos de comandos. Com Cmd_Alias, é possível configurar permissões granulares, agrupando comandos comuns sob um único alias e aplicando permissões para esses grupos com mais facilidade. Essa prática contribui para a segurança e organização do sistema, especialmente em ambientes onde diferentes equipes requerem acessos específicos.


5. Uso da Diretiva Runas_Alias no Arquivo sudoers

Objetivo

A diretiva Runas_Alias é usada para definir grupos de usuários sob os quais determinados comandos podem ser executados. Em ambientes onde usuários precisam executar comandos com permissões de usuários específicos (como root ou uma conta de serviço), o Runas_Alias facilita o controle granular, organizando as permissões de execução no arquivo sudoers.

Conteúdo

O Que é a Diretiva Runas_Alias

A diretiva Runas_Alias permite agrupar um ou mais usuários sob um alias, indicando em nome de quem o comando será executado. Essa abordagem ajuda a manter o arquivo sudoers mais organizado, especialmente quando há múltiplos usuários com permissões para executar comandos como outros usuários específicos.

Sintaxe Básica:

1
Runas_Alias NOME_DO_ALIAS = usuario1, usuario2, usuario3
  • NOME_DO_ALIAS: Nome dado ao grupo de usuários para referência no arquivo sudoers.
  • usuario1, usuario2, usuario3: Lista de usuários do sistema, como root ou outros usuários de serviço.

Exemplo de Configuração com Runas_Alias

Suponha que temos uma equipe de desenvolvedores que precisa executar certos comandos como o usuário deploy, que é responsável por operações de deploy, e outra equipe de suporte que executa comandos de diagnóstico como root.

Podemos definir esses aliases da seguinte forma:

1
2
3
# Definindo um alias para execução como usuário de deploy e como root
Runas_Alias DEPLOY_USER = deploy
Runas_Alias ROOT_USER = root

Esses alias podem então ser usados para definir permissões específicas para usuários ou grupos, facilitando a organização das permissões.

Usando Runas_Alias em Configurações de Permissão

Depois de criar os aliases, você pode utilizá-los para definir as permissões de execução para diferentes grupos de usuários. Por exemplo, vamos configurar os desenvolvedores para que possam executar comandos como deploy e o grupo de suporte para executar comandos como root.

1
2
3
4
5
# Permitir que desenvolvedores executem comandos como o usuário deploy
%developers ALL=(DEPLOY_USER) NOPASSWD: /usr/bin/git pull, /usr/bin/systemctl restart app_service

# Permitir que a equipe de suporte execute comandos como root
%support ALL=(ROOT_USER) /usr/bin/journalctl, /usr/sbin/reboot

Aqui:

  • O grupo developers pode executar git pull e reiniciar o serviço app_service como o usuário deploy, sem a necessidade de fornecer senha (NOPASSWD).
  • O grupo support pode executar journalctl e reiniciar a máquina (reboot) como root.

Casos de Uso Comuns para Runas_Alias

  1. Controle de Permissões para Contas de Serviço: Quando há contas de serviço específicas (como deploy ou backup), Runas_Alias facilita a configuração de permissões para que grupos de usuários executem comandos como essas contas.

  2. Execução Limitada como root: Em vez de conceder permissões amplas para executar comandos como root, Runas_Alias permite definir um conjunto específico de comandos que um grupo de usuários pode executar com privilégios de root.

  3. Facilidade de Gestão em Equipes Grandes: Em ambientes com várias equipes (desenvolvimento, suporte, análise, etc.), Runas_Alias ajuda a agrupar permissões de execução para diferentes contextos, como root, backup, deploy, facilitando o gerenciamento centralizado.

Boas Práticas ao Usar Runas_Alias

  • Restringir o Acesso a Usuários Necessários: Use Runas_Alias para conceder permissões apenas para os usuários necessários, como contas de serviço específicas, evitando o uso desnecessário de permissões root.

  • Documente as Configurações: Adicione comentários para explicar o propósito de cada Runas_Alias, principalmente em ambientes complexos com várias contas de serviço ou usuários específicos.

  • Combine com Cmd_Alias para Maior Controle: Utilize Cmd_Alias junto com Runas_Alias para restringir não só o usuário de execução, mas também os comandos que podem ser executados.

Exemplo Completo de Configuração Usando Runas_Alias

Vamos criar um exemplo completo que ilustra o uso de Runas_Alias para dois cenários comuns:

  1. Desenvolvedores precisam de permissões para executar comandos de deploy como o usuário deploy.
  2. A equipe de suporte precisa de permissões para executar comandos de diagnóstico e reinicialização como root.

Definindo os Alias:

1
2
3
# Definindo aliases para usuários específicos de execução
Runas_Alias DEPLOY_USER = deploy
Runas_Alias ROOT_USER = root

Configurando Permissões:

1
2
3
4
5
# Permitir que os desenvolvedores executem comandos de deploy como o usuário deploy
%developers ALL=(DEPLOY_USER) NOPASSWD: /usr/bin/git pull, /usr/bin/systemctl restart app_service

# Permitir que a equipe de suporte execute comandos de diagnóstico e reinicialização como root
%support ALL=(ROOT_USER) /usr/bin/journalctl, /usr/sbin/reboot

Resumo da Seção

A diretiva Runas_Alias permite definir quais usuários podem ser usados como contexto de execução para comandos específicos no sudoers. Isso é especialmente útil em ambientes onde é necessário executar comandos como contas de serviço ou como root, de forma controlada e segura. Com Runas_Alias, a configuração do sudoers se torna mais organizada e flexível, proporcionando um controle de permissões granular e seguro para diversos contextos de uso.


6. A Diretiva Defaults no Arquivo sudoers

Objetivo

A diretiva Defaults permite definir configurações globais ou específicas no sudoers, ajustando o comportamento do sudo para usuários, grupos ou o sistema inteiro. Essa flexibilidade é importante para implementar políticas de segurança, definir comportamentos padrão e ajustar opções personalizadas para diferentes usuários e grupos, melhorando a administração e segurança do sistema.

Conteúdo

O Que é a Diretiva Defaults

A diretiva Defaults configura o comportamento e as políticas globais do sudo. Ela permite ajustar variáveis que afetam o modo como o sudo opera, incluindo parâmetros de segurança e definições específicas de comportamento, como tempo de cache de senha e exibição de avisos.

Sintaxe Básica:

1
2
3
4
Defaults    OPTION
Defaults:USUARIO   OPTION
Defaults!COMANDO   OPTION
Defaults@HOST   OPTION
  • Defaults OPTION: Configuração aplicada a todos os usuários e comandos.
  • Defaults:USUARIO OPTION: Configuração específica para um usuário.
  • Defaults!COMANDO OPTION: Configuração para um comando específico.
  • Defaults@HOST OPTION: Configuração para um host específico.

Exemplos de Opções Comuns da Diretiva Defaults

  1. Defaults env_reset: Redefine as variáveis de ambiente para aumentar a segurança, evitando que variáveis não confiáveis afetem o comportamento de comandos executados com sudo.

    1
    
    Defaults env_reset
    
  2. Defaults timestamp_timeout=valor: Define o tempo (em minutos) que o sudo armazena a senha do usuário antes de solicitar novamente. timestamp_timeout=0 força a solicitação de senha para cada comando, enquanto timestamp_timeout=-1 mantém a senha em cache indefinidamente durante a sessão.

    1
    
    Defaults timestamp_timeout=5
    
  3. Defaults log_input, log_output: Ativa o log de entrada e saída de comandos executados com sudo, útil para auditoria de segurança.

    1
    
    Defaults log_input, log_output
    
  4. Defaults insults: Exibe mensagens humorísticas caso o usuário forneça uma senha incorreta ao usar sudo. Isso é mais uma curiosidade do que uma prática recomendada, mas pode ser ativado para fins de entretenimento.

    1
    
    Defaults insults
    

Exemplos de Configurações Específicas com Defaults

A diretiva Defaults permite configurar parâmetros específicos para usuários, grupos ou comandos. Vamos ver alguns exemplos práticos:

  1. Configuração de Timeout de Senha para um Usuário Específico: Para usuários que precisam de um nível de segurança maior, você pode reduzir o tempo de cache da senha para garantir que ela seja solicitada com mais frequência.

    1
    
    Defaults:ana timestamp_timeout=2
    

    Aqui, a senha da ana será solicitada novamente após 2 minutos de inatividade.

  2. Configuração de Log Apenas para Comandos de Reinicialização: Para auditar o uso de comandos de reinicialização (como reboot), você pode habilitar logs de entrada e saída apenas para esse comando.

    1
    
    Defaults!reboot log_output
    
  3. Personalização de Configurações para um Grupo: Para configurar uma política de segurança para um grupo, como exigir confirmação de senha a cada comando, você pode aplicar uma configuração a um grupo inteiro.

    1
    
    Defaults:%support timestamp_timeout=0
    

    Com essa configuração, os usuários do grupo support precisarão inserir a senha sempre que executarem comandos com sudo.

Casos de Uso Comuns para a Diretiva Defaults

  1. Segurança com Controle de Sessões: Com o uso de timestamp_timeout, você pode definir políticas de cache de senha para garantir que usuários privilegiados autentiquem-se frequentemente em ambientes sensíveis.

  2. Auditoria e Log de Atividades: Ativar log_input e log_output é ideal para auditorias de segurança, pois registra os comandos executados e suas saídas, permitindo o rastreamento detalhado de atividades.

  3. Redução de Variáveis de Ambiente: env_reset garante que variáveis indesejadas sejam removidas, evitando que valores potencialmente perigosos sejam usados em comandos executados com sudo.

Boas Práticas ao Usar Defaults

  • Use Defaults de Forma Específica: Configure opções Defaults de modo a aplicá-las somente onde necessário, evitando sobrecarga de logs ou solicitações excessivas de senha.

  • Evite Configurações Amplas e Gerais para Parâmetros de Segurança: Aplique configurações como timestamp_timeout=0 e log_output apenas a usuários ou grupos específicos que exigem maior segurança e auditoria.

  • Comente as Configurações: Documente o motivo de cada configuração Defaults, especialmente aquelas que ajustam políticas de segurança, para facilitar futuras revisões e auditorias.

Exemplo Completo de Configuração Usando Defaults

Vamos criar um exemplo que configure opções Defaults para o sistema e para usuários específicos:

  1. Configurações gerais para todos os usuários, incluindo redefinição de variáveis de ambiente e log de entrada e saída.
  2. Configuração de timeout de senha para o grupo support para exigir confirmação a cada comando.
  3. Ativação de logs específicos para o comando reboot para auditoria.
1
2
3
4
5
6
7
8
9
10
11
12
# Configurações globais para segurança
Defaults env_reset
Defaults log_input, log_output

# Exigir autenticação de senha para cada comando no grupo de suporte
Defaults:%support timestamp_timeout=0

# Timeout de 10 minutos para a equipe de desenvolvimento
Defaults:%developers timestamp_timeout=10

# Logar todas as saídas do comando reboot
Defaults!reboot log_output

Resumo da Seção

A diretiva Defaults no sudoers é essencial para ajustar configurações de segurança e comportamento do sudo de acordo com as políticas da organização. Com Defaults, administradores de sistema podem definir variáveis globais e específicas que melhoram a segurança, simplificam auditorias e personalizam o comportamento do sudo para diferentes usuários e grupos. Aplicar essas configurações de maneira específica e bem documentada torna o sudo mais seguro e controlado em ambientes de múltiplos usuários.


7. Configuração de Permissões por Usuário

Objetivo

A configuração de permissões por usuário no arquivo sudoers permite definir o acesso específico para cada usuário, ajustando as permissões individualmente. Com essa configuração, administradores podem conceder acesso seletivo a comandos específicos para usuários distintos, melhorando a segurança e o controle de privilégios.

Conteúdo

Estrutura de Configuração para Usuários

No arquivo sudoers, as permissões de um usuário são configuradas com a seguinte estrutura básica:

1
usuario ALL=(usuário_de_destino) comando

Explicação da Estrutura:

  • usuario: Nome do usuário para quem a permissão será concedida.
  • ALL: Especifica o conjunto de hosts nos quais a regra se aplica. ALL indica que a regra é válida para todos os hosts.
  • (usuário_de_destino): Define o usuário como quem o comando pode ser executado, por exemplo, root.
  • comando: Lista dos comandos permitidos para o usuário, incluindo o caminho completo de cada comando.

Exemplo de Configuração de Permissões por Usuário

  1. Acesso Restrito a Comandos Específicos: Para usuários que precisam apenas de permissões específicas, é possível listar diretamente os comandos permitidos. Por exemplo, suponha que o usuário joao precise apenas verificar logs e reiniciar serviços de rede:

    1
    
    joao ALL=(root) /usr/bin/journalctl, /usr/sbin/service networking restart
    

    Aqui, joao pode executar journalctl e reiniciar o serviço de rede como root, mas não possui acesso a outros comandos.

  2. Permissão Completa para um Administrador: Para administradores que precisam de permissões amplas, é comum conceder acesso a todos os comandos com a seguinte configuração:

    1
    
    admin ALL=(ALL) ALL
    

    Com essa configuração, o usuário admin pode executar qualquer comando como qualquer usuário.

  3. Desativando a Solicitação de Senha para um Comando Específico: Em alguns casos, pode ser útil permitir que um usuário execute comandos específicos sem ser solicitado a inserir a senha. Por exemplo:

    1
    
    joao ALL=(root) NOPASSWD: /usr/sbin/service networking restart
    

    Nesta configuração, joao pode reiniciar o serviço de rede sem precisar inserir a senha.

Casos de Uso Comuns para Configurações por Usuário

  1. Delegação de Tarefas Específicas: Quando um usuário tem tarefas bem definidas, como reiniciar um serviço ou acessar logs, a configuração de permissões por usuário permite conceder acesso exatamente aos comandos necessários.

  2. Segurança em Funções Críticas: Em sistemas críticos, limitar permissões por usuário reduz o risco de erros e acessos indevidos, especialmente para usuários que não devem ter privilégios amplos.

  3. Administração em Pequenos Grupos: Em ambientes menores, onde não há necessidade de configurar permissões para grupos, definir permissões individuais para cada usuário pode simplificar o controle.

Boas Práticas para Configuração de Permissões por Usuário

  • Use Caminhos Completos dos Comandos: Sempre inclua o caminho completo dos comandos para evitar ambiguidades e garantir que apenas os comandos corretos sejam executados.

  • Evite ALL Sempre que Possível: Limite o uso de permissões amplas, como (ALL) ALL, para casos específicos de administradores confiáveis. Use listas de comandos específicos sempre que possível para reduzir riscos.

  • Documente Cada Entrada: Ao configurar permissões para usuários, adicione comentários explicativos, facilitando a manutenção e auditoria do arquivo sudoers.

Exemplo Completo de Configuração de Permissões por Usuário

Para ilustrar, imagine um sistema com os seguintes requisitos de acesso:

  1. ana: Precisa de acesso para visualizar e limpar logs do sistema.
  2. joao: Deve ser capaz de reiniciar serviços de rede e visualizar logs.
  3. admin: Tem permissões completas no sistema.

Configuração:

1
2
3
4
5
6
7
8
# Permitir que ana visualize e limpe logs do sistema
ana ALL=(root) /usr/bin/journalctl, /usr/bin/logrotate

# Permitir que joao visualize logs e reinicie o serviço de rede sem senha
joao ALL=(root) NOPASSWD: /usr/bin/journalctl, /usr/sbin/service networking restart

# Permitir que admin tenha acesso completo ao sistema
admin ALL=(ALL) ALL

Exemplo de Restrição de Comandos para Usuários Específicos

Imagine que você tenha um usuário lucas que precisa executar backups, mas não deve ter acesso para alterar arquivos ou apagar diretórios. Para isso, você poderia limitar as permissões para o comando de backup específico:

1
lucas ALL=(root) /usr/bin/rsync

Neste caso, lucas pode usar o rsync para realizar backups, mas não possui acesso para outros comandos que poderiam modificar o sistema.

Resumo da Seção

A configuração de permissões por usuário no arquivo sudoers permite conceder acesso detalhado e específico para cada usuário. Essa abordagem é especialmente útil para delegar tarefas precisas e reduzir o risco de acessos indevidos em ambientes de múltiplos usuários. Ao seguir boas práticas, como evitar o uso de permissões amplas e documentar cada entrada, o sudoers se torna uma ferramenta poderosa para a segurança e organização do sistema.


8. Configuração de Permissões por Grupo

Objetivo

A configuração de permissões por grupo no arquivo sudoers permite que administradores de sistema definam permissões para grupos de usuários de uma só vez, em vez de configurar permissões individualmente para cada membro. Essa abordagem é especialmente útil em ambientes com equipes que compartilham funções semelhantes, como desenvolvimento, suporte e administração.

Conteúdo

Estrutura de Configuração para Grupos no sudoers

No sudoers, as permissões de um grupo de usuários são configuradas utilizando o símbolo % antes do nome do grupo. Isso indica que a permissão se aplica a todos os membros do grupo especificado.

Sintaxe Básica:

1
%nome_do_grupo ALL=(usuário_de_destino) comando

Explicação da Estrutura:

  • %nome_do_grupo: O nome do grupo Unix/Linux, precedido pelo símbolo % para indicar que se trata de um grupo.
  • ALL: Define que a regra se aplica em todos os hosts.
  • (usuário_de_destino): Especifica o usuário como quem o comando pode ser executado (por exemplo, root).
  • comando: Lista de comandos permitidos para o grupo, incluindo o caminho completo de cada comando.

Exemplo de Configuração de Permissões por Grupo

Imagine que temos os seguintes grupos e necessidades de permissão:

  1. O grupo developers precisa reiniciar o serviço de aplicação e acessar o repositório Git.
  2. O grupo support precisa visualizar logs do sistema e reiniciar o servidor web.

As configurações no sudoers podem ser feitas da seguinte forma:

1
2
3
4
5
# Permissões para o grupo developers
%developers ALL=(root) /usr/bin/systemctl restart app_service, /usr/bin/git

# Permissões para o grupo support
%support ALL=(root) /usr/bin/journalctl, /usr/bin/systemctl restart apache2

Aqui:

  • O grupo developers pode executar os comandos systemctl restart app_service e git como root.
  • O grupo support tem permissão para visualizar logs e reiniciar o servidor web apache2.

Diferença entre Permissões por Grupo e por Usuário

  1. Escalabilidade: Configurar permissões por grupo é mais escalável em ambientes com múltiplos usuários. Ao definir permissões para um grupo, qualquer novo membro adicionado ao grupo automaticamente herda as permissões.

  2. Consistência: As permissões por grupo ajudam a manter consistência nas configurações, pois todos os membros de um grupo específico têm as mesmas permissões.

  3. Facilidade de Gerenciamento: Quando um grupo tem permissões específicas, adicionar ou remover um usuário ao grupo ajusta automaticamente os acessos, sem necessidade de editar o sudoers.

Boas Práticas ao Configurar Permissões por Grupo

  • Use Grupos com Funções Claras: Configure grupos que representem bem as funções dos usuários, como developers, support, e admins. Isso facilita a organização das permissões no sudoers.

  • Evite Conceder Permissões Amplas a Grupos Grandes: Para grupos com muitos membros, evite permissões amplas, como ALL, que permitem acesso a todos os comandos. Em vez disso, conceda permissões para comandos específicos.

  • Documente Cada Grupo: Adicione comentários ao sudoers para explicar as permissões de cada grupo, especialmente em ambientes com muitos grupos e configurações complexas.

Exemplo Completo de Configuração de Permissões por Grupo

Suponha que temos os seguintes requisitos de permissão:

  1. O grupo net_admins precisa de acesso para gerenciar configurações de rede.
  2. O grupo devs precisa de permissões para gerenciar o repositório Git e reiniciar o serviço de aplicação.
  3. O grupo it_support precisa visualizar logs e reiniciar o servidor web.

Configuração no sudoers:

1
2
3
4
5
6
7
8
# Permitir que net_admins gerencie configurações de rede
%net_admins ALL=(root) /sbin/ifconfig, /usr/sbin/iptables

# Permitir que devs gerenciem o repositório Git e o serviço de aplicação
%devs ALL=(root) /usr/bin/git, /usr/bin/systemctl restart app_service

# Permitir que it_support visualize logs e reinicie o servidor web
%it_support ALL=(root) /usr/bin/journalctl, /usr/bin/systemctl restart apache2

Exemplo de Caso de Uso: Equipe de Suporte com Permissão para Comandos de Diagnóstico

Imagine que o grupo helpdesk precisa de acesso apenas a comandos de diagnóstico básicos, como verificação de logs e status de rede, mas sem permissões para modificar configurações do sistema:

1
2
# Permissões limitadas para o grupo helpdesk
%helpdesk ALL=(root) /usr/bin/journalctl, /sbin/ifconfig

Essa configuração permite que o grupo helpdesk acesse comandos de visualização e diagnóstico sem fornecer acesso de modificação, garantindo um ambiente seguro para tarefas básicas de suporte.

Resumo da Seção

Configurar permissões por grupo no arquivo sudoers oferece uma maneira eficiente de gerenciar acessos para equipes e funções específicas. Ao definir permissões para grupos como developers e support, você garante consistência, escalabilidade e simplicidade no gerenciamento de permissões. Utilizar boas práticas, como evitar permissões amplas e documentar cada configuração, contribui para uma administração segura e organizada do sistema.


9. Usando o Comando sudo

Objetivo

O comando sudo permite que um usuário execute comandos com permissões administrativas (ou como outro usuário especificado) sem precisar acessar diretamente a conta root. Nesta seção, vamos explorar o uso prático do sudo, abordando comandos comuns, parâmetros úteis e boas práticas para seu uso seguro.

Conteúdo

Estrutura Básica do Comando sudo

A estrutura básica para o uso do sudo é a seguinte:

1
sudo comando
  • sudo: Executa o comando com os privilégios especificados no arquivo sudoers.
  • comando: O comando que o usuário deseja executar com privilégios administrativos ou de outro usuário.

Por exemplo:

1
sudo apt update

Esse comando executa a atualização de pacotes no sistema com privilégios elevados, algo que normalmente só seria possível com o acesso root.

Parâmetros Úteis do sudo

O sudo oferece parâmetros adicionais que facilitam seu uso em diferentes cenários. Abaixo estão alguns dos parâmetros mais comuns e suas finalidades:

  1. sudo -l: Lista as permissões sudo do usuário atual. Útil para verificar rapidamente quais comandos o usuário está autorizado a executar.

    1
    
    sudo -l
    
  2. sudo -u usuário comando: Permite que o comando seja executado como um usuário específico, não necessariamente root. O -u define o usuário como quem o comando será executado.

    1
    
    sudo -u deploy /usr/bin/git pull
    

    Neste exemplo, o comando git pull será executado com as permissões do usuário deploy.

  3. sudo -k: Remove o cache de autenticação do sudo, forçando uma nova autenticação na próxima execução de um comando sudo.

    1
    
    sudo -k
    
  4. sudo -i: Abre uma nova sessão shell como root, similar ao comando su -, permitindo o acesso completo à conta root.

    1
    
    sudo -i
    
  5. sudo !!: Executa o último comando digitado com privilégios sudo. Esse é um atalho útil para situações onde o usuário esqueceu de usar sudo e o comando falhou por falta de permissões.

    1
    
    sudo !!
    

Exemplos Práticos do Uso do sudo

  1. Executando um Comando com sudo: Comandos administrativos comuns, como reiniciar um serviço, exigem privilégios elevados. Abaixo está um exemplo para reiniciar o serviço de rede:

    1
    
    sudo systemctl restart networking
    
  2. Instalando Pacotes com sudo: Em distribuições Linux que utilizam gerenciadores de pacotes como apt ou yum, é necessário usar sudo para instalar ou atualizar pacotes:

    1
    
    sudo apt install nome_do_pacote
    
  3. Mudando o Usuário para Executar um Comando: Para executar um comando como outro usuário específico, utilize o parâmetro -u:

    1
    
    sudo -u postgres psql
    

    Nesse exemplo, o comando psql é executado como o usuário postgres, o que é útil para acessar o banco de dados PostgreSQL.

  4. Abrindo o Arquivo sudoers com Segurança: Para editar o arquivo sudoers de forma segura, use o comando visudo, que executa uma verificação de sintaxe ao salvar:

    1
    
    sudo visudo
    

Boas Práticas de Segurança no Uso do sudo

  1. Verifique as Permissões com sudo -l: Antes de executar comandos desconhecidos ou de alta criticidade, use sudo -l para verificar quais comandos o usuário tem permissão para executar, reduzindo o risco de erros.

  2. Evite o Uso Excessivo de sudo: Limite o uso de sudo a tarefas específicas que realmente requerem privilégios elevados, evitando o uso desnecessário que pode aumentar o risco de erros.

  3. Use sudo !! com Cuidado: Esse comando repete o último comando com sudo, o que pode ser útil, mas também perigoso se você acidentalmente repetiu um comando com consequências indesejadas.

  4. Cuidado com Comandos Perigosos: Comandos que alteram configurações críticas, como rm -rf ou shutdown, devem ser executados com cautela e atenção redobrada ao usar sudo.

Exemplo Completo de Sessão com sudo

Suponha que você está realizando uma série de tarefas administrativas e precisa verificar permissões, instalar pacotes, e executar alguns comandos como outro usuário.

  1. Listando Permissões sudo:

    1
    
    sudo -l
    
  2. Instalando um Pacote:

    1
    
    sudo apt install htop
    
  3. Executando um Comando como Outro Usuário:

    1
    
    sudo -u postgres psql -c "SELECT * FROM tabela_exemplo;"
    
  4. Limpando o Cache de Autenticação:

    1
    
    sudo -k
    

Essa sequência cobre diversas funcionalidades do sudo, mostrando como ele é flexível para várias necessidades administrativas.

Resumo da Seção

O comando sudo é uma ferramenta fundamental para administradores de sistemas, permitindo executar comandos com permissões elevadas de maneira segura. Com o uso apropriado de parâmetros como -l, -u, e -k, o sudo oferece controle e segurança para diversas operações. Seguir boas práticas e utilizar os parâmetros corretos garante um uso eficiente e seguro do sudo em ambientes multiusuário.


10. Usando o Comando su

Objetivo

O comando su (substitute user) permite que um usuário mude para outra conta de usuário no sistema, assumindo a identidade desse usuário temporariamente. Diferente do sudo, que concede privilégios elevados para comandos específicos, o su altera a sessão atual para a de outro usuário, como root, permitindo executar qualquer comando com as permissões desse usuário até que a sessão seja encerrada.

Conteúdo

Estrutura Básica do Comando su

A estrutura básica para o uso do su é a seguinte:

1
su - usuario
  • su: Comando para alternar para outro usuário.
  • -: Parâmetro opcional que inicializa o ambiente completo do usuário alvo, o que inclui variáveis de ambiente e o diretório HOME.
  • usuario: Nome do usuário para o qual você deseja mudar a sessão. Se omitido, su alterna para a conta root por padrão.

Por exemplo:

1
su - postgres

Esse comando muda o ambiente atual para o do usuário postgres, assumindo todas as permissões e o ambiente desse usuário. Para encerrar a sessão, basta digitar exit ou pressionar Ctrl+D.

Diferença entre su e sudo

  1. Escopo de Permissão: O sudo permite executar comandos específicos com permissões elevadas, enquanto o su muda completamente a sessão para outro usuário.

  2. Sessão Temporária: Com su, a sessão permanece ativa como o usuário alternado até que seja encerrada manualmente. No sudo, cada comando é executado e concluído antes de retornar à sessão original.

  3. Configuração de Permissões: O sudo utiliza o arquivo sudoers para conceder permissões específicas a usuários, enquanto o su depende diretamente das credenciais de cada usuário.

Exemplos Práticos do Uso do su

  1. Mudando para o Usuário root: Esse é o uso mais comum do su, onde o usuário acessa a conta root para realizar tarefas administrativas.

    1
    
    su -
    
  2. Mudando para um Usuário Específico: Em casos onde você precisa executar comandos com as permissões de um usuário não-privilegiado, como uma conta de serviço, su permite essa alternância.

    1
    
    su - deploy
    
  3. Executando Comandos Simples com su -c: Para executar um comando único como outro usuário, o parâmetro -c pode ser usado com su. Esse comando é útil para evitar a necessidade de abrir uma sessão completa.

    1
    
    su - postgres -c "psql -c 'SELECT * FROM tabela_exemplo;'"
    

Boas Práticas de Segurança com su

  1. Utilize su Somente Quando Necessário: O su abre uma sessão completa de outro usuário, geralmente root, o que aumenta o risco de executar comandos indesejados. Limite seu uso a situações onde uma sessão persistente é realmente necessária.

  2. Prefira sudo para Comandos Específicos: Para tarefas onde é preciso executar apenas um ou alguns comandos administrativos, sudo é geralmente uma opção mais segura e controlada do que su, já que o controle de permissões é mais granular.

  3. Monitore o Uso de su em Ambientes Compartilhados: Em sistemas com vários administradores, o uso de su como root pode dificultar o rastreamento de atividades. Em vez disso, sudo com auditoria e permissões configuradas é mais recomendável para ambientes colaborativos.

Exemplo Completo de Sessão com su

Suponha que você está realizando manutenção em um servidor PostgreSQL e precisa alternar para o usuário postgres para executar uma série de comandos no banco de dados.

  1. Iniciando a Sessão como postgres:

    1
    
    su - postgres
    
  2. Executando Comandos no Banco de Dados:

    1
    
    psql -c "SELECT * FROM tabela_exemplo;"
    
  3. Saindo da Sessão postgres:

    1
    
    exit
    

Esse fluxo permite que você execute uma série de comandos como postgres e, em seguida, retorne ao usuário original ao sair da sessão.

Quando Optar pelo su em Vez de sudo

  1. Tarefas Administrativas Extensas: Quando é necessário realizar múltiplos comandos como outro usuário, como root, em uma sessão contínua, su pode ser mais eficiente do que usar sudo repetidamente.

  2. Acessos Temporários a Contas de Serviço: Quando um administrador precisa interagir diretamente com uma conta de serviço para ajustar variáveis de ambiente ou executar scripts específicos.

  3. Ambientes Sem Configuração de sudo: Em sistemas onde o sudo não está configurado ou disponível, su continua sendo uma opção viável para realizar tarefas administrativas.

Resumo da Seção

O comando su é uma ferramenta poderosa para alternar sessões entre usuários no sistema, permitindo que administradores e outros usuários autorizados realizem tarefas como root ou como outras contas de serviço. Embora menos seguro e controlado que o sudo para executar comandos específicos, o su é útil para sessões prolongadas e ambientes que requerem acessos diretos a outras contas. Usar o su com cuidado e preferir o sudo para comandos isolados pode ajudar a manter a segurança e o controle em ambientes multiusuário.


Conclusão

Compreender e configurar corretamente as permissões administrativas é um passo fundamental para garantir a segurança e o bom funcionamento de qualquer sistema Unix/Linux. Neste tutorial, exploramos o uso do sudo e do su de forma aprofundada, discutindo desde a estrutura do arquivo sudoers até as melhores práticas para a criação de permissões específicas e controles de acesso.

O uso adequado do arquivo sudoers, com alias para usuários, comandos e permissões detalhadas, permite um controle de acesso rigoroso e minimiza os riscos de acessos indevidos. Além disso, aplicando o sudo para tarefas específicas e o su para sessões de administração contínua, é possível garantir eficiência e segurança em diferentes cenários administrativos.

Esperamos que este guia forneça as ferramentas e o conhecimento necessários para você configurar e gerenciar permissões com confiança em ambientes Unix/Linux, garantindo um sistema mais seguro e organizado para todos os usuários.


This post is licensed under CC BY 4.0 by the author.