Gibt es eine Möglichkeit, das Schreiben von 'sudo' für jede Kleinigkeit in Linux zu unterbinden?


59

Ich werde in Kürze eine Menge PHP-Arbeit erledigen und ich bin daran interessiert, RoR zu lernen, also habe ich Linux Mint 12 in meiner VirtualBox installiert.

Der bisher frustrierendste Aspekt des Switches war der Umgang mit Linux-Berechtigungen. Es scheint, als ob ich nichts Nützliches tun kann (z. B. den Symfony2-Tarball aus meinem Downloads-Verzeichnis in mein Dokumenten-Stammverzeichnis kopieren und extrahieren), ohne mich über sudo als Stammverzeichnis auszugeben.

Gibt es eine einfache Möglichkeit, Linux anzuweisen, mir uneingeschränkten Zugriff auf bestimmte Verzeichnisse zu gewähren, ohne einfach alle Berechtigungen zu öffnen?


1
Viele Distributionen haben eine Gruppe, die befugt ist, die Konfiguration für verschiedene Systemdienstprogramme zu bearbeiten. Versetz dich in diese Gruppe und öffne eine neue Shell.
dmckee

Wäre es besser, das Stammverzeichnis des Dokuments stattdessen auf etwas in meinem Basisverzeichnis zu verweisen?

3
Das 'sudo' ist einer dieser lächerlichen Befehle, die von neuen Linux-Benutzern zu häufig benutzt und missbraucht werden. Oft sehe ich Tutorials im Web, in denen 15 Befehle hintereinander sudo verwenden? In normalen Situationen sollten Sie keine speziellen Berechtigungen benötigen, während Sie als normaler Benutzer angemeldet sind (empfohlen). Ich war in einer Firma, in der alles, was sie taten, sudo benutzte. Als ich versuchte, es zu verbieten (aus Sicherheitsgründen), beschwerten sie sich. Nachdem ich die kryptische sudo-Konfigurationsdatei untersucht hatte, entdeckte ich (wie immer) einen Fehler, der es mir ermöglichte, das System von diesem regulären Benutzer aus zu "rooten". Sudo ist extrem gefährlich !!
8.

Antworten:


77

Mir fallen zwei Möglichkeiten ein:

  1. Besitzen Sie das gewünschte Verzeichnis mit chown:

    sudo chown your_username directory 
    

    (Ersetzen Sie Ihren Benutzernamen durch Ihren Benutzernamen und das Verzeichnis durch das gewünschte Verzeichnis.)

  2. Das andere , was Sie tun können , ist die Arbeit als root, solange Sie wissen , was Sie tun . So verwenden Sie root:

    sudo -s
    

    und dann können Sie alles tun, ohne sudovor jedem Befehl etwas eingeben zu müssen .


"Das andere, was Sie tun können, ist, als root zu arbeiten, solange Sie wissen, was Sie tun. Mit root do ..." - Nun, das macht die Best Practice zunichte, die die Distributionen und die Sicherheitsgemeinschaft versucht haben, den Benutzern beizubringen. Verwandte: "Was ist das Prinzip des geringsten Privilegs" .

16

Arbeiten Sie im Allgemeinen immer als Ihr eigener Benutzer, es sei denn, Sie tun etwas, das sich auf das gesamte System auswirkt.

Wenn sich auf Ihrem Webserver Dateien befinden, die Sie speichern möchten, arbeiten Sie als eigener Benutzer und sudolegen Sie die Dateien dann im Web-Serving-Bereich Ihres Dateisystems ab. In der Regel, das wäre durch ein Installationsskript ausgeführt werden, und Sie würden so etwas wie laufen sudo -u webmaster install-webserver-files, oder besser sudo -u webmaster git update(oder das Versionskontrollsystem Ihrer Wahl).

Wenn Sie auf einem Entwicklungsserver arbeiten und möchten, dass auf Ihre Dateien sofort zugegriffen werden kann, erstellen Sie ein Verzeichnis im Webserverbereich und machen Sie es zu Ihrem Eigentum oder zumindest zu einem beschreibbaren Verzeichnis. Nach dieser einmaligen Operation ( sudo chown …oder sudo -u webmaster setfacl …) benötigen Sie keine erhöhten Berechtigungen für die täglichen Operationen.

Es ist manchmal praktisch, mehreren Benutzern das Schreiben in ein Verzeichnis zu erlauben oder auf andere Weise unterschiedliche Berechtigungen für mehrere Benutzer außer dem Eigentümer oder für mehrere Gruppen zu haben. Zugriffskontrolllisten geben Ihnen diese Möglichkeit. Siehe Berechtigungsprobleme für freigegebene Verzeichnisse auf einem Server oder Berechtigungsprobleme für Sicherungsskripte .


3

Ja, melden Sie sich als root an, um die Zugriffssteuerung für Superuser zu gewährleisten.
Gleiches Konzept in Windows, können Sie sich mit Administrator an Ihrem Terminal anmelden.


Mir ist klar, dass Sie die Frage des ursprünglichen Posters direkt beantworten. Dies ist jedoch ein schlechter Rat, der die Abwärtsabstimmung erklärt.
Großzügige

