Ich weiß, dass das Aktivieren von setuid für Skripte Sicherheitsprobleme hat und daher standardmäßig inaktiv ist, aber ich erwarte, dass es für ausführbare Dateien funktioniert. Ich habe eine ausführbare Datei erstellt, die uid als Ausgabe anzeigt. Befolgen Sie dazu die in diesem Beitrag beschriebenen Anweisungen: Erlauben Sie setuid für Shell-Skripte
Es wird jedoch vor und nach dem Ausführen dieselbe UID (1000) zurückgegeben sudo chmod +s ./setuid-test
. Ich denke, dies bedeutet, dass setuid keine Auswirkungen auf meine ausführbare Datei hat. Warum und wie lösen?
Der Quellcode:
#include <stdio.h>
#include <unistd.h>
int main(int argc, char** argv) {
printf("%d", geteuid());
return 0;
}
Gebaut und betrieben mit
$ gcc -o setuid-test setuid-test.c
$ ./setuid-test
1000
$ sudo chown nobody ./setuid-test; sudo chmod +s ./setuid-test
$ ./setuid-test
1000
Beim Laufen ls -la
bekomme ich Folgendes:
me@me:~$ ls -la setuid-test
-rwsrwsr-x 1 nobody me 8572 Aug 19 16:39 setuid-test
permissions
executable
setuid
PHP-Lernender
quelle
quelle
me@me:~$ ls -la setuid-test
---- kehrt zurück -----rwsrwsr-x 1 nobody me 8572 Aug 19 16:39 setuid-test
df .
das Verzeichnis ein, um den Einhängepunkt zu findenmount | grep nameofmountpoint
. Ist dort einenosuid
Flagge aufgeführt?Antworten:
Die meisten für Unix / Linux entwickelten Dateisysteme können mit einem
nosuid
Attribut bereitgestellt werden, das verhindert, dass Setuid- oder Setgid-Binärdateien auf diesen Dateisystemen die effektive UID oder GID eines Prozesses ändern. Es wird häufig verwendet, wenn "nicht vertrauenswürdige" Dateisysteme bereitgestellt werden, die von einem Nicht-Administrator gesteuert werden.In Ihrem Fall ist das von Ihnen verwendete Dateisystem der Typ ecryptfs, der laut askubuntu: Fehler beim Ausführen von Binärdateien mit root setuid im verschlüsselten Ausgangsverzeichnis nosuid (und nodev) automatisch erzwingt, beginnend mit den Versionen von vor einigen Jahren.
Hier finden Sie eine Beschreibung des Grundes für die Änderung unter https://bugzilla.redhat.com/show_bug.cgi?id=CVE-2012-3409 :
quelle
chown root
,chmod +s
3) Mounten Sie sie 4) Führen Sie eine ausführbare Datei ausSetUID Bit auf ausführbare ermöglicht bei Datei ausführbar ausführen Besitzer (nicht Superuser). Führen Sie Folgendes aus, um die ausführbare Datei als root ausführen zu können:
quelle
setuid-test
solltenobody
die UID angezeigt werden .nobody
wirdroot
nobody
, daher erwarte ich eine65534
Gegenleistung, aber ich sehe,1000
wer auch immer der Eigentümer ist!nosuid
, kann Ihr Programm möglicherweise nicht funktionieren.mount | grep /home/me
kehrt zurück/home/me/.Private on /home/me type ecryptfs (ecryptfs_check_dev_ruid,ecryptfs_cipher=xxx,ecryptfs_key_bytes=16,ecryptfs_unlink_sigs,ecryptfs_sig=0123456789abcdef,ecryptfs_fnek_sig=fedcba9876543210)