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

1

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

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

Eu não tenho privilégios de root na máquina e não sei a senha do root. É possível executar este script como proprietário. Eu tenho escrever e compilar 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"); 
}

Então alguém disse que usa execve, mas o resultado não é alterado. Aqui está o código quando eu 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);
}
    
por Cello 01.06.2015 / 11:36

2 respostas

3

É possível, mas você tem que ser extremamente cuidadoso com - seu script tem privilégios globais de leitura / gravação, o que significa que qualquer pessoa poderia alterá-lo e, portanto, poderia fazer qualquer coisa como root.

É uma espécie de buraco de segurança. Se você deseja que um binário normal seja executado como usuário, adicione o setuid ao binário com chmod g+s . Isso você terá que fazer como root, porque isso também está abrindo uma enorme falha de segurança se você não o fez.

Se você quiser fazer com um script ... isso depende da linguagem de script. Alguns (na verdade - muitos) simplesmente se recusam a trabalhar, devido à maneira como são implementados - novamente, risco de segurança.

Eu sugiro que a raiz (sic) para ir aqui é olhar para sudo - é um "super usuário fazer", 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 deixasse esse roteiro do mundo gravável. Isso ainda é um risco de segurança.

Se você não tem root, nenhuma senha de root e nenhum acesso administrativo ... então eu sugiro que isso é porque NÃO é seu sistema, e você pára de tentar fazer isso, porque provavelmente é um mau uso do computador e pode ser um crime dependendo de onde você mora.

    
por 01.06.2015 / 12:03
2

Não há nenhuma maneira (sem usar uma vulnerabilidade) de executar um script (ou qualquer executável) como outro usuário, a menos que esse usuário tenha concedido a você esse direito 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). Consulte link para obter 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 é mundialmente gravável e executável permitiria executar qualquer comando como o proprietário do arquivo. Como o proprietário do arquivo é, na verdade, root, substituindo o conteúdo de tal arquivo por, por exemplo, o conteúdo do bash lhe concederia um shell root.

    
por 01.06.2015 / 19:41

Tags