wie kann ein Script Rechner unterscheiden?

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
cosmac
Beiträge: 4576
Registriert: 28.03.2005 22:24:30

wie kann ein Script Rechner unterscheiden?

Beitrag von cosmac » 16.05.2013 19:13:18

liebe Ratgeber!

wenn man ein paar ähnliche Rechner hat, möchte man überall möglichst identische Dateien. Seit man keine xorg.conf mehr braucht fehlt ja nicht mehr viel. Die restlichen Unterschiede möchte ich per Script regeln (evt. reichen dazu /etc/rc.local und /home/*/.bashrc). Jetzt muss das Script wissen, auf welchem Rechner es läuft, aber wie?
  • /etc/hostname muss vom Script selbst gefüllt werden; oder man bekommt per DHCP irgendeinen hostname und das auch noch zu spät.
  • IP-Adresse siehe hostname
  • eine benutzerdefinierte DHCP-Option gibt's nicht auf Rechnern ohne Netzwerk(!)
  • die MAC-Adresse und Hardware-Seriennummern sind doof, wenn man nur wenige Klassen von Rechnern unterscheiden will. Außerdem müsste man die Scripte bei jedem Neuzugang anpassen.
  • Hardware-Unterschiede gibt's zwar, aber natürlich bekommen Rechner mit identischer Hardware verschiedene Aufgaben. (Naja, man könnte sie an der Peripherie unterscheiden, aber dann kann man nicht booten, wenn ein Stecker raus ist).
  • z.Zt. lese ich einen Boot Parameter aus /proc/cmdline, aber da passen nur 256 Zeichen rein und manche Boot Loader hängen ungefragt etwas an
Was könnte man sonst noch auslesen?
Beware of programmers who carry screwdrivers.

lemak
Beiträge: 1213
Registriert: 09.11.2007 13:25:57
Lizenz eigener Beiträge: GNU General Public License
Kontaktdaten:

Re: wie kann ein Script Rechner unterscheiden?

Beitrag von lemak » 16.05.2013 19:23:49

Taugt das Kommando hostid(1) was?

Wenn ich dich richtig verstehe, willst du den Wert selbst bestimmen?

Cae
Beiträge: 6349
Registriert: 17.07.2011 23:36:39
Wohnort: 2130706433

Re: wie kann ein Script Rechner unterscheiden?

Beitrag von Cae » 16.05.2013 19:45:08

hostid(1) ruft gethostid() auf:

Code: Alles auswählen

       gethostid()  and  sethostid()  respectively  get or set a unique 32-bit
       identifier for the current machine.  The 32-bit identifier is  intended
       to be unique among all Unix systems in existence.  This normally resem-
       bles the Internet address for the local machine, as returned  by  geth-
       ostbyname(3), and thus usually never needs to be set.
... fragt sich, ob ein System mit einer (privaten) IP-Adresse wirklich so eindeutig bestimmt ist...

Wie waer's mit einem selbstgebauten Paket, das beim postinst

Code: Alles auswählen

{ tr -cd 0-9a-z </dev/urandom | head -c 8; echo; } >/etc/system-id
ausfuehrt? Man installiert es ueberall und kann sich danach auf statische Bezeichner verlassen (und diesen auch sauber wieder entfernen).

Gruss Cae
If universal surveillance were the answer, lots of us would have moved to the former East Germany. If surveillance cameras were the answer, camera-happy London, with something like 500,000 of them at a cost of $700 million, would be the safest city on the planet.

—Bruce Schneier

Benutzeravatar
4A4B
Beiträge: 962
Registriert: 09.11.2011 11:19:55
Kontaktdaten:

Re: wie kann ein Script Rechner unterscheiden?

Beitrag von 4A4B » 17.05.2013 07:49:59

Cae hat geschrieben:hostid(1) ruft gethostid() auf:

Code: Alles auswählen

       gethostid()  and  sethostid()  respectively  get or set a unique 32-bit
       identifier for the current machine.  The 32-bit identifier is  intended
       to be unique among all Unix systems in existence.  This normally resem-
       bles the Internet address for the local machine, as returned  by  geth-
       ostbyname(3), and thus usually never needs to be set.
... fragt sich, ob ein System mit einer (privaten) IP-Adresse wirklich so eindeutig bestimmt ist...
Wohl nicht, auf der Manpage von gethostid(3) ist dies auch als Bug verzeichnet :)
BUGS
It is impossible to ensure that the identifier is globally unique.

uname
Beiträge: 12405
Registriert: 03.06.2008 09:33:02

Re: wie kann ein Script Rechner unterscheiden?

Beitrag von uname » 17.05.2013 08:23:56

Also ich finde MAC-Adressen gar nicht schlecht:

Code: Alles auswählen

 
ip a | grep -oE 'link/ether ([a-f0-9]{2}:){5}[a-f0-9]{2}' | cut -d' ' -f2   

Zudem sollte doch normalerweise der (zentrale) DHCP-Server auch alle MAC-Adressen der Clients kennen. Das kann man dann auch gut abgleichen. Problematisch ist evtl. dass MAC-Adressen gefälscht werden können (z.B. bei WLAN durch einen WISP-Client mit dahinterliegendem Netzwerk). Das liegt dann jedoch am jeweiligen Anspruch.

cosmac
Beiträge: 4576
Registriert: 28.03.2005 22:24:30

Re: wie kann ein Script Rechner unterscheiden?

Beitrag von cosmac » 17.05.2013 08:41:44

lemak hat geschrieben:Taugt das Kommando hostid(1) was?
auf jeden Fall, damit wurden schon 1980 sündteure Lizenzen abgesichert. Schön, dass es das noch gibt, 99 Pluspunkte für Traditionsbewusstsein :THX:
Cae hat geschrieben:... fragt sich, ob ein System mit einer (privaten) IP-Adresse wirklich so eindeutig bestimmt ist...
nicht nur das; so eine Adresse ändert sich auch mal, selbst wenn sie statisch ist (z.B.: Rechner zieht in eine andere Abteilung um).
4A4B hat geschrieben:BUGS
It is impossible to ensure that the identifier is globally unique.
:D ich hoffe, man arbeitet an dem Problem ;) Übrigens haben die beliebten UUIDs immer noch den gleichen Bug. Apropos UUID: Der Kernel erzeugt beim Booten /proc/sys/kernel/random/boot_id, diese eindeutige System-Kennung ändert sich bei jedem Neustart -- was es alles gibt...

Cae hat geschrieben:Wie waer's mit einem selbstgebauten Paket, das beim postinst

Code: Alles auswählen

{ tr -cd 0-9a-z </dev/urandom | head -c 8; echo; } >/etc/system-id
ausfuehrt? Man installiert es ueberall und kann sich danach auf statische Bezeichner verlassen (und diesen auch sauber wieder entfernen).
sehr sauber, das gefällt mir! Man könnte zwar auch die UUID der root-Partition nehmen, aber eine normale Datei lässt sich doch deutlich einfacher auslesen, vor allem vom normalen User.
Beware of programmers who carry screwdrivers.

cosmac
Beiträge: 4576
Registriert: 28.03.2005 22:24:30

Re: wie kann ein Script Rechner unterscheiden?

Beitrag von cosmac » 17.05.2013 09:11:25

uname hat geschrieben:Also ich finde MAC-Adressen gar nicht schlecht:

Code: Alles auswählen

 
ip a | grep -oE 'link/ether ([a-f0-9]{2}:){5}[a-f0-9]{2}' | cut -d' ' -f2   

Zudem sollte doch normalerweise der (zentrale) DHCP-Server auch alle MAC-Adressen der Clients kennen.
O.K., das geht, wahrscheinlich sogar ganz ohne Netzwerk. Aber das wird mir bei Reparaturen zu kompliziert. Mit einer normalen Datei ist die gesamte Konfiguration auf der Platte (CF-Karte). Wenn man die MAC verwendet, funktioniert die CF-Karte im neuen Rechner erstmal nicht richtig. Ein MAC-Aufkleber am Gehäuse ist ganz schlecht, weil dann jemand nur das Board tauscht...
Problematisch ist evtl. dass MAC-Adressen gefälscht werden können (z.B. bei WLAN durch einen WISP-Client mit dahinterliegendem Netzwerk).
Da hier die "Bösen" den Rechner ungestört auseinander bauen könnten, ist das ein kleineres Problem :)
Beware of programmers who carry screwdrivers.

Benutzeravatar
ThorstenS
Beiträge: 2875
Registriert: 24.04.2004 15:33:31

Re: wie kann ein Script Rechner unterscheiden?

Beitrag von ThorstenS » 19.05.2013 22:25:19

Ich benutze noch immer die Version 2 von cfengine und manage damit derzeit gute 110 Server. Für mich ist der Hostname der entscheidende identitfier. Daraus leitet sich nicht nur die Netzwerkkonfiguration sondern alle Softwarepakete inkl. Konfigurationen und angelegte Benutzer/Paßwörter ab.

Vllt. schaust du dir aber auch mal slaugther von Steve Kemp an. Das tool könnte bei mir cfengine irgendwann mal ablösen.

Wenn ich einen neuen Rechner installiere, setze ich zuerst im DNS den Namen zu der neuen IP und gebe dem d-i prompt die IP-Adresse mit. Danach nimmt alles automagisch seinen Lauf...

Antworten