Linux é possível executar script como proprietário do arquivo?

Linux é possível executar script como proprietário do arquivo?

Lamento não saber se este é o lugar correto ou não. Estou com pressa, correndo com o tempo. Eu tenho um arquivo que possui os seguintes atributos em uma máquina Linux. (núcleo 2.6.26)

-rwxrwxrwx 1 root root 25 2015-06-01 08:08 /usr/bin/runme

Não tenho privilégios de root na máquina e não sei a senha de root. É possível executar este script como proprietário. Eu escrevi e compilei algum código c em um arquivo diferente, mas não funcionou. O código que usei;

#include <unistd.h>
#include <errno.h>

int main(void) {        
     setuid(0);
     system("/bin/bash /usr/bin/runme"); 
}

Aí alguém disse que usa execve, mas o resultado não muda. Aqui está o código quando uso execve;

#include <unistd.h>
#include <errno.h>

int main(void) {        
        extern char * const environ[];
    char * const command[] = {"runme", NULL, NULL, NULL, NULL,NULL, NULL};
    execve("/usr/bin/runme", command, environ);
}

Responder1

É possível, mas você precisa ter muito cuidado - seu script tem privilégios globais de leitura e gravação, o que significaqualquer umpoderia mudá-lo e, portanto, poderia fazerqualquer coisacomo raiz.

Isso é uma espécie de falha de segurança de arrepiar os cabelos. Se você quiser obter umnormalbinário para ser executado como usuário, você precisa adicionar o setuidsinalizador ao binário com chmod g+s. Você terá que fazer isso como root, porque isso também abriria uma enorme falha de segurança se não o fizesse.

Se você quiser fazer um script... isso depende da linguagem do script. Alguns (na verdade - muitos) simplesmente se recusarão a trabalhar, devido à forma como são implementados - mais uma vez, risco de segurança.

Eu sugeriria que o root (sic) a ser acessado aqui seja observado sudo- é um "superusuário" e permite que usuários não privilegiados executem comandos como contas privilegiadas (ou root). Então - uma vez configurado - você pode:

sudo /path/to/script

Embora eu ainda não deixaria esse roteiro gravável. Isso ainda é um risco de segurança.

Se você não tem root, nenhuma senha de root e nenhum acesso de administrador... então eu sugeriria que isso é porque NÃO é o seu sistema, e você pare de tentar fazer isso, porque provavelmente é uso indevido de computador e pode ser um crime dependendo de onde você vive.

Responder2

Não há como (sem usar uma vulnerabilidade) executar um script (ou qualquer executável) como outro usuário, a menos que esse usuário tenha concedido esse direito a você em algum momento.

Para executáveis ​​"reais", isso pode ser feito usando o bit setuid, que pode ser definido pelo proprietário do arquivo. Para scripts, os ambientes modernos normalmente ignoram o bit setuid, então você precisaria de algum tipo de wrapper (personalizado ou sudo). Verhttps://unix.stackexchange.com/questions/364/allow-setuid-on-shell-scriptspara mais detalhes.

Seu caso específico é um excelente exemplo de como o bit setuid pode ser perigoso. Ter o bit setuid em um arquivo que seja gravável e executável em todo o mundo permitiria que você executasse qualquer comando como proprietário do arquivo. Como o proprietário do arquivo é realmente root, substituir o conteúdo de tal arquivo, por exemplo, pelo conteúdo do bash concederia a você um shell root.

informação relacionada