systemdjournalctl: consultar o diário do systemdudev
Muitos comandos e utilitários do sistema precisam ser executados como root para modificar arquivos e/ou executar tarefas que apenas o superusuário tem permissão de fazer. Por motivos de segurança e para evitar a execução acidental de comandos perigosos, não é aconselhável, de modo geral, efetuar login diretamente como root. Em vez disso, é recomendável trabalhar como usuário normal, sem privilégio, e usar o comando sudo para executar comandos com privilégios elevados.
No SUSE Linux Enterprise Desktop, por padrão, o comando sudo é configurado para funcionar como o su. No entanto, o sudo oferece a possibilidade de permitir que os usuários executem comandos com privilégios de qualquer outro usuário de uma forma altamente configurável. Isso pode ser usado para atribuir funções com privilégios específicos a determinados usuários e grupos. Por exemplo, é possível permitir que os membros do grupo usuários executem um comando com os privilégios de wilber. É possível restringir ainda mais o acesso ao comando, por exemplo, proibindo a especificação de qualquer opção do comando. Enquanto o su sempre requer senha de root para autenticação com PAM, o sudo pode ser configurado para autenticar com suas próprias credenciais. Isso reforça a segurança porque não há necessidade de compartilhar a senha de root. Por exemplo, você pode permitir que os membros do grupo usuários executem um comando frobnicate como wilber, com a restrição de que nenhum argumento seja especificado. Isso pode ser usado para atribuir funções com habilidades específicas a determinados usuários e grupos.
sudo #
O sudo é simples de usar, porém, muito poderoso.
Conectado como usuário normal, você pode executar qualquer comando como root anexando o sudo ao comando. A senha de root será solicitada e, se autenticada com êxito, execute o comando como root:
tux >id -un1 tuxtux >sudo id -un root's password:2 roottux >id -un tux3tux >sudo id -un 4 root
O comando | |
A senha não aparece ao ser inserida, nem como texto sem criptografia nem como marcadores. | |
Somente os comandos que começam com | |
Durante um tempo limitado, você não precisa inserir a senha de |
O redirecionamento de E/S não funciona conforme você deve esperar:
tux >sudo echo s > /proc/sysrq-trigger bash: /proc/sysrq-trigger: Permission deniedtux >sudo cat < /proc/1/maps bash: /proc/1/maps: Permission denied
Apenas o binário echo/cat é executado com privilégios elevados, enquanto o redirecionamento é executado pelo shell do usuário com os privilégios do usuário. Você pode iniciar um shell como na Seção 2.1.2, “Iniciando um shell” ou usar o utilitário dd:
echo s | sudo dd of=/proc/sysrq-trigger sudo dd if=/proc/1/maps | cat
Anexar o sudo a cada comando pode ser trabalhoso. Embora seja possível especificar um shell como um comando sudo bash, é recomendável usar um dos mecanismos incorporados para iniciar um shell:
sudo -s (<comando>)
Inicia um shell especificado pela variável de ambiente SHELL ou o shell padrão do usuário de destino. Se um comando for especificado, ele será passado para o shell (com a opção -c), do contrário, o shell será executado no modo interativo.
tux:~ >sudo -i root's password:root:/home/tux #exittux:~ >
sudo -i (<comando>)
Igual ao -s, mas inicia o shell como login. Isso significa que os arquivos de inicialização do shell (.profile, etc.) são processados e o diretório de trabalho atual é definido como o diretório pessoal do usuário de destino.
tux:~ >sudo -i root's password:root:~ #exittux:~ >
Por padrão, o sudo não propaga as variáveis de ambiente:
tux >ENVVAR=test env | grep ENVVAR ENVVAR=testtux >ENVVAR=test sudo env | grep ENVVAR root's password: 1tux >
A saída vazia mostra que a variável de ambiente |
É possível mudar esse comportamento com a opção env_reset. Consulte a Tabela 2.1, “Opções e flags úteis”.
sudo #
O sudo é uma ferramenta muito flexível com uma configuração extensa.
Se você bloqueou o comando sudo por engano, pode usar su - e a senha de root para obter um shell de root e executar visudo para corrigir o erro.
O arquivo de configuração de política principal do sudo é /etc/sudoers. Já que é possível se bloquear fora do sistema em caso de erros no arquivo, é altamente recomendável usar visudo para edição. Ele impede mudanças simultâneas no arquivo aberto e verifica se há erros de sintaxe antes de gravar.
Apesar do nome, você também pode usar editores diferentes do vi definindo a variável de ambiente EDITOR, por exemplo:
sudo EDITOR=/usr/bin/nano visudo
No entanto, o próprio arquivo /etc/sudoers é fornecido por pacotes do sistema, e as modificações podem falhar durante atualizações. Portanto, é recomendável inserir a configuração personalizada nos arquivos no diretório /etc/sudoers.d/. Qualquer arquivo nesse diretório é incluído automaticamente. Para criar ou editar um arquivo nesse subdiretório, execute:
sudo visudo -f /etc/sudoers.d/NAME
Se preferir, use um editor diferente (por exemplo, nano):
sudo EDITOR=/usr/bin/nano visudo -f /etc/sudoers.d/NAME
/etc/sudoers.d
O comando #includedir em /etc/sudoers, usado para /etc/sudoers.d, ignora os arquivos que terminam em ~ (til) ou que contêm . (ponto).
Para obter mais informações sobre o comando visudo, execute man 8 visudo.
Nos arquivos de configuração sudoers, há dois tipos de opções: strings e flags. Enquanto as strings podem conter qualquer valor, os flags podem ser ON ou OFF. As construções de sintaxe mais importantes dos arquivos de configuração sudoers são:
# Everything on a line after a # gets ignored 1 Defaults !insults # Disable the insults flag 2 Defaults env_keep += "DISPLAY HOME" # Add DISPLAY and HOME to env_keep tux ALL = NOPASSWD: /usr/bin/frobnicate, PASSWD: /usr/bin/journalctl 3
Há duas exceções: | |
Remova | |
Consulte a Seção 2.2.3, “Regras em sudoers”. |
|
Nome da opção |
Descrição |
Exemplo |
|---|---|---|
targetpw
|
Esse flag controla se o usuário que faz a chamada deve digitar a senha do usuário de destino (ON) (por exemplo |
Defaults targetpw # Turn targetpw flag ON |
rootpw
|
Se definido, o |
Defaults !rootpw # Turn rootpw flag OFF |
env_reset
|
Se definido, o |
Defaults env_reset # Turn env_reset flag ON |
env_keep
|
Lista de variáveis de ambiente para manter quando o flag |
# Set env_keep to contain EDITOR and PROMPT Defaults env_keep = "EDITOR PROMPT" Defaults env_keep += "JRE_HOME" # Add JRE_HOME Defaults env_keep -= "JRE_HOME" # Remove JRE_HOME |
env_delete
|
Lista de variáveis de ambiente para remover quando o flag |
# Set env_delete to contain EDITOR and PROMPT Defaults env_delete = "EDITOR PROMPT" Defaults env_delete += "JRE_HOME" # Add JRE_HOME Defaults env_delete -= "JRE_HOME" # Remove JRE_HOME |
É possível também usar o token Defaults para criar álias para uma coleção de usuários, hosts e comandos. Além disso, é possível aplicar uma opção apenas a um conjunto específico de usuários.
Para obter informações detalhadas sobre o arquivo de configuração /etc/sudoers, consulte man 5 sudoers.
As regras referentes à configuração sudoers podem ser muito complexas, portanto, esta seção abordará apenas os princípios básicos. Cada regra segue o esquema básico ([] marca as partes opcionais):
#Who Where As whom Tag What User_List Host_List = [(User_List)] [NOPASSWD:|PASSWD:] Cmnd_List
User_List
Um ou mais identificadores (separados por ,): Um nome de usuário, um grupo no formato %GROUPNAME ou um ID de usuário no formato #UID. A negação pode ser executada com ! prefixo.
Host_List
Um ou mais identificadores (separados por ,): Um nome (completo) do host ou um endereço IP. A negação pode ser executada com ! prefixo. ALL é a opção comum para Host_List.
NOPASSWD:|PASSWD:
Não será solicitada uma senha para o usuário ao executar comandos correspondentes a CMDSPEC após NOPASSWD:.
O padrão é PASSWD, ela apenas deve ser especificada quando ambas estão na mesma linha:
tux ALL = PASSWD: /usr/bin/foo, NOPASSWD: /usr/bin/bar
Cmnd_List
Um ou mais especificadores (separados por ,): Um caminho para um executável seguido de argumentos permitidos ou nada.
/usr/bin/foo # Anything allowed /usr/bin/foo bar # Only "/usr/bin/foo bar" allowed /usr/bin/foo "" # No arguments allowed
É possível usar ALL como User_List, Host_List e Cmnd_List.
Uma regra que permite que o tux execute todos os comandos como root sem digitar uma senha:
tux ALL = NOPASSWD: ALL
Uma regra que permite que o tux execute systemctl restart apache2:
tux ALL = /usr/bin/systemctl restart apache2
Uma regra que permite que o tux execute wall como admin sem argumentos:
tux ALL = (admin) /usr/bin/wall ""
Construções do tipo
ALL ALL = ALL
não devem ser usadas sem Defaults targetpw, do contrário, qualquer pessoa poderá executar comandos como root.
Embora a configuração padrão geralmente seja suficiente para instalações e ambientes de área de trabalho simples, as configurações personalizadas podem ser muito úteis.
sudo sem senha de root #
Em casos com restrições especiais (“o usuário X apenas pode executar o comando Y como root”), isso não é possível. Em outros casos, ainda convém ter algum tipo de separação. Por convenção, os membros do grupo wheel podem executar todos os comandos com sudo como root.
Adicione você mesmo ao grupo wheel.
Se a sua conta do usuário ainda não é membro do grupo wheel, adicione-a executando sudo usermod -a -G wheel NOMEDEUSUÁRIO e efetuando logout e login novamente. Verifique se a mudança foi bem-sucedida executando groups NOMEDEUSUÁRIO.
Defina como padrão a autenticação com a senha do usuário que faz a chamada.
Crie o arquivo /etc/sudoers.d/userpw com visudo (consulte a Seção 2.2.1, “Editando os arquivos de configuração”) e adicione:
Defaults !targetpw
Selecione uma nova regra padrão.
Se os usuários tiverem que digitar as senhas novamente, remova o comentário da linha específica em /etc/sudoers e comente a regra padrão.
## Uncomment to allow members of group wheel to execute any command # %wheel ALL=(ALL) ALL ## Same thing without a password # %wheel ALL=(ALL) NOPASSWD: ALL
Torne a regra padrão mais restritiva.
Comente ou remova a regra allow-everything em /etc/sudoers:
ALL ALL=(ALL) ALL # WARNING! Only use this together with 'Defaults targetpw'!
Não se esqueça desta etapa, do contrário, qualquer usuário poderá executar qualquer comando como root!
Teste a configuração.
Tente executar sudo como membro e não membro de wheel.
tux:~ >groups users wheeltux:~ >sudo id -un tux's password: rootwilber:~ >groups userswilber:~ >sudo id -un wilber is not in the sudoers file. This incident will be reported.
sudo com aplicativos X.Org #
Ao iniciar os aplicativos gráficos com o sudo, você encontra o seguinte erro:
tux > sudo xterm
xterm: Xt error: Can't open display: %s
xterm: DISPLAY is not setO YaST selecionará a interface ncurses em vez da interface gráfica.
Para usar o X.Org em aplicativos iniciados com o sudo, as variáveis de ambiente DISPLAY e XAUTHORITY precisam ser propagadas. Para fazer essa configuração, crie o arquivo /etc/sudoers.d/xorg, (consulte a Seção 2.2.1, “Editando os arquivos de configuração”) e adicione a seguinte linha:
Defaults env_keep += "DISPLAY XAUTHORITY"
Se ainda não foi definida, defina a variável XAUTHORITY da seguinte maneira:
export XAUTHORITY=~/.Xauthority
Agora é possível executar os aplicativos X.Org como de costume:
sudo yast2
Uma rápida visão geral sobre os switches de linha de comando disponíveis pode ser recuperada por sudo --help. Uma explicação e outras informações importantes estão disponíveis na página de manual: man 8 sudo, enquanto a configuração está documentada em man 5 sudoers.