Frage

Ich habe vor kurzem meine Perl und Shell-Skript Fähigkeiten, um Staub von ein paar Kollegen zu helfen. Die Kollegen in Frage wurden mit der Bereitstellung einig Berichte von einer internen Anwendung mit einem großen Oracle-Datenbank-Backend damit beauftragt, und sie haben einfach nicht die Fähigkeiten, dies zu tun. Während einige vielleicht fragen, ob ich diese Fähigkeiten haben entweder (grins), anscheinend genug Leute denken, meine ich ich es nicht Wiesel aus kann.

Also meine Frage -, um die Berichte aus der Datenbank zu extrahieren, wird mein Skript mit offensichtlich verbinden und Abfragen ausführen. Ich habe nicht so weit geschafft, eine gute Lösung zu kommen für wo Sie den Benutzernamen und das Passwort für die Datenbank zu speichern, so dass es derzeit im Skript als Nur-Text gespeichert werden.

Gibt es eine gute Lösung dafür, dass jemand anderes bereits geschrieben hat, vielleicht als ein CPAN-Modul? Oder gibt es etwas anderes, das zu tun ist besser - wie halten Sie die Benutzer / Passwort-Kombination in einer völlig separaten Datei, die irgendwo anders weg auf dem Dateisystem versteckt ist? Oder soll ich sich trivialer nur verschlüsselt zu halten, damit sie nicht mit einem systemweiten grep aus meiner Skripte gezogen werden?

Edit: Die Oracle-Datenbank befindet sich auf einem HP-UX-Server.
Der Application Server (mit den Shell-Skripten) ist Solaris.
Einstellen der Skripte von nur mir besessen werden ist ein No-Go, müssen sie von einem Dienstkonto, das haben mehrere Support-Mitarbeiter Zugang zu gehören.
Die Skripte sind als Cron-Jobs ausgeführt werden.
Ich würde gerne mit Public-Key-Authentifizierung gehen, aber ich bin von Methoden nicht bewusst, dass die Arbeit mit Oracle zu machen - wenn es ein solches Verfahren ist - erleuchte mich

War es hilfreich?

Lösung

Aus der Praxis, IMHO, wäre kein Kennwort in einem Shell / Perl-Skript zu halten. Das ist, was Public-Key-Authentifizierung ist für.

Andere Tipps

Wenn das Skript ausgeführt werden entfernt von dem Server.

  1. Machen Sie Ihre Berichte Ansichten
  2. Geben Sie den Benutzer in nur Zugriff protokollieren auf den Report-Ansichten wählen
  3. speichern Sie einfach das Passwort ein.

Auf diese Weise alles, was der Benutzer tun kann, ist, die Daten für seinen Bericht auszuwählen. Selbst wenn jemand zufällig das Passwort bekommen, würden sie zu beschränken, was sie damit machen können.

Persönlich halte ich Passwörter in Konfigurationsdateien, die dann unabhängig von der Anwendung verteilt sind, und kann auf die spezifische Maschine / Umgebung geändert werden. In Shell-Skripten können Sie diese im Hauptskript beziehen.

Doch in Perl gibt es eine Vielzahl von Ansätzen. Wir empfehlen Ihnen, Getopt :: Long für Kommandozeilenoptionen (und zusätzlich zu untersuchen < a href = "http://search.cpan.org/perldoc?Getopt::ArgvFile" rel = "nofollow noreferrer"> Getopt :: ArgvFile die in einer einfachen Konfigurationsdatei zu speichern), oder schauen Sie sich etwas wie Config :: IniFiles etwas mit ein wenig mehr Kraft dahinter. Dies sind die beiden Arten wir in der Regel verwenden, aber es gibt auch andere Konfigurationsdatei-Module zur Verfügung.

Es gibt keine gute Lösung. Sie können die Passwörter ein wenig verschleiern, aber man kann sich nicht sicher.

Wenn Sie die Kontrolle über Ihre DB-Setup haben, könnten Sie versuchen, durch eine Named Pipe zu verbinden (zumindest mysql unterstützt das) ohne Passwort und lassen Sie das OS die Berechtigungen bearbeiten.

Sie können auch die Anmeldeinformationen in einer Datei speichern, mit eingeschränkten Rechten.

Da haben Sie getaggt KSH & Bash Ich werde Linux zu übernehmen.

Die meisten des Problems ist, dass, wenn der Benutzer das Skript lesen und suchen Sie die Methode, die Sie verstecken verwendet / verschlüsseln Sie die Datei dann werden sie auch manuell die gleiche Sache tun können.

