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 setuid
sinalizador 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.