Warum kann ich nicht erstellen, raw-socket in Ubuntu?
Ich bin, zu lernen, wie die Arbeit mit raw-sockets in Linux. Ich bin versucht, einen socket zu erstellen wie hier:
if ((sd = socket(AF_INET, SOCK_RAW, IPPROTO_ICMP)) < 0) {
perror("socket() failed");
exit(-1);
}
Aber alles, was ich bekam nach dem Start ist:
socket() failed: Operation not permitted
Ich weiß, dass nur root kann raw-sockets erstellen, aber wenn ich es mit SUID-bit-oder sudo - der
problem ist das gleiche. Was ist falsch? Das system ist Ubuntu 11.04.
Vielleicht bin ich unnötig einschließlich Header?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/ip.h>
#include <netinet/ip_icmp.h>
#include <netdb.h>
#include <sys/time.h>
#include <signal.h>
#include <unistd.h>
Und ich Frage mich - warum SUID nutzlos ist?
interessant; versucht werden, die wirklich root? (und überprüft Berechtigungen werden nicht gelöscht, bevor Sie ausgeführt?)
Nein, ich habe gerade call setuid(getuid()); direkt nach dem socket-Erstellung, aber es schadet auch nicht, erreichen, dass.
wenn Sie es tun: sudo bash (oder sudo-was auch immer-shell-you-use) und Sie dann führen Sie das Programm aus...? funktioniert es?
Hmm, ja, es funktioniert auf diese Weise. Aber warum suid nutzlos ist?
Haben Sie versucht, zu tun, seteuid -- das setuid-bit für das Programm nicht festgelegt, die effektive uid und ggf. eingestellt werden müssen, um programmgesteuert.
Nein, ich habe gerade call setuid(getuid()); direkt nach dem socket-Erstellung, aber es schadet auch nicht, erreichen, dass.
wenn Sie es tun: sudo bash (oder sudo-was auch immer-shell-you-use) und Sie dann führen Sie das Programm aus...? funktioniert es?
Hmm, ja, es funktioniert auf diese Weise. Aber warum suid nutzlos ist?
Haben Sie versucht, zu tun, seteuid -- das setuid-bit für das Programm nicht festgelegt, die effektive uid und ggf. eingestellt werden müssen, um programmgesteuert.
InformationsquelleAutor Enchantner | 2011-07-26
Du musst angemeldet sein, um einen Kommentar abzugeben.
Mein Geld auf Sie nicht läuft Ihr code korrekt ist.
Habe ich kopiert und eingefügt, Ihren genauen code in eine leere
main()
. Ich bekomme den gleichen Fehler wenn ich es starten als mir, aber es läuft korrekt untersudo
. Dies ist auf Ubuntu.Code:
Führen wie mich:
Als root ausführen:
was sudoers tun können, für real ist konfigurierbar; ist es möglich, ubuntu 11 Standard für sudoers ist nicht zu geben, einen echten root-powered user?
Gerettet hat mich ein gutes Stück der Zeit. Sehr geschätzt NPE.
InformationsquelleAutor NPE
laut Mann: Nur Prozesse mit einer effektiven Benutzer-ID 0 oder den capability CAP_NET_RAW erlaubt sind zu öffnen, raw-sockets
So könnten Sie führen Sie die Anwendung mit sudo wie unten vorgeschlagen oder festgelegt capability CAP_NET_RAW (eigentlich müssen Sie CAP_NET_ADMIN):
Details gefunden werden konnte, bei http://ftp.kernel.org/pub/linux/libs/security/linux-privs/kernel-2.4/capfaq-0.2.txt
InformationsquelleAutor tvn
Header nicht beeinflussen, es in sowieso.
Selbst wenn Sie werden das hinzufügen einiger mehr benötigte Dateien, es wird keinen Einfluss auf die Arbeit des Programms.
InformationsquelleAutor Manoj Rana