Das SetUID-Bit funktioniert in Ubuntu nicht?

Das SetUID-Bit funktioniert in Ubuntu nicht?

Ich nehme an, dass eine ausführbare Datei mit gesetztem SetUID-Bit als ihr Besitzer ausgeführt werden sollte, aber ich kann das nicht wirklich reproduzieren. Ich habe Folgendes versucht.

$ Katze vorbereiten.sh
cp /bin/bash .
chown root.root bash
chmod 4770 bash # Verifiziert
$ sudo sh vorbereiten.sh
$ ./bash
$ Ich würde -u
1000
$ beenden
$
$ Katze test.c
#include<stdio.h>
#include<unistd.h>
int main(){
    printf("%d,%d\n", getuid(), geteuid());
    gebe 0 zurück;
}
$ gcc -o test test.c
$ chmod 4770 test # Verifiziert
$ sudo chown root.root-Test
$ ./Prüfung
1000,1000
$ # Warum???

Jedoch

$ su
# ./bash
# Ich würde -u
0
# ./prüfen
0,0
# Ausfahrt
# Ausfahrt
$

Hinweis: Für den Einhängepunkt ist kein nosuid„NOR“ noexecfestgelegt.
Kann jemand erklären, warum es unter Ubuntu 16.04 LTS nicht funktioniert?

Antwort1

Für die kompilierte ausführbare Datei vonman 2 chown:

When the owner or group  of  an  executable  file  are  changed  by  an
unprivileged user the S_ISUID and S_ISGID mode bits are cleared.  POSIX
does not specify whether this also should happen  when  root  does  the
chown();  the Linux behavior depends on the kernel version.

Bei mir funktioniert es, wenn ich die Reihenfolge chownund umkehre:chmod

$ sudo chmod 4770 foo
$ sudo chown root:root foo
$ stat foo
  File: 'foo'
  Size: 8712        Blocks: 24         IO Block: 4096   regular file
Device: 801h/2049d  Inode: 967977      Links: 1
Access: (0770/-rwxrwx---)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2017-04-18 15:15:15.074425000 +0900
Modify: 2017-04-18 15:15:15.074425000 +0900
Change: 2017-04-18 15:15:33.683725000 +0900
 Birth: -
$ sudo chmod 4777 foo
$ ./foo
1000,0

Antwort2

In Ihrem ersten Fall ist es Bash, das nicht gerne als Setuid ausgeführt wird.

Wenn Bash mit einer effektiven Benutzer- (Gruppen-)ID gestartet wird, die ungleich der tatsächlichen Benutzer- (Gruppen-)ID ist, ..., und die effektive Benutzer-ID auf die tatsächliche Benutzer-ID gesetzt wird.

Sehen:Bash-Handbuch zu Startdateien, AuchDas Setuid-Bit scheint keine Auswirkung auf Bash zu haben.

Im zweiten Fall ist es die Reihenfolge chmod, chowndie zählt, wie Muru bereitsantwortete. Durch das Ändern des Besitzers wird das Setuid-Bit zurückgesetzt.

Antwort3

Es könnte auch sein, dass das Dateisystem, das die Test-Programmdatei enthält, mit demnosuidMöglichkeit; Ich habe gehört, dass neuere Distributionen dies standardmäßig für tun /tmp, und es gibt gute Argumente dafür, es /homeauch auf anzuwenden. nosuidbewirkt, dass der Kernel die Setuid- und Setgid-Bits auf ignoriertalleausführbare Dateien im Dateisystem. (Das andere, was passiert, wenn Sie eineVerzeichnissetgid ist davon nicht betroffen.)

verwandte Informationen