Eu tenho uma configuração de rede muito sensível e eu realmente não quero estragar tudo. Minha rede consiste em vários usuários com privilégios de sudo.
Eu quero impedi-los de correr
service NetworkManager restart
service network restart
comandos.
Existe alguma maneira de conseguir isso?
networking
enetwork-manager
? Além disso, por que seus usuários têmsudo
acesso? Eles não devem, a menos que você queira que eles tenham privilégios de root completo.Respostas:
Usar o CmndAlias
ALL
nunca será seguroExistem 1000 maneiras de executar
service network restart
sem fazersudo service network restart
. Aqui está um exemplo do que um usuário malcriado pode tentar:Se você fornecer aos usuários o
ALL
alias de comando e tentar criar uma lista negra, eles sempre poderão encontrar uma maneira de contorná-la. Blacklist bash, e eles usarão python. Lista negra de python e eles usarão o Perl. Blacklist Perl, e eles usarão PHP. Ninguém quer isso!Se você realmente não quer que alguém faça alguma coisa, você deve fazer como Thomas diz, e criar uma lista branca de coisas que eles estão autorizados a fazer.
Configurando uma lista branca com uma exceção
Um exemplo de uma pequena lista branca com uma exclusão pode ser encontrada na parte inferior de
man sudoers
:(De fato, este exemplo da página de manual não é seguro e pode ser explorado para alterar a senha do root! Veja os comentários abaixo para saber como.)
Podemos tentar adaptar isso ao seu caso, para oferecer todos os
service
comandos ao grupo de funcionários, mas excluir osservice network
comandos que lhe dizem respeito:(O
ALL
nessa posição refere-se ao Host_Alias, não ao Cmnd_Alias - confuso, não é?)O usuário não poderá executar
sudo bash
ousudo tee
ousudo wget
ousudo /path/to/malicious_script
. Você pode colocar na lista branca mais comandos de administração para seus usuários, se você for cuidadoso. Seja específico!Nota: eu adicionei a
*
palavranetwork
anterior antes, caso uma bandeira inofensiva seja adicionada àservice
ferramenta no futuro. Vamos imaginar que um--verbose
sinalizador foi adicionado no futuro, então os usuários poderão executar o seguinte:Portanto, precisamos
*
consumir qualquer sinalizador antes do nome do serviço. A única desvantagem é que isso pode bloquear outros serviços dos quais você não se importa de executar, por exemplo, um serviço chamadosafe-network
ounetwork-monitor
que também seria rejeitado.Permitir que os usuários editem um arquivo usando permissões de grupo
Abaixo, você pode encontrar várias tentativas utilizando
rnano
meiosudo
para permitir aos usuários editar um arquivo ou arquivos. Mas, na verdade, eles são mais complexos e mais perigosos do que deveriam ser.Uma solução muito mais simples e segura é alterar as permissões de grupo nos arquivos específicos para os quais você deseja abrir os direitos de edição. Aqui estão alguns exemplos:
Se você precisar de um controle mais refinado (por exemplo: acesso para apenas 3 usuários, mas não todos os membros da equipe), poderá criar um novo grupo usando o
addgroup
comando e adicionar apenas alguns usuários.Permita que os usuários editem um arquivo através de
sudo
O restante desta resposta tornou-se uma investigação sobre como é fácil deixar buracos na sua
sudo
configuração ao tentar oferecer flexibilidade aos seus usuários. Eu não recomendaria fazer o seguinte!Se você deseja conceder aos usuários acesso para editar um arquivo específico, tente usar
rnano
:rnano
só permitirá que eles editem o arquivo especificado. Isso é importante para impedir que um usuário mal-intencionado edite um serviço diferente (por exemplo/etc/init.d/urandom
) e adicione uma linha a ele que seria executadaservice network restart
.Infelizmente, não encontrei uma maneira de restringir o
rvim
suficiente (o usuário ainda pode abrir qualquer arquivo usando:e
), por isso estamos presosnano
.Infelizmente, permitir que os usuários editem vários arquivos é muito mais difícil ...
Permita que os usuários editem vários arquivos (muito mais difícil do que deveria ser)
1. Abordagens inseguras
Cuidado com curingas! Se você oferecer muita flexibilidade (ou qualquer flexibilidade), ela poderá ser explorada:
Nesse caso, um usuário mal-intencionado poderá editar qualquer outro script de serviço inicial e executá-lo:
(Na verdade, o Sudo impede
.
e..
amplia o comando, mas infelizmente não os argumentos.)Eu esperava que algo assim pudesse funcionar, mas ainda é inseguro:
Como
sudo
atualmente oferece apenas padrões glob , isso*
corresponderá a qualquer coisa - não é uma expressão regular!(Edit: Eu considerei se você poderia se dar bem com o acima exposto na sua situação, porque não há subpastas abaixo
sites-available
. Exigimos que um caracter seja correspondido após a pasta e/..
deve falhar após um nome de arquivo. No entanto, este não é um solução viável, porquernano
aceita vários argumentos. E, de qualquer maneira, isso ainda seria inseguro em uma pasta que tinha subpastas!)Mesmo se não tivermos subpastas e excluirmos quaisquer linhas que contenham
/../
, a regra que oferece uma*
glob ainda poderá ser explorada, porquernano
aceita vários argumentos (alternando entre eles<C-X>
e o espaço é aceito com prazer pela*
glob.2. Empurrar o envelope (também inseguro)
E se rejeitarmos qualquer linha que contenha espaços ou tentarmos alcançá-lo
/..
? Em seguida, uma solução final viável pode ser a seguinte:Aceitamos qualquer coisa "embaixo" da pasta, mas também rejeitamos qualquer chamada para
rnano
se/..
ou/.
ousomos passadas, ou se a pasta é direcionada diretamente. (Tecnicamente, a
/.
exclusão torna a/..
exclusão redundante, mas deixei os dois por uma questão de clareza.)Encontrei a pasta e as
/.
exclusões eram necessárias porque, caso contrário, o usuário poderia segmentar a própria pasta. Agora você pode pensarrnano
em bloquear se apontado para uma pasta, mas você estaria errado. Na verdade, minha versão (2.2.6-1ubuntu1) inicia com um aviso moderado e um arquivo vazio; depois,<C-X>
solicita que eu insira qualquer nome de arquivo que eu gostaria de salvar, abrindo um novo vetor de ataque! Bem, pelo menos, se recusou a substituir um arquivo existente (no teste que eu fiz). De qualquer forma, como não há como colocar as subpastas na lista negra com o sudo, devemos concluir que essa abordagem é novamente insegura. Desculpe usuários!Essa descoberta me fez duvidar da minuciosidade do
nano
modo "restrito" de. Eles dizem que uma corrente é tão forte quanto seu elo mais fraco. Estou começando a sentir a combinação dasudo
magia negra da lista negra ernano
pode não ser mais seguro do que uma cadeia de margaridas.3. Abordagens seguras, mas limitadas
Os globos são muito restritos - eles não nos permitem combinar uma classe de personagem várias vezes. Você pode oferecer várias edições de arquivo, se todos os seus nomes de arquivos tiverem o mesmo tamanho (nesse caso,
host
seguido por um único dígito):Mas se você deseja conceder ao usuário acesso para editar vários arquivos, pode ser necessário especificar explicitamente cada arquivo:
Não fique tentado a usar um
*
a qualquer momento. Consulte as seções 1. e 2. acima para saber o porquê! Lembre-se: um pequeno deslize pode comprometer toda a conta do superusuário e todo o sistema.4. Escreva seu próprio verificador de argumentos (a segurança agora é de sua responsabilidade)
Espero que eles adicionem suporte a regexp
sudo
no futuro; poderia resolver muitos problemas se usado corretamente. Mas também podemos precisar da capacidade de verificar as propriedades dos argumentos (para permitir apenas arquivos, apenas pastas ou apenas determinados sinalizadores).Mas há uma alternativa para criar flexibilidade no sudo. Passar a bola:
Em seguida, escreva seu próprio
staffedit
script ou executável para verificar se os argumentos transmitidos pelo usuário são legais e somente execute a solicitação se forem.fonte
ALL=(ALL:ALL) ALL
muito semântica, mas sempre presumi que em algum lugar haveria um verificador decente de argumentos ... Eu estava errado. É realmente muito limitado. Até a exclusão de raiz de senha oferecida na página de manual pode ser quebrada com um simples argumento de linha de comandosudo passwd -q root
,. Bem, os autores do sudo listam [algumas alternativas] (sudo.ws/sudo/other.html) em seu site. Espero que eles adicionem suporte a regexp no futuro.rnano
sua descrição aqui porque é uma versão do nano que não possui a função 'salvar como'? Não estou familiarizado com o programa.$ man nano
então/-R<Enter>
-q
deve vir depois:sudo passwd root -q
. O exemplo pete pode ser reforçado excluindo*root*
.sudoedit
para habilitar com segurança a modificação de arquivos comsudo
.Primeiro, abra o arquivo sudoers com
sudo visudo
. A adição deuser ALL=!/usr/sbin/service
IIRC não permitirá oservice
comando para o usuáriouser
.Fontes: http://nixcraft.com/showthread.php/15132-Sudo-Exclude-Commands-and-Disable-sudo-su-Bash-Shell
fonte
Eu encontrei a solução.
Abri o terminal e mudei para usuário root
su -
e digiteivisudo
para editar.então, no final, escrevi linhas como
Então eu salvei e fechei e reiniciei também.
Agora, se eu estou digitando como
service network restart
ouservice NetworkManager restart
não está me permitindo e está dando um erro comoe da mesma forma para o
service network restart
comando também.fonte
sudo cp -p /etc/init.d/network /etc/init.d/network-not-in-sudo
e depoissudo /etc/init.d/network-not-in-sudo restart
). É por isso que é muito mais seguro criar inclusões em vez de exclusões no arquivo sudoers, por exemplo, indicar com quais serviços eles têm permissão para interagir.A resposta real para isso é que você realmente não pode impedir isso. Você pode impedir que alguém não intencional execute acidentalmente esse comando por meio dos métodos descritos nas outras respostas, mas se alguém realmente deseja executá-lo e está na lista de sudoers, ele pode executá-lo. Por exemplo, eles poderiam fazer o seguinte:
joe@box:~$ sudo bash root@box:~# service network restart
Ou outro comando divertido que eles poderiam usar para contornar suas restrições no arquivo sudoers:
sudo visudo
Para encurtar a história, se você pode sudo e não se restringe à execução de comandos específicos, pode fazer praticamente o que quiser. Mesmo que você os restrinja a um determinado conjunto de comandos, você deverá certificar-se de que não é possível ao usuário copiar outro comando que ele queira executar com o mesmo nome de um que ele tenha permissão para executar ( como sobrescrevendo o comando que eles têm permissão para executar.)
fonte
Use firejail para restringir usuários com caixas de areia.
https://github.com/netblue30/firejail/
Defina firejail como shell em vez de bash em / etc / passwd, para todos os usuários que você deseja restringir. É muito fácil de usar e possui uma boa documentação.
Exemplo:
fonte