AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / ubuntu / Perguntas / 910226
Accepted
Ravexina
Ravexina
Asked: 2017-04-30 07:44:27 +0800 CST2017-04-30 07:44:27 +0800 CST 2017-04-30 07:44:27 +0800 CST

Proibir aliases e funções comprometedoras; alias cd='rm -rf ~'

  • 772

Digamos que alguém se sente atrás do meu laptop por um segundo e execute:

alias cd='Ha Ha, Got You :))'

ou executamos um software/script/etc desconhecido e ele acrescenta algo a ~/.bashrc. Curti:

alias sort='rm -rf ~'

Estes são apenas exemplos de aliases; Como você sabe, essas coisas também podem ser feitas usando funções:

 cd(){ echo "Removing everything you've got :D"; }

Essas situações são apenas exemplos imaginários, considere qualquer coisa semelhante.

Que tal um pequeno roteiro?

sudo -n ls &>/dev/null
if [ "$?" -eq "0" ]
 then
  sudo "Some dangerous command"
 else
  cd $1
fi

Então alias cd="/home/user/.config/gtk/.cd.sh".

Para os comandos que foram executados no bash, podemos simplesmente fechar e reabrir nosso terminal, mas e os que foram definidos nos arquivos de inicialização, não podemos verificar os arquivos ou a lista de aliases/funções toda vez que executamos um terminal .

command-line
  • 2 2 respostas
  • 2080 Views

2 respostas

  • Voted
  1. Best Answer
    Ravexina
    2017-04-30T07:44:27+08:002017-04-30T07:44:27+08:00

    Introdução

    Arquivos de configuração Bash

    O Bash possui vários arquivos de configuração (também conhecidos como inicialização), ele usa esses arquivos para configurar um ambiente específico para cada usuário.

    Alguns desses arquivos estão localizados em /etc, um deles que eu conheço é /etc/profile, é um arquivo de configuração global e suas configurações serão aplicadas em todas as sessões, outro é /etc/bash.bashrc; Não precisamos contornar esses arquivos por causa de sua localização, eles já estão protegidos e apenas o root tem direitos para editá-los.

    Um diretório muito importante que pode nos ajudar muito é: /etc/skel; Sempre que você criar um novo usuário com o diretório inicial, os arquivos dentro desse diretório serão usados ​​como um esqueleto para o diretório inicial do seu novo usuário.

    ls -a /etc/skel
    
    .bash_logout  .bashrc  .profile
    

    Também podemos usar dpkgpara encontrar esses arquivos:

    $ dpkg -L bash | grep etc
    
    /etc/skel/.bashrc
    /etc/skel/.bash_logout
    /etc/skel/.profile
    /etc/bash.bashrc
    

    podemos ver que todos eles são instalados por bash.

    Como as coisas funcionam no bash

    Um alias ou função pode ser definido em qualquer um desses arquivos, então vamos ver como esses arquivos serão usados ​​por bash.

    Da bashpágina man:

    Quando o bash é invocado como um shell de login interativo ou como um shell não interativo com a opção --login, ele primeiro lê e executa comandos do arquivo /etc/profile, se esse arquivo existir. Depois de ler esse arquivo, ele procura por ~/.bash_profile, ~/.bash_logine ~/.profile, nessa ordem, e lê e executa comandos a partir do primeiro que existe e é legível.

    então a ordem é:~/.bash_profile > ~/.bash_login > ~/.profile

    Quando um shell de login sai, o bash lê e executa comandos do arquivo ~/.bash_logout, se existir.

    este será executado toda vez que sairmos de um shell de login, não consigo ver como este pode ter algum efeito em nossa situação.

    Quando um shell interativo que não é um shell de login é iniciado, o bash lê e executa comandos de /etc/bash.bashrc e ~/.bashrc, se esses arquivos existirem.

    portanto, o campo mais importante é ~/.bashrc, porque quase 90% dos shells bash que executamos estão no modo interativo e sem login. e se dermos uma olhada neste arquivo, podemos ver que ele procurará outro arquivo chamado ~/.bash_aliases, se conseguiu localizá-lo, também localizará sourceesse arquivo.


    Comece a cuidar desses arquivos

    Em primeiro lugar, devemos mudar ~/.profilepara ~/.bash_profilecaso contrário, não importa se protegemos ~/.profileo arquivo, alguém pode criar um ~/.bash_profilee ele substituirá nossas configurações, então:

    mv ~/.profile ~/.bash_profile
    

    Depois disso, se você não estiver usando um ~/.bash_aliasesarquivo, crie-o, novamente como acima, alguém pode simplesmente criar esse arquivo e há uma chance de que ele possa alterá-lo ou criar um alias dentro dele.

    touch ~/.bash_aliases
    

    Por fim, use chattrpara proteger esses arquivos contra edição e remoção.

    Da chattrpágina man:

    Um arquivo com o atributo 'i' não pode ser modificado: não pode ser excluído ou renomeado, nenhum link pode ser criado para este arquivo e nenhum dado pode ser gravado no arquivo. Somente o superusuário ou um processo que possui o recurso CAP_LINUX_IMMUTABLE pode definir ou limpar esse atributo.

    sudo chattr +i ~/.bash_profile ~/.bashrc ~/.bash_aliases
    

    Pronto, não esqueça que sempre que quiser editar esses arquivos, primeiro remova o -iatributo.

    Reiniciar tudo sem fechar/reabrir terminal

    Outra solução alternativa é criar um arquivo:

    sudo touch /usr/local/bin/reload_aliases
    

    Coloque seus apelidos lá:

    unalias -a
    alias x='...'
    alias b='...'
    

    Certifique-se de que ninguém pode escrever nesse arquivo:

    sudo chmod a=r,x /usr/local/bin/reload_aliases
    

    Agora, toda vez que você quiser recarregar tudo, execute:

    /usr/local/bin/reload_aliases
    

    Reversão

    E se você mudou de ideia:

    sudo chattr -i ~/.bash_profile ~/.bashrc ~/.bash_aliases
    mv ~/.bash_profile ~/.profile
    rm ~/.bash_aliases # if you don't use it
    
    • 2
  2. waltinator
    2017-04-30T09:43:00+08:002017-04-30T09:43:00+08:00

    Se você fizer coisas estúpidas (sair sem bloquear a tela, executar cegamente scripts não inspecionados de fontes não confiáveis, etc.), obterá resultados ruins.

    Tentar ser inteligente o suficiente para se recuperar de más práticas nunca funcionou antes.

    • 0

