
Ich habe ein eingebettetes Linux, das auf einer imx6-Plattform läuft. Dies ist ein eingebettetes Freescale-Linux. Das Problem ist, dass für dieses Linux kein sudo verfügbar ist, ich aber das wlan0-Gerät durch einen Benutzer aktivieren und deaktivieren muss. Ich habe versucht, den Benutzer zur Gruppe root hinzuzufügen, aber ohne Erfolg. Ich habe auch versucht, den gesamten Befehl zur Datei /etc/busybox.conf hinzuzufügen, aber auch das hatte keine Wirkung.
Wie kann ich diesen Befehl als Benutzer ausführen, ohne über sudo zu verfügen?
user@touch:~$ /sbin/ifconfig eth0 down
SIOCSIFFLAGS: Permission denied
Antwort1
Wenn dies jedem Nicht-Root-Benutzer zugetraut wird, können Sie einfach ein Setuid-Flag zur ifconfig-Ausführung hinzufügen:
chmod 4755 /sbin/ifconfig
Es erteilt jedem Root-Rechte für die Ausführung dieser ausführbaren Datei. Natürlich benötigen Sie Root-Zugriff, um chmod auszuführen.
Antwort2
Sie müssen sudo
den Befehl nicht ausführen ifconfig
, stellen Sie nur sicher, dass /sbin
sich in Ihrem PATH befindet.
Führen Sie als nicht privilegierter Benutzer Folgendes aus:
export PATH=$PATH:/sbin
ifconfig
Antwort3
Für neue Linux-Benutzer: Das Paket
sudo
gibt einem nicht privilegierten Benutzer eine voreingestellte Anzahl von Minuten, um Dinge am System zu tun, die nur der Systemadministrator („root“ == „uid=0“) tun kann.Das Programm
ifconfig
ist mit vielen Sicherheitsproblemen für Linux-Betriebssysteme verbunden, die sich auf öffentlichen Servern befinden. Für Desktop- und Heimserver mit KVM-Verbindungen, die keinen SSH-Zugriff benötigen und keine 24/7-Internetverbindung benötigen, hat dieses Programm geringere Sicherheitsanforderungen.ifconfig
wird durch ein anderes Programm namens geschütztnetdevice
. Dieses Programm bietet Low-Level-Zugriff auf Linux-Netzwerkgeräte. Sieheman netdevice
. Der Fehler, der ausgelöst wurdeSIOCSIFFLAGS: Berechtigung verweigertliegt daran, dass das Programmifconfig
als privilegiert markiert ist und eine effektive Benutzerkennung von 0 ('root' <==> 'uid=0') oder dieCAP_NET_ADMIN
Berechtigung erfordert. Wenn dies nicht der Fall ist,EPERM
wird zurückgegeben.Um herauszufinden, was
CAP_NET_ADMIN
es ist, müssen wir lesencapabilities(7) — Linux-Handbuchseite. Die wichtige Information hier ist „CAP_NET_ADMIN: Führt verschiedene netzwerkbezogene Operationen wie Schnittstellenkonfiguration aus“. Um herauszufinden, was dasEPERM
ist, müssen wir lesenman setuid
. DerEPERM
Fehler wird ausgelöst, wenn der Benutzer nicht privilegiert ist (Linux: hat dieCAP_SETUID
Berechtigung nicht) UND die UID nicht mit der echten UID oder der gespeicherten Set-User-ID des aufrufenden Prozesses übereinstimmt.Es ist nicht möglich, Ihren „Benutzernamen“ einfach zur Gruppe „root“ hinzuzufügen. Beispiel für Ubuntu-Distributionen:
sudo adduser username root
gibt Ihnen nicht die erforderliche UID 0, um allenetdevice
erforderlichen Sicherheitsprüfungen zu bestehen. Wennvisudo
auf dem System verfügbar ist, können Sie sehen, dass der EintragDefaults secure_path=""
keinen Pfad zum Programm enthältnetdevice.h
. Daher ist es unwahrscheinlich, dass das Ändern der Sudo-Berechtigungen (mitvisudo
) für dasifconfig
Programm dazu führt, die von bereitgestellte Sicherheitskontrolle zu umgehennetdevice
.
Vorausgesetzt, Sie betreiben keinen öffentlichen Server, ist die Antwort von @tonioc die einfachste Möglichkeit, die Schnittstellen einer Linux-Distribution (wie Ubuntu, das nach einem Neustart automatisch alle Ethernet-Schnittstellen aktiviert) ohne Verwendung von sudo
Berechtigungen ein- und auszuschalten. Der sudo chmod 4755 /sbin/ifconfig
Befehl ist eine einfache Möglichkeit, Ihr System so zu ändern, dass ein Startskript wie ifconfig eth0 down
eine Schnittstelle ausschalten kann (ohne Eingabe eines Kennworts). Für Desktops/Server, an die sowohl Intranet- als auch Internet-Netzwerke angeschlossen sind (Multi-NIC), ist es aus Sicherheitsgründen wichtig, dass die Internet-Netzwerke ausgeschaltet bleiben, wenn sie nicht benötigt werden.