Eu sou novo no uso do sed, mas aprendendo rapidamente a amá-lo por sua flexibilidade geral em automação. Estou procurando executar um script com vários controles de segurança toda vez que implanto um novo sistema, e parte disso exige que eu bloqueie o GRUB. Eu estou procurando desbloquear a opção geral do Ubuntu no menu GRUB, para que qualquer pessoa possa usá-lo depois disso sem uma senha, mantendo todo o resto protegido por senha.
Dito isto, estou procurando pesquisar no arquivo /boot/grub/grub.cfg uma linha específica e adicionar --unrestricted a essa opção. (Nós usamos apenas 16.04.03 para que todos os sistemas tenham teoricamente o mesmo arquivo na instalação)
A linha no arquivo é:
menuentry 'Ubuntu' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-2aa7ed2c-67a7-42d5-84fb-0ddab74c5dd0' {
E eu quero que fique assim:
menuentry 'Ubuntu' --class ubuntu --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-simple-2aa7ed2c-67a7-42d5-84fb-0ddab74c5dd0' {
Eu sei que sed -i é para edição no local e deve ser pesquisado. Mas além disso, estou perdido na sintaxe aqui para fazê-lo realmente fazer o que precisamos. Até onde eu sei, esse posicionamento de --unrestricted é necessário, pois acredito que seria mais fácil se não tivéssemos que fazer uma pesquisa tão longa, mas novamente sou novo em sed e inseguro. Alguém poderia me ajudar com essa inserção sed? De preferência, também me explique por que a sintaxe diferente vai aonde ela é, então eu sei para o futuro.
post-install.sh
script. Dessa forma, você pode adicionar / editar mais scripts no futuro e apenas executar novamente o script de instalação. Apenas um pensamento ...Respostas:
Aqui está o comando.
Isso substituirá a linha no arquivo sem a necessidade de um arquivo temporário, devido à opção -i.
Se não importa para onde a linha "- irrestrita vai", isso pode ser mais simples.
fonte
Minha resposta é semelhante à do RaidPinata:
o "\ $" escapa do símbolo "$" para que não seja mal interpretado e estou especificando uma string mais longa para que, se o comando for executado duas vezes, você não obtenha a inserção duas vezes.
fonte
sed
permite que você defina os delimitadores iniciando e finalizando o comando 's' em tempo real - o RaidPinata usou "/ e eu usei '/ ... Existem algumas diferenças no comportamento usando" em vez de ". Temo que ainda esteja aprendendo, então não vou ajudar muito nisso!Como @oldfred menciona em seu comentário. Minha resposta é: NÃO FAÇA ISSO.
Não sou profissional, mas tenho certeza de que toda vez que o kernel é atualizado, seu grub é atualizado e quaisquer alterações
/boot/grub/grub.cfg
serão substituídas.Você provavelmente criará uma entrada Grub personalizada e também se a segurança for sua preocupação, este artigo parece ser uma boa leitura e tem melhores opções.
https://help.ubuntu.com/community/Grub2/Passwords
https://help.ubuntu.com/community/Grub2/Passwords#Protecting_Menuentries
Nota: "Outra opção é criar um menu personalizado, adicionar os itens de menu que você deseja (incluindo aqueles que deseja proteger) e desativar os scripts padrão. Os usuários e senhas podem ser incluídos neste arquivo e não no arquivo 00_header. Esse pode ser um método mais fácil de atribuir proteção por senha - especialmente se apenas alguns dos itens de menu estiverem protegidos ".
É assim que eu adicionaria uma entrada de menu personalizada ao Grub2, mas nunca fiz uma entrada personalizada para o sistema operacional existente, então deixo isso para você pesquisar.
fonte