Suponho que um arquivo executável com o conjunto de bits SetUID esteja em execução como proprietário, mas não consigo reproduzi-lo. Eu tentei o seguinte.
$ cat prepare.sh cp / bin / bash. chown root.root bash chmod 4770 bash # Verificado $ sudo sh prepare.sh $ ./bash $ id -u 1000 $ exit $
$ cat test.c #include <stdio.h> #include <unistd.h> int main () { printf ("% d,% d \ n", getuid (), geteuid ()); retornar 0; } $ gcc -o test test.c $ chmod 4770 test # Verificado Teste de root.root do $ sudo chown $ ./test 1000.1000 $ # Por que ???
Contudo
$ su # ./bash # id -u 0 0 # ./teste 0,0 # Saída # Saída $
Nota: O ponto de montagem não tem nosuid
nem está noexec
definido.
Alguém pode explicar por que não está funcionando no Ubuntu 16.04 LTS?
sudo
? Há um erro ou erro de digitação, no entanto,chmod
está faltando um nome de arquivo.Respostas:
Para o executável compilado, de
man 2 chown
:Inverter a ordem
chown
echmod
funciona para mim:fonte
No seu primeiro caso, é o Bash que não gosta de ser executado como setuid.
Veja: Manual do Bash sobre arquivos de inicialização , também o Setuid bit parece não ter efeito no bash .
No segundo caso, é a ordem de
chmod
echown
isso importa, como muru já respondeu . Alterar o proprietário redefine o bit setuid.fonte
Também pode ser que o sistema de arquivos que contém o executável de teste tenha sido montado com a
nosuid
opção ; Ouvi dizer que distribuições mais recentes farão isso por padrão para/tmp
, e existem bons argumentos para aplicá-lo/home
também.nosuid
faz com que o kernel ignore os bits setuid e setgid em todos os executáveis no sistema de arquivos. (A coisa não relacionada que acontece quando você cria um diretório setgid não é afetada.)fonte