relate perguntas

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Existe um comando para listar todos os usuários? Também para adicionar, excluir, modificar usuários, no terminal?

    • 9 respostas
  • Marko Smith

    Como excluir um diretório não vazio no Terminal?

    • 4 respostas
  • Marko Smith

    Como descompactar um arquivo zip do Terminal?

    • 9 respostas
  • Marko Smith

    Como instalo um arquivo .deb por meio da linha de comando?

    • 11 respostas
  • Marko Smith

    Como instalo um arquivo .tar.gz (ou .tar.bz2)?

    • 14 respostas
  • Marko Smith

    Como listar todos os pacotes instalados

    • 24 respostas
  • Martin Hope
    Flimm Como posso usar o docker sem sudo? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    led-Zepp Como faço para salvar a saída do terminal em um arquivo? 2014-02-15 11:49:07 +0800 CST
  • Martin Hope
    ubuntu-nerd Como descompactar um arquivo zip do Terminal? 2011-12-11 20:37:54 +0800 CST
  • Martin Hope
    TheXed Como instalo um arquivo .deb por meio da linha de comando? 2011-05-07 09:40:28 +0800 CST
  • Martin Hope
    Ivan Como listar todos os pacotes instalados 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    David Barry Como determino o tamanho total de um diretório (pasta) na linha de comando? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher "Os seguintes pacotes foram retidos:" Por que e como resolvo isso? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford Como os PPAs podem ser removidos? 2010-07-30 01:09:42 +0800 CST

Hot tag

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve