Eu gostaria de criar um novo usuário e dar a ele acesso ao sudo. Para ser específico, quero que ele use sudo vim
e edite o httpd.conf. Eu escrevi isso em sudoers:
user ALL=(ALL) /usr/bin/vim /etc/httpd/confs/httpd.conf
Eu, no entanto, ouvi dizer que isso poderia ser arriscado. Por que isso é problemático? Quão sério é o problema?
vim
entrar, o usuário pode abrir e gravar em qualquer arquivo que desejar./etc/httpd/confs/httpd.conf
. Em seguida, usechgrp [OPTION] GROUPNAME FILE
para alterar a propriedade do grupo/etc/httpd/confs/httpd.conf
. Algo comogroupadd vimportant
criar o novo grupo echgrp -v vimportant /etc/httpd/confs/httpd.conf
alterar a propriedade do grupo. yolinux.com/TUTORIALS/LinuxTutorialManagingGroups.htmlsudoers
página do manual.sudo
acesso ao vim, o usuário poderá usar o vim como root. No vim, você pode executar comandos UNIX ( como executar comandos Unix no Vim? ) Para que um usuário possa executar ações comouseradd <myuser>
,rm -rf /
ou muitas outras coisas.Respostas:
Embora você restrinja os argumentos da linha de comando, nada impede o usuário de usar o vim para abrir, editar e substituir qualquer arquivo aleatório uma vez que esteja sendo executado como root.
O usuário pode executar
sudo vim /etc/httpd/conf/httpd.conf
e depois:r /etc/sudoers
NOTA: A menos que seja restrito pelo SELinux, o usuário pode ler qualquer arquivo dessa maneira!user ALL=(ALL) NOPASSWD: ALL
:w /etc/sudoers
Posso imaginar dezenas de maneiras semelhantes com as quais seu usuário agora pode acessar, modificar ou destruir seu sistema.
Você nem terá uma trilha de auditoria cujos arquivos foram alterados dessa maneira, pois você o verá editando sua configuração do Apache nas mensagens de log do sudo. Este é um risco de segurança ao conceder
sudo
privilégios a qualquer editor.Esse é mais ou menos o mesmo motivo pelo qual a concessão de direitos no nível raiz do sudo a comandos como
tar
eunzip
geralmente é insegura, nada impede que você inclua substituições para binários do sistema ou arquivos de configuração do sistema no arquivo morto.Um segundo risco, como muitos outros comentadores apontaram, é o de
vim
permitir escapes de shell , onde você pode iniciar um sub-shell a partir do vim que permite executar qualquer comando arbitrário . Na sua sessão do sudo vim, eles serão executados como root, por exemplo, o escape de shell::!/bin/bash
lhe dará um shell raiz interativo:!/bin/rm -rf /
fará boas histórias no pub.O que fazer em vez disso?
Você ainda pode usar
sudo
para permitir que os usuários editem arquivos que não possuem de maneira segura.Na configuração do sudoers, você pode definir um comando reservado especial
sudoedit
seguido pelo nome do caminho completo (curinga) para o (s) arquivo (s) que um usuário pode editar:O usuário pode então usar a
-e
opção na linha de comando sudo ou osudoedit
comando:Conforme explicado na página do manual :
O
sudoers
manual também possui uma seção completa de como oferecer proteção limitada contra fugas de shell com as opçõesRESRICT
eNOEXEC
.e
fonte
sudo tar
esudo unzip
também causava problemas. Obrigado.:!rm -rf /
, gritos!echo "user ALL=(ALL) NOPASSWD: ALL" > ~/sudoers; tar cv ~/sudoers | sudo tar xv -C /etc
E boom. O acesso root ao tar é uma vulnerabilidade.:sh
e depois crescer, shell de rootEssa configuração permite que o usuário edite esse arquivo. Para fazer isso, ele inicia um
vim
editor com direitos de root.Depois que o
vim
comando é iniciado, o usuário pode fazer o que quiser com esse editor. - Ele pode abrir um arquivo diferente ou até mesmo iniciar um shell no vim.Portanto, o usuário agora pode visualizar e editar arquivos arbitrários e executar comandos arbitrários no seu sistema.
fonte
Bloqueios de segurança
Alguns programas, como por exemplo
less
,vi
,vim
emore
, permitir que outros programas executados a partir de um comando-o shell é conhecido como Shell Escape ou fugir para o interpretador de comandos. Nesses casos, você pode usarNOEXEC
para impedir que alguns programas permitam a execução de outros privilégios. Exemplo:Isso permitiria que o usuário editasse uma visualização privilegiada de qualquer arquivo no sistema executando o vim e mais, mas desabilita a possibilidade de executar outros programas com privilégios do interpretador de comandos de escape
vim
.É importante
sudo
incluir vários bloqueios de segurança (padrão) que podem impedir tarefas perigosas, como redirecionar a saída padrão da execução de um programa (STDOUT
) para arquivos fora do diretório inicial do usuário.Se definido no arquivo
/etc/sudoers
que um usuário pode executar com privilégios/usr/bin/vim
, ou seja, algo como o seguinte:sudo
permite que o usuário regular definido possa executar/usr/bin/vim
das seguintes maneiras:Mas seja impedido de executar o vim da seguinte maneira:
fonte
A resposta simples:
A seguir está um comando do Vim:
Agora eles têm um shell raiz.
fonte
Uma possível melhoria incremental da segurança seria substituir:
user ALL=(ALL) /usr/bin/vim /etc/httpd/confs/httpd.conf
com
user ALL=(ALL) /usr/bin/rvim /etc/httpd/confs/httpd.conf
e faça com que o usuário execute
sudo rvim /etc/httpd/confs/httpd.conf
.O Vim suporta um modo restrito acionado com a opção de linha de comando -Z ou iniciando o programa como rvim. Quando o modo restrito está ativado "todos os comandos que usam um shell externo são desativados". Essa abordagem não impediria o usuário de usar um
:split file
comando ex para abrir outros arquivos, mas pelo menos deveria impedir comandos shell deliberadamente maliciosos como:!rm -rf /
.fonte
Eu concordo com a resposta de HBruijn que executar o vim como root abre o sistema muito amplo e o sudoedit seria uma solução mais segura.
Mas, mesmo assim, é provável que seu sistema ainda esteja bastante aberto. Pelo menos assumindo que algum processo apache com privilégios de root será iniciado com base nessa configuração. Existem milhões de maneiras de configurar o apache de forma que ele execute programas externos. Como um exemplo, considere o argumento de pipe na diretiva CustomLog . O manual declara explicitamente:
Obviamente, se seus usuários puderem escrever a configuração, eles poderão alterar o programa para o que quiserem, por exemplo, algo que execute um script de shell para conceder permissões adicionais.
Por esse motivo, recentemente hackeei uma maneira de usar recursos de forma que o apache possa obter a capacidade especial de vincular-se a uma porta privilegiada, mesmo que esteja executando como um usuário normal. Dessa forma, os usuários podem editar a configuração e até iniciar o servidor, e ainda estão seguros. O único problema é que eles podem vincular qualquer processo em qualquer IP. Um certo grau de confiança permanece, pois eles podem encontrar uma maneira de travar o sshd do sistema e, em seguida, iniciar sua própria versão na tentativa de obter a senha root.
fonte
Note-se que mesmo um
sudoedit {.../whatever.conf}
pode ser um risco de segurança.Crie um script de shell
/tmp/make_me_root.sh
e chame esse script no seu arquivo de configuração. Conheço vários exemplos em que essa abordagem está funcionando:
Comando samba -> log nt token
syslog-ng -> program: Enviando mensagens para aplicativos externos
Apache -> CustomLog
Suponho que se possa estender essa lista sem fim.
Tudo que você precisa fazer é reiniciar o serviço. Obviamente, quando você for root, reverterá essas linhas de configuração para desfocar seus traços.
fonte
Claro, não é mais seguro. Como dito anteriormente, o sudoedit é a maneira mais fácil e adequada de fazer isso.
O que eu quero acrescentar é que o vim permite o lançamento de um shell, para que não apenas possa editar qualquer arquivo do sistema, ele também permita o lançamento de um shell e faça o que ele quiser.
Apenas tente iniciar um vim e digite: sh
fonte