Como você pode saber se a execução de um programa requer raiz?

10

Entendo que isso é um pouco fundamental e talvez uma pergunta boba, mas não consegui encontrar uma resposta.

Eu entendo que cada arquivo tem o "Executable"bit.

Eu assumi que os programas que exigem root, pertencentes ao rootusuário e ao rootgrupo, não terão o Executablebit Othere impediriam que usuários não raiz os executassem. Mas nos diretórios /bine /sbinvejo que todos os arquivos têm permissões como-rwxr-xr-x

Então, o que realmente determina se um usuário precisa ter permissão de root para executar alguma coisa?

reitor
fonte
1
Por padrão, você ou qualquer usuário pode executar qualquer programa /binou /sbindiretórios. O problema é que alguns desses programas estão executando diferentes, dependendo de qual usuário os executa.
Radu Rădeanu

Respostas:

13

Em algum momento, está no código. Por exemplo, no meio de hwclock.c, você encontrará:

if (getuid() == 0)
            permitted = TRUE;
else {
            /* program is designed to run setuid (in some situations) */
            if (set || systohc || adjust) {
                    warnx(_("Sorry, only the superuser can change "
                            "the Hardware Clock."));
[...]

o que mudará o comportamento do programa se você é root ou não.

Na maioria dos outros casos, é implícito; delegado ao kernel. Por exemplo, se o programa chamar a chamada do sistema que permite reiniciar o sistema, ele funcionará apenas se você for root. Se você não for root, terá um erro de "permissão negada" que o aplicativo (se bem escrito) simplesmente relata a você. Ou você está tentando excluir um arquivo; se você tiver a permissão correta no arquivo para fazê-lo, ele será bem-sucedido; caso contrário, depende se você é root ou não --- quando rmchamadas, unlink()o kernel verifica as permissões.

Portanto, não, em princípio você não pode dizer apenas olhando para a permissão do executável se o programa exigir privilégios de root ou não. Muitos programas os exigirão apenas para algumas operações, por isso será realmente difícil fazer algo assim. O caso de hwclockum (qualquer um pode ler o relógio, mas somente o root pode configurá-lo), mas há centenas deles ( kill, rm, cat...)

Depois, há o mundo relacionado e interessante dos programas setuid ...

Rmano
fonte
Então, basicamente, o kernel está "encarregado disso"? Se o programa fizer uma chamada do sistema, o kernel determinará se o usuário que está executando o programa deve ser root e o aplicará?
Dean
2
Basicamente sim. O programa pode fazer testes adicionais, mas a verificação de permissão está no nível do kernel. Programas de raiz setuid são a exceção; eles correm como root sempre que eles precisam para verificar se há permissão a si mesmos (e são uma boa fonte de falhas de segurança ...)
Rmano