Ich nehme an, dass eine ausführbare Datei mit gesetztem SetUID-Bit als Eigentümer ausgeführt werden sollte, aber ich kann sie nicht wirklich reproduzieren. Ich habe folgendes versucht.
$ cat prepare.sh cp / bin / bash. chown root.root bash chmod 4770 bash # Verifiziert $ 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 ()); return 0; }} $ gcc -o test test.c $ chmod 4770 test # Verifiziert $ sudo chown root.root test $ ./test 1000,1000 $ # Warum ???
jedoch
$ su # ./bash # id -u 0 # ./Prüfung 0,0 # Ausfahrt # Ausfahrt $
Hinweis: Der Einhängepunkt ist weder festgelegt nosuid
noch noexec
festgelegt.
Kann jemand erklären, warum es unter Ubuntu 16.04 LTS nicht funktioniert?
sudo
? Es gibt einen Fehler oder einen Tippfehler, demchmod
jedoch ein Dateiname fehlt.Antworten:
Für die kompilierte ausführbare Datei von
man 2 chown
:Das Umkehren der
chown
undchmod
Reihenfolge funktioniert für mich:quelle
In Ihrem ersten Fall ist es Bash, der nicht gerne als Setuid ausgeführt wird.
Siehe: Bashs Handbuch zu Startdateien , auch das Setuid-Bit scheint keine Auswirkung auf Bash zu haben .
Im zweiten Fall ist es die Reihenfolge von
chmod
undchown
das ist wichtig, wie Muru bereits geantwortet hat . Durch Ändern des Besitzers wird das Setuid-Bit zurückgesetzt.quelle
Es kann auch sein, dass das Dateisystem, das die ausführbare Testdatei enthält, mit der
nosuid
Option bereitgestellt wurde. Ich habe gehört, dass neuere Distributionen dies standardmäßig für tun/tmp
, und es gibt gute Argumente, um es auch anzuwenden/home
.nosuid
Der Kernel ignoriert die Bits setuid und setgid für alle ausführbaren Dateien im Dateisystem. (Die nicht verwandte Sache, die passiert, wenn Sie eine Verzeichnis- Setgid erstellen, bleibt davon unberührt.)quelle