Mehrere * NIX-Konten mit identischer UID


14

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.

Antworten:


8

Meine Meinung:

Ist diese Fähigkeit so konzipiert oder funktioniert sie nur so?

Es ist so konzipiert. Seitdem ich * NIX verwende, können Sie Benutzer allgemeinen Gruppen zuordnen. Die Möglichkeit, dass die UID ohne Probleme identisch ist, ist nur ein beabsichtigtes Ergebnis, das, wie alles, Probleme mit sich bringen kann, wenn es falsch verwaltet wird.

Wird dies für alle * nix-Varianten gleich sein?

Ich glaube schon

Ist das akzeptierte Praxis?

Akzeptiert wie im Allgemeinen auf die eine oder andere Weise verwendet, ja.

Gibt es unbeabsichtigte Konsequenzen für diese Praxis?

Abgesehen von der Login-Prüfung haben Sie nichts anderes. Es sei denn, Sie wollten genau das, um damit zu beginnen.


Beachten Sie, dass dies nicht dazu führt, dass Benutzer derselben Gruppe zugeordnet werden. Es werden ihnen identische Gruppen-IDs zugewiesen. Es würde also eine Gruppe a1 mit GID 5000 und eine Gruppe a2 mit GID 5000 geben. Das kritischere Konzept hier sind jedoch die identischen UIDs, da Sie die Gruppenbehandlung so erhalten könnten, wie Sie es vorschlagen.
Tim

1
Der Name, der * NIX-Gruppen gegeben wird, ist irrelevant. Auf die GID kommt es an. Indem Sie mehr als einer Gruppe dieselbe GID geben, erreichen Sie wenig. Warum nicht den gleichen Gruppennamen / die gleiche GID für so viele Benutzer verwenden, wie Sie möchten? Die UID ist etwas anders, da der Anzeigename protokolliert wird.

Ich hätte mich wahrscheinlich darauf beschränken sollen, nur die UID zu diskutieren, da dies der relevantere Punkt in der Frage ist.
Tim

Diese Antwort ist heute nicht gültig.
Astara

@Astara: Möchtest du etwas ausarbeiten?
User63623

7

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.


3
Es ist nicht nur traditionell, es ist die Standardeinstellung. Der Toor-Benutzer wird bei jeder einzelnen Installation erstellt, sodass der Toor-Account weiterhin verfügbar ist, wenn der Benutzer den Fehler behebt. Die meisten Leute haben jedoch nie ein Passwort für das Toor-Benutzerkonto festgelegt!
X-Istence

Diese Antwort ist falsch - damals und heute. Ich bin mir sicher, dass es nicht auf allen Unix-Varianten funktioniert hat und wird .
Astara

Inwiefern ist es falsch? Welche Varianten funktionieren nicht?
TomOnTime

Mit dateibasierten Namensdienstzuordnungen (/ etc / passwd, / etc / group) funktioniert dies auf jedem UNIX, den ich gesehen habe, konsistent. AIX oder HP-UX (ich vergesse welche) fügen automatisch eine zweite Gruppe mit dem Namen "group2" (und "group3" usw.) mit derselben GID hinzu, wenn die Anzahl der Mitglieder in dieser Gruppe erhöht wird, um die Zeile in der Datei länger als zu machen die maximale Zeilenlänge des Betriebssystems. Ich habe das auf dem anderen und auf SunOS und Linux manuell gemacht. Bis wir auf LDAP migriert sind. :)
dannysauer

1
@TomOnTime Es geht nicht so sehr darum, ob schlechte Praktiken verboten sind, sondern vielmehr darum, was vom Anbieter unterstützt und getestet wird. Ich kenne keinen Unix- oder Linux-Anbieter, der eine solche Verwendung unterstützen würde. Da es wahrscheinlich nicht getestet wird, sind die Konsequenzen ungetestet und unbekannt. Jedes Unternehmen, das Best Practices befolgt, befolgt die vom Anbieter unterstützten. Andernfalls kann es zu Rechtsstreitigkeiten kommen, falls später Probleme auftreten. Es fragt nach möglichen Problemen. Um eine solche Funktion zu verwenden, müssten alle erforderlichen Pfade vollständig getestet werden. Es wäre sehr teuer.
Astara

4

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.


4

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?


4

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).


3

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.


Das ist wahr. Die anfängliche Anmeldung würde als a1 oder a2 in / var / log / secure registriert, aber nachfolgende Aktivitäten werden als a1 protokolliert, unabhängig davon, wie Sie sich anmelden.
Tim

3

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.


Das Teilen von Gruppen-IDs ist meiner Meinung nach weniger verbreitet, da mehrere Benutzer zu einer einzelnen Gruppe gehören. Es gibt einen subtilen Unterschied. Der Schlüssel liegt wirklich im UID-Handling. Guter Punkt zum Löschen, den ich testen werde.
Tim

2

Ü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)

Sie müssen zufällige UID- und GID-Werte generieren und gleichzeitig sicherstellen, dass Replikate niemals denselben UID- oder GID-Wert generieren. Die Notwendigkeit für eindeutige UID- und GID-Nummern kann sogar für mehrere IdM-Domänen gelten, wenn eine einzelne Organisation mehrere unterschiedliche Domänen hat.

In ähnlicher Weise können sich Dienstprogramme, die den Zugriff auf das System ermöglichen, unvorhersehbar verhalten (dieselbe Referenz):

Wenn zwei Einträgen dieselbe ID-Nummer zugewiesen wurde, wird bei der Suche nach dieser Nummer nur der erste Eintrag zurückgegeben.

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.


1

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.


0

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 oninitfehl und es wurde eine Fehlermeldung angezeigt "Must be a DBSA to run this program".

Folgendes haben wir bei der Fehlerbehebung festgestellt:

  1. Das Ausführen von id rootoder getent 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.

  2. 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.

  3. Ohne winbind id rootund getent passwd 0würde konsistent "root" als Benutzername zurückgeben.

Der Fix bestand darin, das Caching und die Persistenz zu deaktivieren in /etc/nscd.conf:

enable-cache    passwd      no
persistent      passwd      no

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.


Ich habe das Gefühl, dass dies funktioniert und nicht einmal "verpönt" wurde, als UIDs 16-Bit-Nummern waren und nur als eine Möglichkeit zum Anmelden an einem Computer verwendet wurden. In ähnlicher Weise habe ich das Gefühl, dass sich dies mit der Einführung von UUIDs und GUIDs mit 128 Bit / Nummer ändert, die speziell für diese Größe erstellt wurden, um es sehr unwahrscheinlich zu machen, dass zwei verschiedene Benutzer dieselbe ID erhalten. Dies war für die Nachverfolgung, Abrechnung + Lizenzierung. Mit zunehmender Kontrolle der Technologie durch Regierungen sind die Anforderungen an eindeutige IDs gestiegen. Es ist notwendig, um die Anonymität aufzuheben. Nein, ich bin wirklich nicht paranoid! ; ^ /
Astara
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.