So haben Sie es mit Windows in Verbindung gebracht.
LeWoody

3

Es war schon immer meine Ideologie, dass man als Benutzer unter Linux alles machen kann, was man will, und für alles andere gibt es immer etwas sudo. sudoErmöglicht das Ausführen weniger Dinge als einige andere Benutzer, meistens rootfür die Systemadministration. sudoEs war eine Ressource mit einem größeren Vorteil, einige meiner Routineaufgaben und -berechtigungen als (Root-) Benutzer an andere zu delegieren und dabei zu helfen, meine und andere Zeit besser zu verwalten, ohne die Berechtigungen über das erforderliche Maß hinaus zu erhöhen. Gleichzeitig ist es mein Vertrauen, dass ihre Einträge im Internet präsent bleibensudoersKonfigurationsdatei. Ich bin mir nicht sicher, ob es damit zusammenhängen könnte, aber ich kann sagen, dass sudo Ihnen eine bessere Sicherheitsperspektive bietet, wer alle und was sie mit ihren vertrauenswürdigen Berechtigungen tun können. Auch wenn etwas schief geht, sind sie dafür verantwortlich. (Ich kann mit den Log-Informationen der Sudoer immer ein bisschen hinterhältig sein, um auch die Schuldigen zu finden). Meine Kollegen haben mir immer ihre Sorge zum Ausdruck gebracht, dass sie sudo für alles eingeben müssen, was sie mit erhöhten Rechten in einer Linux-Umgebung tun wollten. Auch hier habe ich die gleiche Frage gefunden.

Um die Lösungen und meine Suche nach Alternativen zu sehen, bin ich auf Resource Based Access Controls gestoßen, RBAC aber in einem anderen Abenteuerland Solarismit Tools wie pfexecusw. Dieser Ansatz ist besser, da hierdurch die Rechte der Benutzer, die bereits erhöht sind, erhalten bleiben und sie vertrauen auf das Gewissen und die Wachsamkeit dessen, was Sysadmins mit ihren Privilegien machen möchten.

In Anbetracht der verfügbaren Lösungen von RBAC und seiner Implementierungen in der Linux-Welt bin ich auf gestoßen

SELinux http://www.ibm.com/developerworks/linux/library/l-rbac-selinux/

grsecurity http://de.wikipedia.org/wiki/Grsecurity

und während es einige andere Implementierungen gibt, würde ich sie in der obersten Reihenfolge der Liste betrachten. Die Implementierung von RBAC ist in einer Organisation sehr aufwändig, insbesondere wenn viele Benutzer vorhanden sind. RBAC wäre in homogenen Umgebungen eine bessere Lösung. Wenn sich jedoch heterogene Unix-Installationen im Netzwerk befinden und die Benutzerdatenbank häufig verwendet wird, schlägt dies möglicherweise fehl. Da SELinux unter Solaris nicht skalierbar / implementiert ist, sind RBAC / pfexec-Tools unter Linux nicht implementiert. Es gibt verschiedene Ansätze, um eine einzige Sache zu tun. Zum Beispiel: http://blogs.oracle.com/darren/entry/opensolaris_rbac_vs_sudo_howto

Netzwerkweit unterschiedliche Installationen unterstützen diesen Ansatz möglicherweise nicht (openrbac könnte jedoch als allgemeiner Implementierungsansatz angesehen werden), da sudoers ein Einzelhost-Ansatz ist oder keine zentralisierte Konfiguration im Netzwerk / in der Domäne ermöglicht./etc/sudoersmüssen bei jeder Änderung synchronisiert werden. Auch wenn für den Betrieb der sudoers-Datei eine Wissensdatenbank erforderlich ist, muss die Richtliniensprache der sudoers-Konfiguration verstanden werden, um Fehler zu vermeiden und Berechtigungen zu gewähren. Während die Sicherheitsprofile häufig verwendet werden, kann RBAC einen zentralisierten Ansatz bieten. Das Hinzufügen / Entfernen eines Benutzers aus der zugewiesenen Rolle kann an einem einzelnen Ort erfolgen (d. H. An dem die Benutzer- / Kennwort- / Gruppeninformationen gespeichert werden) die Domain wie LDAP, NIS oder AD). Dies würde auch implizit voraussetzen, dass Sie die Befehle verstehen, die für die Ausführung der RBAC-Datenbank erforderlich sind, z. B. smexec, smmultiuser, nur wenige.

