- Quando você executa um executável, às vezes o sistema operacional nega sua permissão. Por exemplo,
make install
será necessário executar o prefixo como caminho do sistemasudo
, enquanto o prefixo não será o caminho do sistemasudo
. Como o sistema operacional decide que a execução de um executável exigiria mais privilégios do que um usuário, mesmo antes de o programa fazer alguma coisa? - Às vezes, a execução de um programa não terá permissão negada, mas o programa poderá fazer mais coisas se for executado
sudo
. Por exemplo, ao executardu
em algum diretório do sistema, somentesudo
ele poderá acessar algum diretório. Por que o sistema operacional não nega a permissão para executar um programa desse tipo ou prefere notificar mais privilégios antes que o programa possa ser executado? - É verdade que sempre que
sudo
funciona,su
também funciona, e sempre quesu
funciona,sudo
também funciona? ou comsu
, um usuário pode fazer mais do que comsudo
? Como o sistema operacional decide quandosudo
funciona e quandosu
é necessário?
permissions
sudo
StackExchange for All
fonte
fonte
Respostas:
sudo
o nome de outro usuário. Se esse usuário for "capaz de fazer mais coisas" do que o seu usuário e asudo
configuração permitir que você faça essas coisas em nome do outro usuário, sim,sudo
permitirá que você faça mais coisas. Isso não é necessário, no entanto. Se você apenas seguirsudo
no início da linha de comando, estará realmentesudo
comoroot
, então normalmente você é capaz de fazer mais coisas do que um mero mortal.sudo
é necessário fornecer sua própria senha de usuário e, em seguida, você pode fazer algumas coisas em nome do usuário de destino. Para usarsu
, você precisa da senha do usuário de destino e, se a possui, torna-se esse usuário de destino no que diz respeito ao sistema e pode fazer qualquer coisa que o usuário possa fazer.Veja também
fonte
chmod
desde que você seja o proprietário do arquivo ouroot
.chmod 400 hello && /lib64/ld-linux-x86-64.so.2 ./hello
produz um bom "Olá, mundo!" resultado.Para os fins que você descreveu, o sistema operacional não decide se você precisa do sudo para executar o programa inicialmente . Em vez disso, depois que o programa inicia a execução e tenta fazer algo que não é permitido pelo usuário atual (como gravar um arquivo
/usr/bin
para instalar um novo comando), o sistema operacional impede o acesso ao arquivo. A ação a ser executada nessa condição depende do programa;make
pára de executar, masdu
prossegue para o próximo arquivo / diretório após a impressão de uma mensagem.Os comandos
su
esudo
são duas maneiras diferentes de executar um programa com privilégios de root. Eles podem diferir em pequenos detalhes, como o conteúdo do ambiente ao iniciar o novo programa, dependendo das opções usadas. O sistema operacional não precisa decidir quando um ou outro pode funcionar.fonte
su
esudo
são programas privilegiados.su
altera (após a autenticação bem-sucedida) a identificação real e eficaz do usuário e do grupo para a do usuário que vocêsu
deseja. Assim,su
é semelhante alogin
. Observe quesu
pode ser usado para mudar para qualquer usuário, não apenas para raiz.sudo
também altera os IDs de usuário e grupo reais e eficazes. Até este pontosu
esudo
são semelhantes (mas não relacionados), além do que são muito diferentes.Com
su
, você precisa saber a senha do destino e, depois de autenticado, poderá fazer o que quiser como usuário. O uso desu
pode ser restringido pela configuraçãoSU_WHEEL_ONLY
em/etc/login.defs
. Se estiver definido, apenas usuários do grupowheel
poderão usarsu
, caso contrário, não será restrito. Além disso,su
é tudo ou nada.sudo
é completamente diferente em relação a isso. Comsudo
você, você pode definir políticas bastante complexas/etc/sudoers
sobre o que o sudoer (o usuário que chamasudo
) tem permissão para fazer. Por exemplo, você pode definir políticas em que determinados usuários podem executar apenas determinados programas com certos privilégios, enquanto outros usuários podem executar outros programas com outros privilégios.Uma das características marcantes
sudo
é que você pode configurá-lo para que um usuário precise se autenticar com sua própria senha (em vez da do destino). Assim,sudo
tornou-se muito popular entre os administradores, pois permite autorizar os usuários a realizar apenas operações privilegiadas definidas sem distribuir a senha do superusuário, além de obter algum grau de responsabilidade.fonte
O acesso é determinado pelo usuário que está executando o aplicativo e
sudo
executa os aplicativos como um usuário diferente.Versão completa:
Não sabe. O UNIX gerencia permissões não no nível do aplicativo, mas no sistema de arquivos: são concedidas permissões para que os usuários acessem arquivos específicos. Os aplicativos são executados em nome do usuário - cada processo em execução possui um usuário associado. Esse usuário é usado para determinar as permissões para esse aplicativo. O Sudo funciona executando aplicativos em nome de outro usuário (com permissões associadas a esse outro usuário), a saber
root
, o superusuário.Quanto aos seus exemplos:
Se o usuário tiver acesso de gravação a um diretório específico, ele poderá
make install
entrar nesse diretório. Caso contrário, eles podemroot
fazê-lo - usandosudo
.Se você não pode acessar arquivos em um diretório, a
du
execução para você também não pode acessá-lo.root
pode acessar praticamente todos os arquivos; portanto,sudo du
(du
executado em nome deroot
) também pode acessá-los.Sim e não. Sim, se o programa for realmente executado, ele deve se comportar da mesma forma em ambos
sudo
esu
. No entanto,sudo
fornece um controle mais refinado de quem pode executar o quê por conjunto de regras armazenadas em/etc/sudoers
arquivo.su
é mais simples - se você souber a senha do usuário de destino, poderá executar programas em nome desse usuário.Última observação: como o aplicativo lida com a negação de acesso (onde ele aborta, ignora ou avisa o usuário) depende da aplicação.
fonte
Ninguém ainda tem ✓, então eu montei uma resposta que tem tudo o que eu conseguia pensar.
1 Quando você executa um executável, às vezes o sistema operacional nega sua permissão. Por exemplo, executar make install com o prefixo como caminho do sistema precisará do sudo, enquanto que com o prefixo como caminho do sistema não será solicitado o sudo. Como o sistema operacional decide que a execução de um executável exigiria mais privilégios do que um usuário, mesmo antes de o programa fazer alguma coisa?
Não, isso não é feito quando um executável é iniciado. Isso é feito quando o executável tenta fazer alguma coisa.
O sistema operacional irá verificar as permissões e os recursos do sistema de arquivos (eles não são cobertos pelas permissões do sistema de arquivos e incluem reduzir o nível agradável, mknode, algumas coisas de rede de baixo nível, interromper os processos de outros, reiniciar, definir o horário etc.). Se você não tiver as permissões, não poderá fazê-lo. A raiz possui um conjunto completo de recursos, incluindo CAP_DAC_OVERRIDE (ignorar permissão de arquivo).
2 Às vezes, a execução de um programa não terá permissão negada, mas o programa poderá fazer mais coisas se for executado com o sudo. Por exemplo, ao executar o du em algum diretório do sistema, somente com o sudo ele poderá acessar algum diretório. Por que o sistema operacional não nega a permissão para executar um programa desse tipo ou prefere notificar mais privilégios antes que o programa possa ser executado?
O sistema operacional não pode saber o que o programa fará. Portanto, cabe ao programa verificar as permissões antes de iniciar e decidir o que fazer. Porém, ele não precisa fazer isso.
Nota: no Android, há um manifesto. Nesse aplicativo, o aplicativo declara quais privilégios ele pode usar. O sistema operacional eliminará qualquer aplicativo que tente usar um privilégio que não declara e nem sempre garante que um privilégio possa ser respeitado. por exemplo, o acesso à rede pode não estar disponível.
2 É verdade que sempre que o sudo funciona, o su também funciona, e sempre que o su funciona, o sudo também funciona? ou com su, um usuário pode fazer mais do que com sudo? Como o sistema operacional decide quando o sudo funciona e quando o su é necessário?
sudo
esu
faça aproximadamente a mesma coisa. Algumas diferenças são o tratamento de variáveis de ambiente e outras formas de evitar problemas de segurança. No entanto, são as duas ferramentas para permitir que você se torne outro usuário e ambos têm um usuário root padrão.su
era a ferramenta original, requer que você digite a senha do usuário / grupo para o qual está mudando.sudo
é mais recente e requer, por padrão, que você digite sua própria senha, mas pode ser configurado para aceitar a senha do usuário / grupo para o qual você está alternando ou nenhuma senha. Ele também permite muita configuração, de quais comandos ele trabalhará, para quem e como ele será autenticado neste programa para este usuário nesta máquina. Tambémsudoedit
há parte dissosudo
e pode ser usado para permitir a edição como um usuário diferente e evitar o problema de segurança de descascar um editor (chamar o exec do editor para executar um processo arbitrário com privilégios escalados).fonte