Ao escrever um script de shell, no qual alguns, mas nem todos os comandos, precisam de privilégios de superusuário, devo
adicione sudo aos comandos que precisam de privilégios de superusuário e execute o shell script sem sudo, ou
não adicione sudo aos comandos que precisam de privilégios de superusuário, mas execute o shell script com sudo?
Na segunda maneira, só precisarei fornecer minha senha uma vez, mas todos os comandos no script serão executados com privilégios de superusuário, incluindo os comandos que não precisam.
Na primeira maneira, talvez eu precise fornecer minha senha várias vezes para diferentes comandos sudo, enquanto os privilégios de superusuário são concedidos apenas aos comandos que precisam deles.
Por questões de segurança, a primeira maneira é melhor. Por conveniência, o segundo caminho é melhor.
Eu tenho pensado em adotar o primeiro caminho. Portanto, tenho que lidar com a inconveniência de fornecer minhas senhas para vários comandos sudo no shell script.
-
Um script bem escrito detectaria se estava sendo executado com as permissões corretas e não chamava o sudo, mas há muitos scripts ruins
Então, devo usar o segundo caminho? Se então,
como posso escrever "o script detectaria se estava sendo executado com as permissões corretas e não chamava o sudo"?
como posso melhorar sua segurança para evitar o problema de conceder privilégios de superusuário a comandos que não precisam deles ao executar o script com sudo?
- Essa abordagem simples teria o melhor de ambas as abordagens: adicione sudo a comandos que apenas precisam dela e execute o script com ou sem sudo, dependendo de eu querer conveniência ou segurança? Essa abordagem tem algum problema?
Obrigado.
sudo
tinha um cache de credenciais padrão. Isso está desativado na sua plataforma?Respostas:
Para resolver seu primeiro problema:
Há uma verificação simples e POSIX para root:
Como alternativa, no Bash, mais codificadores direcionados ao desempenho podem querer usar:
Observe que intencionalmente coloquei o código em funções para reutilização.
Para resolver seu segundo problema:
Você não pode fazer muito sobre isso. Pelo menos nada vem à minha mente. Se eu vi o script, talvez eu tenha sugestões. Mas como você não o incluiu na sua pergunta ... Se você executar o script inteiro com
sudo
ou comoroot
, não vejo como controlar isso.Para abordar o comentário:
Nos meus scripts, geralmente prossigo com a última abordagem, mas isso não significa necessariamente que eu a recomendo. Porque depende de quem o script se destina -
root
apenas; para o usuário principalmente com a exceção de alguns usuários teremsudo
direitos; você precisaria literalmente incluir seu script na pergunta para que eu pudesse responder com qualquer valor.fonte
sudo -u "$SUDO_USER" command...
?sudo -u "$SUDO_USER" command
deveria significar aqui?Eu acho que posso responder isso.
Não há nenhuma razão para você ter um problema aqui, é por isso:
Se houver apenas um comando que precise ser executado como root, o
run
seu programa comoroot
ousudo
porquesudo
dentro do seu script é o caminho mais longo. Você esqueceu que os programadores são preguiçosos?Se você precisar de muitos comandos
run
comoroot
, em seguida, executá-lo comoroot
ousudo
.Se outros usuários precisarem do
run
seu programa, configuresudo
-os, poissudo
é muito personalizável e atenderá às suas necessidades.Aqui está um exemplo com
sudo
:Sempre use
visudo
ao editar o arquivo sudoers .....sudo
Também é ótimo para alterar usuários dentro do seu programa / script. Aqui está uma linha de um dos meus scripts:https://www.cyberciti.biz/tips/shell-root-user-check-script.html
como faço para determinar se um script de shell está executando com permissões de raiz
EDITAR a pedido do cavalheiro @terdon:
Pense no seu script dessa maneira ....
É um script público (outras pessoas que você não o usará) O que o script faz? Isso lhe diz que horas? Ou atualiza o iptables em 200 sistemas? Se você apenas o usar, ele está relacionado ao trabalho / profissional ou é para uso pessoal?
Você só precisa saber com antecedência em que consiste o seu grupo de usuários, é isso.
Se é
written
para dar ou vender para administradores, mesmo assim, por que não deveriascript
ser permitido executar comoroot
?? Que mal pode causar?Scripts / programas reais costumam ser executados como usuário privilegiado e ninguém menciona que isso não é problema, mas quando programadores, principalmente novatos como eu, falam sobre essas coisas, então é uma ameaça real à segurança ..... qual é o cara no seu post? referir-se a tentar dizer, embora não seja elegante, é que algumas pessoas olham para o controle que você tem
system
e seu código .... você define os arquivos com mais permissões do que você vai usar, você tem todas as verificações em seu lógica ou programador talentoso vai ver perigos no seu código apenas olhando para ele?Se você
code needs root
usarsudo
, e se houver muitos, execute-o comoroot.
...... minha resposta termina aqui ufafonte