Estou trabalhando com um membro de suporte de um produto, e ele insiste que eu preciso ser root para instalar uma série de patches e que o sudo não funcionará; ele não fornece uma razão, mas parece muito firme em suas crenças. Navegando no Superusuário Não consigo determinar nenhuma razão possível para esse ser o caso e, na confirmação, quando executo:
sudo -l
Eu recebo:
...
User [MY USERNAME] may run the following commands on this host:
(ALL) ALL
Obter acesso da equipe Linux / servidor para realmente ser root não é um processo imediato, pelo que entendi; portanto, prefiro instalá-los pessoalmente.
Existe alguma razão prática para o sudo se comportar de maneira diferente do root para instalar o software em um servidor?
sudo
e dos scripts conforme os scripts estão atualmente escritos. Se for esse o caso, então resposta sds poderia ser mais útil para você:sudo su -
.Respostas:
Depende fortemente de como você chama seu programa com
sudo
ousu
.Por exemplo, no sistema em que estou neste momento:
Onde [1] = / usr / local / sbin: / usr / local / bin: / usr / sbin: / usr / bin: / sbin: / bin
Env = As variáveis de ambiente são redefinidas para 1 e 5, extraídas de $ USER em 2,3,4
Assim, um script ou um programa que é lançado com uma opção diferente pode ver diferente
$PATH
,$HOME
, sua concha pode ler diferentes.bashrc
,.profile
e variáveis de ambiente. Ele lê o arquivo relacionado ao$HOME
. Cada usuário pode modificar seu ambiente de uma maneira diferente (variáveis$PATH
, .bashrc, .profile, .bash_profile, alias ...). Em particular, um usuário pode ter uma ordem diferente dos diretórios nos seus$PATH
e, como conseqüência, um script pode executar um comando, por exemplo, em/home/$USER/bin
vez daquele no caminho esperado a partir da raiz.Você pode executar o programa
sudo -i
como estava logado como rootsu -
, mas pode ter um comportamento diferente se executá-lo comsudo MyCommand
ou comsu -c MyCommand
.De
man su
:Do homem
sudo
fonte
sudo
pode ser limitado por permissões no arquivo sudoers x fazer coisas como o root não tem essas limitações? A última citação em bloco talvez implique isso, mas se eu entendi corretamente, parece outra diferença substancial além do ambiente (ou talvez por causa do ambiente?).Se você tiver
sudo
acesso total , poderároot
usarsudo su -
, para que o ponto de segurança seja discutível.De fato, há uma maneira de discernir a diferença entre um programa executado como
root
e um programa executado sobsudo
- usandogetuid
vsgeteuid
- mas esse é um truque artificial. Por que um sistema de patch faria isso?fonte
su -
, ele pode querer usarsudo -i
para que ele tenha o mesmo ambiente de quando efetuar login diretamente.sudo myscript
, manterá $ PATH e variáveis de ambiente do shell em que está. Se você executar comsudo -i myscript
você, execute como se efetuasse login como root. Veja a resposta com nosso _zoo de chamadas :-) _sudo
a exploração madeireira como rootgeteuid()
egetuid()
são diferentes um do outro é um mito. su e sudo alteram os IDs de usuário reais e efetivos para os do usuário de destino antes de executar o comando ou shell especificado, exceto na situação muito incomum em que você os configurou explicitamente para se comportar de outra maneira. Você pode verificar isso (para sudo) executandosudo id -u
esudo id -ru
(ambos mostram 0), lendo sudo (8) (em COMMAND EXECUTION ) ou escrevendo um programa de teste .Existem algumas diferenças se você estiver obtendo um shell raiz, como apontado por @Hastur.
Se você não está obtendo um shell raiz, há mais diferenças. O membro do suporte pode ter experiência tentando fazer coisas como
sudo patch -p0 < /root/patch.file
ondepatch
é executado como raiz, mas<
(canalizar a partir de um arquivo) não é.fonte
sudo /bin/bash -c "./patch -p0 < /root/patch"
. Ainda mais delicado é o caso quando você usa o redirecionamento para criar um arquivo>
. Na primeira maneira, você criará um arquivo que pertence ao usuário apenas se você tiver o direito suficiente de escrever no diretório final. Na última forma, você irá criar um arquivo de propriedade do root ... o lado escuro do Unix ;-)Eu acredito que ao usar o acesso sudo, um arquivo de log é criado, no entanto, quando executado diretamente através do acesso root, não existe.
fonte
Depende de quão granular você deseja que o acesso root seja. Se você tiver vários usuários que executam tarefas diferentes em um sistema, o sudo seria mais ideal. Um exemplo que uso com freqüência é a necessidade de reiniciar um aplicativo ou banco de dados. Sempre é melhor fazer a segurança menos privilegiada. Eu uso grupos e só permito que esses grupos executem ações explícitas. Um bom livro que descreve esse processo é "Domínio do Sudo: controle de acesso do usuário para pessoas reais". Na verdade, é um bom livro sobre sudo em geral ...
fonte