Eine bessere Art und Weise kann die folgende sein tun:

  1. Erstellen Sie Ihr Skript so dass es nur zu sehen ist / lesen / geöffnet von Ihnen. chmod 700 es. Codieren Passwörter weg.
  2. Haben Sie einen „launcher“ Skript, das vom Benutzer ausführbar ist und tut ein sudo.

Auf diese Weise der Benutzer Launchers Skript sehen kann, untersucht sie es nur zu sehen, hat die einzige Befehlszeile. Sie können es laufen und es funktioniert, aber sie haben keine Berechtigungen, um die Quelle für das Skript zu lesen, die sudo'd wird.

Ich bin nicht sicher, welche Version von Oracle Sie ausgeführt werden. Bei älteren Version von Oracle (pre 9i Advanced Security) würden einige DBA CREATE USER OPS$SCOTT IDENTIFIED BY EXTERNALLY und setzen REMOTE_OS_AUTHENT auf true gesetzt.

Dies würde bedeuten, dass Ihre Fern Sonne Maschine, die Sie als SCOTT authentifiziert und dann Ihre Oracle DB, dass die Authentifizierung akzeptieren würde.

Dies ist eine schlechte Idee.

Wie Sie Bild könnte ein beliebige Windows XP mit einem lokalen Benutzer von SCOTT könnte dann in der DB ohne Passwort einloggen.

Leider ist es die einzige Option, die ich kenne von Oracle 9i DBs nicht Benutzername / Passwörter in Ihrem Skript zu speichern oder irgendwo anders zugänglich von der Client-Maschine.

Was auch immer Ihre Lösung, es lohnt sich einen Blick durch Oracle mit Projekt Lockdown bevor sie sich.

Für die Speicherung von Kennwörtern können Sie einen zweistufigen Verschlüsselungsroutine zu tun, zunächst mit einem fest codierten Schlüsseln in Ihrem Skript selbst und gegebenenfalls ein zweites Mal mit einem Schlüssel in einer Datei gespeichert (die Datei Zugriffsrechte festgelegt ist mit eingeschränktem Zugriff haben).

In einer bestimmten Situation kann man dann entweder verwenden, um eine Schlüsseldatei (+ Schlüssel aus Skript), oder wenn die Situation Anforderungen sind nicht so toll er kann nur die encyrption verwendet Sie den Schlüssel im Skript fest einprogrammiert wird. In beiden Fällen würde das Passwort in der Konfigurationsdatei verschlüsselt werden.

Es gibt keine perfekte Lösung, denn irgendwie müssen Sie in der Lage sein, das Klartextpasswort zu entschlüsseln und zu erhalten ... und wenn Sie es jemand anderes tun können, wenn sie die richtigen Informationen.

Vor allem in der Situation, wo wir ihnen einen Perl-Skript geben (im Vergleich zu einer exe) können sie leicht sehen, wie Sie die Verschlüsselung zu tun (und die fest codierten Schlüssel) ... weshalb Sie der Option ermöglichen sollten, eine Schlüssel-Datei zu verwenden, als auch (das kann die Zugriffsrechte geschützt werden).

Einige praktische Beispiele dafür, wie zu implementieren, ist hier

In UNIX, habe ich immer diese Skripte setuid- machen und speichern Sie den Benutzer und das Passwort info in einer Datei, die stark geschützt ist (der gesamte Verzeichnisbaum ist nicht lesbar / durchsuchbar durch regelmäßige Nutzer und die Datei selbst lesbar ist nur durch den Besitzer das Skript).

Halten Sie sie in einer separaten Datei, triviale Weise verschlüsselte und macht einen separaten Benutzer in der Datenbank mit nur Lesezugriff auf erforderliche Tabellen. Wenn Sie die Datei denken gelesen worden ist, dann können Sie den Zugriff auf nur diesen Benutzer abgeschaltet.

Wenn Sie Lust bekommen wollen, könnte ein SUID-Programm überprüfen Sie die / proc // exe und cmdline (in Linux) und erst dann den Benutzernamen freigeben.

