Ich bin gespannt, ob es ein Standardverhalten gibt, das erwartet wird, und ob es als schlechte Praxis angesehen wird, wenn unter Linux / Unix mehr als ein Konto mit derselben UID erstellt wird. Ich habe einige Tests mit RHEL5 durchgeführt und es hat sich so verhalten, wie ich es erwartet hatte, aber ich weiß nicht, ob ich das Schicksal mit diesem Trick in Versuchung führen kann.
Angenommen, ich habe zwei Konten mit denselben IDs:
a1:$1$4zIl1:5000:5000::/home/a1:/bin/bash
a2:$1$bmh92:5000:5000::/home/a2:/bin/bash
Was dies bedeutet ist:
- Ich kann mich bei jedem Konto mit einem eigenen Passwort anmelden.
- Dateien, die ich erstelle, haben dieselbe UID.
- Tools wie "ls -l" listen die UID als ersten Eintrag in der Datei auf (in diesem Fall a1).
- Ich vermeide Rechte- oder Besitzprobleme zwischen den beiden Konten, da sie wirklich derselbe Benutzer sind.
- Ich erhalte eine Anmeldeprüfung für jedes Konto, damit ich genauer nachverfolgen kann, was auf dem System geschieht.
Meine Fragen sind also:
- Ist diese Fähigkeit so konzipiert oder funktioniert sie nur so?
- Wird dies für alle * nix-Varianten gleich sein?
- Ist das akzeptierte Praxis?
- Gibt es unbeabsichtigte Konsequenzen für diese Praxis?
Beachten Sie, dass dies für Systemkonten und nicht für normale Benutzerkonten verwendet werden soll.
Wird es auf allen Unixen funktionieren? Ja.
Ist es eine gute Technik? Nein, es gibt andere Techniken, die besser sind. Zum Beispiel kann die richtige Verwendung von Unix-Gruppen und streng kontrollierten "sudo" -Konfigurationen das Gleiche bewirken.
Ich habe genau einen Ort gesehen, an dem dies ohne Probleme genutzt wurde. In FreeBSD ist es traditionell üblich, einen zweiten Root-Account mit dem Namen "toor" (Root rückwärts geschrieben) zu erstellen, der / bin / sh als Standardshell hat. Auf diese Weise können Sie sich immer noch anmelden, wenn die Shell von root kaputt geht.
quelle
Ich kann Ihre Fragen nicht kanonisch beantworten, aber anekdotisch macht mein Unternehmen dies seit Jahren mit dem Root-Benutzer und hatte noch nie Probleme damit. Wir erstellen einen 'kroot'-Benutzer (UID 0), dessen einziger Existenzgrund darin besteht, / bin / ksh als Shell anstelle von / bin / sh oder bin / bash zu haben. Ich weiß, dass unsere Oracle-Datenbankadministratoren mit ihren Benutzern etwas Ähnliches tun, mit 3 oder 4 Benutzernamen pro Installation, alle mit den gleichen Benutzer-IDs (ich glaube, dies wurde getan, um für jeden Benutzer separate Home-Verzeichnisse zu haben. Wir haben dies zumindest für getan Zehn Jahre auf Solaris und Linux. Ich denke, es funktioniert wie geplant.
Ich würde das nicht mit einem normalen Benutzerkonto machen. Wie Sie bereits bemerkt haben, wird nach der erstmaligen Anmeldung alles auf den Vornamen in der Protokolldatei zurückgesetzt. Ich denke also, dass die Aktionen eines Benutzers als die Aktionen eines anderen Benutzers in Protokollen maskiert werden könnten. Für Systemkonten funktioniert es jedoch hervorragend.
quelle
Ist diese Fähigkeit so konzipiert oder funktioniert sie nur so?
So konzipiert.
Wird dies für alle * nix-Varianten gleich sein?
Es sollte ja.
Ist das akzeptierte Praxis?
Kommt darauf an, was du meinst. Diese Art von Dingen beantwortet ein äußerst spezifisches Problem (siehe root / toor-Konten). Überall sonst und du fragst nach einem dummen Problem in der Zukunft. Wenn Sie nicht sicher sind, ob dies die richtige Lösung ist, ist dies wahrscheinlich nicht der Fall.
Gibt es unbeabsichtigte Konsequenzen für diese Praxis?
Es ist allgemein üblich, Benutzernamen und UIDs als austauschbar zu behandeln. Wie einige andere angemerkt haben, sind Anmelde- / Aktivitätsprüfungen ungenau. Sie sollten auch das Verhalten relevanter benutzerbezogener Skripte / Programme überprüfen (useradd Ihrer Distribution, usermod, userdel-Skripte, regelmäßige Wartungsskripte usw.).
Was möchten Sie damit erreichen, das nicht erreicht werden kann, indem Sie diese beiden Benutzer einer neuen Gruppe hinzufügen und dieser Gruppe die erforderlichen Berechtigungen erteilen?
quelle
Gibt es unbeabsichtigte Konsequenzen für diese Praxis?
Es gibt ein Problem, das mir bekannt ist. Cron spielt mit diesem UID-Aliasing nicht gut. Versuchen Sie, "crontab -i" in einem Python-Skript auszuführen, um cron-Einträge zu aktualisieren. Führen Sie dann "crontab -e" in der Shell aus, um diese zu ändern.
Beachten Sie, dass cron (vixie, glaube ich) jetzt die gleichen Einträge für a1 und a2 aktualisiert hat (in / var / spool / cron / a1 und / var / spool / cron / a2).
quelle
Dies ist das erwartete Verhalten bei allen Distributionen, die ich gesehen habe, und ein allgemeiner Trick, den 'der Feind' verwendet, um Konten mit Root-Zugriff zu verbergen.
Es ist sicherlich kein Standard (ich habe dies nirgendwo im Spiel gesehen), aber es sollte keinen Grund geben, warum Sie dies nicht in Ihrer eigenen Umgebung verwenden können, wenn Sie es für richtig halten.
Das Einzige, woran ich mich derzeit erinnere, ist, dass das Auditing dadurch möglicherweise erschwert wird. Wenn Sie zwei Benutzer mit derselben UID / GID haben, fällt es Ihnen meiner Meinung nach schwer, herauszufinden, welcher Benutzer was getan hat, wenn Sie Protokolle analysieren.
quelle
Das Teilen von primären Gruppen-IDs ist weit verbreitet, daher dreht sich die Frage wirklich um die UID .
Ich habe dies zuvor getan, um jemandem root-Zugriff zu gewähren, ohne das root-Passwort preisgeben zu müssen - was gut funktioniert hat. (obwohl sudo eine bessere Wahl gewesen wäre, denke ich)
Die Hauptsache, bei der ich vorsichtig sein möchte, ist das Löschen eines Benutzers - das Programm kann verwirrt werden und beide Benutzer oder Dateien, die zu beiden gehören, oder ähnliche Dinge löschen.
In der Tat denke ich, dass Programmierer wahrscheinlich eine 1: 1-Beziehung zwischen Benutzer und UID annehmen , so dass es sehr wohl unerwartete Konsequenzen mit anderen Programmen geben kann, ähnlich denjenigen, die ich für userdel beschrieben habe.
quelle
Übrigens - diese Frage / Antwort wurde für die heutigen Betriebssysteme aktualisiert.
Zitat aus redhat: Verwaltung eindeutiger Zuweisungen von UID- und GID-Nummern. Beschreibt die Verwendung von UIDs und GIDs sowie deren Verwaltung und wie Generatoren (ID-Server)
In ähnlicher Weise können sich Dienstprogramme, die den Zugriff auf das System ermöglichen, unvorhersehbar verhalten (dieselbe Referenz):
Das Problem entsteht, wenn der Begriff "zuerst" schlecht definiert ist. Abhängig vom installierten Dienst werden Benutzernamen möglicherweise in einem Hash mit variabler Größe gespeichert, der aufgrund inkonsistenter Faktoren einen anderen Benutzernamen zurückgibt. (Ich weiß, dass dies zutrifft, da ich manchmal versucht habe, 2 Benutzernamen mit einer ID zu verwenden, wobei einer ein lokaler Benutzername und der andere ein domain.username ist, den ich der UID zuordnen wollte (an die ich mich schließlich gewandt habe) eine ganz andere Art), aber ich könnte mich mit "usera" einloggen, ein "who" oder "id" machen und "userb" ODER "usera" sehen - zufällig.
Es gibt eine Schnittstelle zum Abrufen mehrerer Werte von UIDs aus einer Gruppe (Gruppen mit einer einzelnen GID können mehreren UIDs zugeordnet werden). Es gibt jedoch keine tragbare Schnittstelle, über die eine Liste von Namen für eine UID zurückgegeben werden kann oder ein ähnliches Verhalten zwischen Systemen oder sogar Anwendungen auf demselben System kann unglücklicherweise überrascht sein.
In the Sun (now oracle) yp (Gelbe Seiten) oder NIS (NetworkInformationServices) gibt es auch viele Verweise auf Anforderungen an die Eindeutigkeit. Spezielle Funktionen und Server sind so eingerichtet, dass eindeutige IDs mehreren Servern und Domänen zugewiesen werden (Beispiel: Hilfeseite für uid_allocd-, gid_allocd - UID- und GID-Zuweisungsdämonen)
Eine dritte mögliche Quelle ist die Serverdokumentation von Microsoft für die Zuordnung von NFS-Konten. NFS ist ein Unix-Dateifreigabeprotokoll und beschreibt, wie Dateiberechtigungen und -zugriff von der ID verwaltet werden. Dort schreiben sie:
UID. Dies ist eine vorzeichenlose Ganzzahl, die von UNIX-Betriebssystemen zur Identifizierung von Benutzern verwendet wird und in der passwd-Datei eindeutig sein muss.
GID. Dies ist eine vom UNIX-Kernel zur Identifizierung von Gruppen verwendete Ganzzahl ohne Vorzeichen, die in der Gruppendatei eindeutig sein muss. MS-NFS-Verwaltungsseite
Während einige Betriebssysteme möglicherweise mehrere Namen / UIDs (BSD-Derivate) zugelassen haben, hängen die meisten Betriebssysteme davon ab, dass diese eindeutig sind, und verhalten sich möglicherweise unvorhersehbar, wenn dies nicht der Fall ist.
Hinweis - Ich füge diese Seite hinzu, da jemand auf diesen datierten Eintrag als Unterstützung für moderne Hilfsprogramme Bezug nimmt, um nicht eindeutige UID / GIDs unterzubringen ... was die meisten nicht tun.
quelle
Ich weiß auch nicht, ob es eine gute Idee ist oder nicht, aber ich verwende das obige Verhalten an einigen Stellen. In den meisten Fällen werden Konten für den Zugriff auf den FTP / SFTP-Server und die Aktualisierung des Website-Inhalts verwendet. Es schien nichts zu beschädigen und den Umgang mit Berechtigungen einfacher zu machen, als dies bei mehreren Konten der Fall gewesen wäre.
quelle
Ich bin gerade auf ein (ziemlich undurchsichtiges) Problem gestoßen, das auf die Verwendung mehrerer Konten mit derselben UID zurückzuführen ist, und dachte, ich würde es als Beispiel dafür anführen, warum dies keine gute Praxis ist.
In meinem Fall hat ein Anbieter einen Informix-Datenbankserver und einen Webanwendungsserver auf RHEL 7 eingerichtet. Während des Setups wurden mehrere "Root" -Konten mit der UID 0 erstellt (fragen Sie mich nicht, warum). Dh "root", "user1" und "user2", alle mit UID 0.
Der RHEL 7-Server wurde später mithilfe von winbind einer Active Directory-Domäne hinzugefügt. Zu diesem Zeitpunkt konnte der Informix-DB-Server nicht mehr gestartet werden. Die Ausführung schlug
oninit
fehl und es wurde eine Fehlermeldung angezeigt"Must be a DBSA to run this program"
.Folgendes haben wir bei der Fehlerbehebung festgestellt:
Das Ausführen von
id root
odergetent passwd 0
(um die UID 0 in einen Benutzernamen aufzulösen) auf einem Active Directory-verbundenen System gibt nach dem Zufallsprinzip entweder "Benutzer1" oder "Benutzer2" anstelle von "Root" zurück.Informix verließ sich anscheinend auf einen Zeichenfolgenvergleich, um zu überprüfen, ob der textuelle Benutzername des Benutzers, der es gestartet hat, "root" war und andernfalls fehlschlagen würde.
Ohne winbind
id root
undgetent passwd 0
würde konsistent "root" als Benutzername zurückgeben.Der Fix bestand darin, das Caching und die Persistenz zu deaktivieren in
/etc/nscd.conf
:Nach dieser Änderung wurde die UID 0 wieder konsistent in "root" aufgelöst und Informix konnte gestartet werden.
Hoffe, das wird jemandem nützlich sein.
quelle