Como o sistema operacional sabe que um comando precisa do sudo?

16
  1. Quando você executa um executável, às vezes o sistema operacional nega sua permissão. Por exemplo, make installserá necessário executar o prefixo como caminho do sistema sudo, enquanto o prefixo não será o caminho do sistema 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?
  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 sudo. Por exemplo, ao executar duem algum diretório do sistema, somente sudoele 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?
  3. É verdade que sempre que sudofunciona, sutambém funciona, e sempre que sufunciona, sudotambém funciona? ou com su, um usuário pode fazer mais do que com sudo? Como o sistema operacional decide quando sudofunciona e quando sué necessário?
StackExchange for All
fonte
Esta pergunta foi respondida por você ou você deseja obter mais informações?
CTRL-ALT-DELOR

Respostas:

14
  1. Às vezes, a mensagem "Permissão negada" deve-se às permissões do sistema de arquivos que negam o acesso de gravação, por exemplo. O executável / ferramenta simplesmente verifica se o sistema de arquivos concede a você permissões suficientes para fazer o que você está prestes a fazer e gera um erro se for negado pelo sistema de arquivos. Outras vezes, a própria ferramenta verifica seu ID de usuário antes de permitir que você continue a usá-lo.
  2. Quando você executa um programa com sudoo nome de outro usuário. Se esse usuário for "capaz de fazer mais coisas" do que o seu usuário e a sudoconfiguração permitir que você faça essas coisas em nome do outro usuário, sim, sudopermitirá que você faça mais coisas. Isso não é necessário, no entanto. Se você apenas seguir sudono início da linha de comando, estará realmente sudocomo root, então normalmente você é capaz de fazer mais coisas do que um mero mortal.
  3. Definitivamente não. Para usar, 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 usar su, 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

Joseph R.
fonte
Obrigado. As "permissões do sistema de arquivos estão negando o acesso de gravação" = "o modo de acesso do arquivo não possui um bit de execução definido para o usuário, que pode ser definido pelo chmod"?
StackExchange for All
11
@ Tim Na verdade, ele = "o modo de acesso do arquivo não possui um bit de gravação definido para o usuário". E sim, é claro que isso pode ser remediado, chmoddesde que você seja o proprietário do arquivo ou root.
Joseph R.
Se o sudo é necessário, depende total e unicamente se o bit de execução não está definido para o usuário? Veja unix.stackexchange.com/q/147052/674
StackExchange for All
@ Tim Obviamente, você precisa do bit de execução para poder executar o executável em primeiro lugar.
Joseph R.
11
@JosephR. Não é óbvio. chmod 400 hello && /lib64/ld-linux-x86-64.so.2 ./helloproduz um bom "Olá, mundo!" resultado.
doneal24
24

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/binpara instalar um novo comando), o sistema operacional impede o acesso ao arquivo. A ação a ser executada nessa condição depende do programa; makepára de executar, mas duprossegue para o próximo arquivo / diretório após a impressão de uma mensagem.

Os comandos sue sudosã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.

Greg Hewgill
fonte
6

sue sudosão programas privilegiados. sualtera (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ê sudeseja. Assim, sué semelhante a login. Observe que supode ser usado para mudar para qualquer usuário, não apenas para raiz. sudotambém altera os IDs de usuário e grupo reais e eficazes. Até este ponto sue sudosã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 de supode ser restringido pela configuração SU_WHEEL_ONLYem /etc/login.defs. Se estiver definido, apenas usuários do grupo wheelpoderão usar su, caso contrário, não será restrito. Além disso, sué tudo ou nada.

sudoé completamente diferente em relação a isso. Com sudovocê, você pode definir políticas bastante complexas /etc/sudoerssobre o que o sudoer (o usuário que chama sudo) 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, sudotornou-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.

contra-modo
fonte
2

O acesso é determinado pelo usuário que está executando o aplicativo e sudoexecuta os aplicativos como um usuário diferente.

Versão completa:

Como o sistema operacional sabe que um comando precisa do sudo?

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:

  1. Se o usuário tiver acesso de gravação a um diretório específico, ele poderá make installentrar nesse diretório. Caso contrário, eles podem rootfazê-lo - usando sudo.

  2. Se você não pode acessar arquivos em um diretório, a duexecução para você também não pode acessá-lo. rootpode acessar praticamente todos os arquivos; portanto, sudo du( duexecutado em nome de root) também pode acessá-los.

É verdade que sempre que o sudo funciona, o su também funciona, e sempre que o su funciona, o sudo também funciona?

Sim e não. Sim, se o programa for realmente executado, ele deve se comportar da mesma forma em ambos sudoe su. No entanto, sudofornece um controle mais refinado de quem pode executar o quê por conjunto de regras armazenadas em /etc/sudoersarquivo. 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.

el.pescado
fonte
1

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?

sudoe sufaç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ém sudoedithá parte disso sudoe 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).

ctrl-alt-delor
fonte