Ich habe / hatte ein ähnliches Problem mit den Entwicklern von SQL-Code zu MSSQL Bereitstellung (in der Tat zu einer Datenbank auf diesem MSSQL-Server, also mußte Rolle SysAdmin sein) ANT von einem Solaris-Server. Auch hier habe ich nicht den Benutzernamen und das Passwort in die ANT build.xml Dateien gespeichert werden sollen, so meine Lösung, die ich weiß nicht ideal ist, ist wie folgt:

  1. Shop Name / Wert-Paare für Benutzername und Passwort in einer Textdatei
  2. Verschlüsseln-Datei (unter Solaris) und eine Passphrase nur auf bestimmte admins
  3. bekannt verwenden
  4. Lassen Sie nur die verschlüsselte Datei auf dem Solaris-System
  5. ANT build.xml läuft ein sudo entschlüsseln und fragt nach Passphrase, die von admin
  6. eingegeben wird
  7. ANT Quellen entschlüsselte Datei Laden Benutzername und Passwort als Variablen für die SQL-Zeichenfolge
  8. ANT sofort gelöscht, die Klartextdatei
  9. ANT setzt Code und Ausgänge

Das alles geschieht in einer Angelegenheit von Sekunden, und die SQL-Benutzername und Passwort ist nicht sichtbar zugänglich auf dem Server. Da der Code durch erlaubt Administratoren in der Produktion eingesetzt wird, müssen die Entwickler nie in ihrem Code enthalten.

Ich bin sicher, es könnte besser sein, aber ...

JB

Es ist schade, dass ich noch nie dieses Thema gesehen - es ist sehr interessant aussieht. Ich werde meinen zwei Cent für jedermann hinzuzufügen in Zukunft auf den Faden kommen.

würde ich mit OS-Authentifizierung auf dem DB-Server empfehlen sich -. REMOTE_OS_AUTHENT ist noch FALSE

Wenn Sie das Skript von einem anderen Rechner sind aufgerufen wird, Setup einen Satz lose SSH-Schlüssel und verwenden SSH dorthin zu gelangen. Anschließend können Sie Rohr die SQL-Ergebnisse an die aufrufende Maschine zurück und kann diese Informationen weiter verarbeiten.

Auf diese ein Passwort überall codieren vermeiden. Natürlich, wenn ein böswilliger Administrator die Phrase lose Schlüssel kapern waren und es verwenden, könnte er oder sie auch das Benutzerkonto auf dem DB-Host zugreifen und dann konnte DB Benutzer authentifiziert das Betriebssystem alle Vorgänge tun konnte. Zur Milderung dieses Sie die Datenbankberechtigungen für die OS-Benutzer auf das Nötigste reduzieren könnte -. Sagen wir mal „nur lesen“

Ingo

  

Unter Windows Erstellen Sie einen Ordner und eine Datei in sich die Passwörter im Klartext enthält.   Stellen Sie den Benutzer, der den geplanten Auftrag (Skript oder Batch) als die einzige Person mit Lese- / Schreibzugriff auf diesen Ordner und die Datei laufen würde. (Entfernen Sie auch Administrator).   Für alle anderen Skripten, fügen Sie Code, um das Klartext-Passwort aus dieser eingeschränkten Datei zu lesen.

Dies sollte für einige ausreichen.

Keywords: Passwort zu

Es gibt kommerzielle oder mehr voraus Lösungen wie cyberark AIM kann es besser machen, aber es kostenlos tun und aus der Box habe ich Schweinchen schon wieder die SSH public / private Schlüssel, weil zum einen SSH-Schlüsselpaare höchstwahrscheinlich bereits erstellt die Sicherheitsrichtlinie entsprechen; Zweitens sind Schlüsselpaaren SSH haben bereits eine Reihe von Standard-Protokoll des Schlüssel durch die Dateiberechtigungen, kontinuierliches System Härten (wie Tripwire) oder Schlüsseldrehung.

zu schützen

Dies ist, wie ich es getan hätte:

  1. Generieren Sie die SSH-Schlüsselpaare, wenn noch nicht. Die Schlüsselpaar und Verzeichnis werden durch Standardsystemprotokoll / Erlaubnis geschützt werden. ssh-keygen -t rsa -b 2048

  2. Mit dem öffentlichen SSH-Schlüssel die Zeichenfolge und gespeichert in demselben .ssh Verzeichnis verschlüsseln $ Echo "secret" | openssl rsautl -encrypt -inkey ~ / .ssh / id_rsa.pub -pubin -out ~ / .ssh / secret.dat

  3. Verwendung ssh private Schlüssel die Schlüssel zu entschlüsseln und die Parameter zu scripts / AP in der Echtzeit passieren. Das Skript / programe enthält die Linie in Echtzeit zu entschlüsseln: string = openssl rsautl -decrypt -inkey ~/.ssh/id_rsa -in ~/.ssh/secret.dat

PS - Ich habe CYBERARK AIM agentenlose Lösung experimentiert. es ist eine Art von Schmerz signifikante Änderungen / API-Änderungen für die API / script erfordert. halten Sie auf dem Laufenden, wie das geht.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top