Sudo bietet hier möglicherweise einen plattformübergreifenderen Ansatz, der auf allen Unix- / ähnlichen Plattformen funktioniert, die die setuid-Funktionen bieten. Beides sudound es RBACgelingt den Nicht-Root-Benutzern, einige Berechtigungen zu erteilen, die ohne die Angabe des rootKennworts selbst ausgeführt werden können. Sudo kann die Befehlszeilenargumente, die während der Ausführung der Befehle verwendet werden können, präziser und detaillierter behandeln und sich darauf beschränken, welche Befehle mit Argumenten mit erhöhten Rechten ausgeführt werden können. RBAC kann die Verwendung auf die installierten Befehle oder Binärdateien beschränken, hat jedoch keine Kontrolle über die Befehlszeilenargumente. Auditing ist viel besser und in die RBAC-Umgebung integriertsudoDies hängt von der Konfiguration und auch von den Sicherheitsbeschränkungen ab (zum Beispiel, dass die Shell nicht gewährt wird und insbesondere die Hosts sich problemlos bei den anderen Hosts anmelden dürfen). Dies sind nur einige der Unterschiede, die ich anführen könnte, und ich persönlich neige dazu, sudo als RBAC zu verwenden, obwohl ich mit den genannten Einschränkungen einige Umgehungsmöglichkeiten schaffen könnte. Solange RBAC nicht alle Probleme zum Vorteil von sudo angeht, glaube ich nicht, dass sudo verschwinden wird, denn es ist einfach.


1

Ich würde das Dokumentenstammverzeichnis angeben, in dem Sie arbeiten, damit Sie uneingeschränkten Zugriff darauf haben.

Um zu vermeiden, dass Sie bei jeder Installation eines Gems sudo eingeben müssen, lesen Sie den folgenden Artikel: http://forums.site5.com/showthread.php?t=11954

Ich empfehle außerdem dringend, RVM zu installieren, um Versionen von Ruby und Rails zu verwalten. http://beginrescueend.com/

Dies erleichtert Ihnen das Leben erheblich, wenn Sie den Host finden, auf dem Ihre App mit anderen Versionen als den von Ihnen entwickelten bereitgestellt werden soll.


Wusste über rvm Bescheid, aber danke für den Forum-Link.
Major Productions

0

Führen Sie den Befehl aus.

sudo su root

Sie können nun Befehle als Root-Benutzer ausführen. Achtung! Jeder ausgeführte Befehl wird als Root-Benutzer ausgeführt. Sie können die Dinge ernsthaft durcheinander bringen, wenn Sie nicht vorsichtig sind.

Oder Sie ändern die Berechtigungen des Verzeichnisses, damit Ihr Benutzer Dateien speichern und bearbeiten kann.


4
Warum nicht einfach sudo -s?
Sarnold

1
Oder sudo -iwie dies als Login-Shell simuliert. Möglicherweise liegt es näher an einem nativen lokalen Root-Login, als Bash oder eine andere Shell über sudo auszuführen.
Bastian Ebeling

1
warum nicht einfach su? Was ist diese Besessenheit mit Sudo? Du brauchst kein Sudo. Je.
Orion

2
afaik, es ist nicht möglich, nur zu verwenden, suwenn das root-Passwort unbekannt ist. Durch das Hinzufügen eines Benutzers zu den Sudoern und das Ausführen von Sudoern sudo sukann der Benutzer sein vorhandenes und bekanntes Benutzerkennwort zum Eskalieren verwenden
Luke,

0

Bearbeiten Sie die Datei / etc / passwd und erteilen Sie dem Benutzer "yourUserName" Root-Berechtigungen, indem Sie die Benutzer- und Gruppen-IDs in UID 0 und GID 0 ändern:

yourUserName: 0: 0 :: / home / yourUserName: / bin / sh


2
Empfehlen Sie keine Sicherheits-Albträume! Dies ist die übelste Übung.
Gegenmodus

Ich verwende diese Lösung für mein Himbeer-Pi, in dem ich keine anderen Benutzerkonten habe und das mit meinem Heimnetzwerk verbunden ist
Ufuk özkanlı

0

Wie in anderen Antworten bereits erwähnt, besteht die sauberste Lösung darin, den Besitz der Dateien und Verzeichnisse zu ändern, auf die Sie zugreifen müssen. Sie können alternativ eine neue dedizierte Gruppe erstellen, den Gruppeneigentum der Dateien und Verzeichnisse in diese Gruppe ändern und die Gruppenschreibberechtigung für diese Dateien und Verzeichnisse festlegen. Setzen Sie abschließend das SGID-Bit in den Verzeichnissen so, dass beim Erstellen einer neuen Datei der Gruppeneigentum des enthaltenen Verzeichnisses (dh der dedizierten Gruppe) übernommen wird.


-1

Benutzer @ Server: ~ $ sudo passwd root
[sudo] Passwort für Benutzer:
Geben Sie das neue UNIX-Passwort ein:
Geben Sie das neue UNIX-Passwort erneut ein:
passwd: Passwort erfolgreich aktualisiert
Benutzer @ Server: ~ $ su
Passwort:
root @ Server: / home / user #

Ist diese "#" Eingabeaufforderung nicht von Schönheit?

Ich benutze "sudo" nur einmal, um die Fähigkeit zu erreichen

user @ server: ~ $ su
Passwort:
root @ server: / home / user #

für das Leben des Servers.

Um es wieder sicher zu machen,

root @ server: / home / user #
exit
Benutzer @ Server beenden: ~ $

Sysadmins tun dies seit Jahren, als "sudo" nicht Teil des Mollycoddling-Trends war.

Wenn Sie dies tun, liegt es in Ihrer Verantwortung, darauf zu achten, nicht auf meine.

Ian


Was für eine Geige. Versuchen Sie es sudo -s. Arbeit erledigt
roaima
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.