F: Wie verschlüssele ich mein Bash-Shell-Skript in einer Linux-Umgebung? Das Shell-Skript enthält ein Kennwort, und ich möchte nicht, dass andere, die Ausführungszugriff haben, das Shell-Skript anzeigen und das Kennwort abrufen. Gibt es eine Möglichkeit, mein Shell-Skript zu verschlüsseln?
A: Erstens sollten Sie als bewährte Methode Ihr Shell-Skript nicht verschlüsseln. Sie sollten Ihr Shell-Skript wirklich richtig dokumentieren, damit jeder, der es ansieht, genau versteht, was es tut. Wenn es vertrauliche Informationen wie das Kennwort enthält, sollten Sie einen anderen Ansatz finden, um das Shell-Skript zu schreiben, ohne es verschlüsseln zu müssen.
Wenn Sie jedoch immer noch darauf bestehen, ein Shell-Skript zu verschlüsseln, können Sie das SHC-Dienstprogramm wie unten beschrieben verwenden. Bitte beachten Sie, dass verschlüsseltes Shell-Skript, das von shc erstellt wurde, für normale Benutzer nicht lesbar ist. Jemand, der versteht, wie dies funktioniert, kann jedoch das ursprüngliche Shell-Skript aus der von shc erstellten verschlüsselten Binärdatei extrahieren.
SHC steht für Shell Script Compiler.
1. Laden Sie shc herunter und installieren Sie es
Laden Sie shc herunter und installieren Sie es wie unten gezeigt.
# wget http://www.datsi.fi.upm.es/~frosal/sources/shc-3.8.9b.tgz
# tar xvfz shc-3.8.9b.tgz
# cd shc-3.8.9b
# make
Stellen Sie sicher, dass shc ordnungsgemäß installiert ist.
$ . /shc -v
shc parse(-f): Keine Quelldatei angegeben
shc Verwendung: shc [-e date] [-m addr][-i iopt][-x cmnd][-l lopt][-rvDTCAh]-f script
2. Erstellen eines Beispiel-Shell-Skripts
Erstellen Sie ein Beispiel-Bash-Shell-Skript, das Sie zu Testzwecken mit shc verschlüsseln möchten.
Zu Testzwecken erstellen wir die folgenden random.sh Shell-Skript, das Zufallszahlen generiert. Sie müssen angeben, wie viele Zufallszahlen Sie generieren möchten.
$ vi random.sh
#!/bin/bash
echo -n "How many random numbers do you want to generate? "
read max
for (( start = 1; start <= $max; start++ ))
do
echo -e $RANDOM
done
$ ./random.sh
How many random numbers do you want to generate? 3
24682
1678
491
3. Verschlüsseln Sie das Shell-Skript mit shc
Verschlüsseln Sie die random.sh Shell-Skripting mit shc, wie unten gezeigt.
$ . /shc -f random.sh
Dadurch werden die folgenden beiden Dateien erstellt:
$ ls -ls random.sh*
-rwxrw-r–. 1 ramesh ramesh 149 Mär 27 01:09 random.sh
-rwx-wx–x. 1 ramesh ramesh 11752 Mär 27 01:12 random.sh.x
-rw-rw-r–. 1 ramesh ramesh 10174 Mär 27 01:12 random.sh.x.c
- random.sh ist das ursprüngliche unverschlüsselte Shell-Skript
- random.sh.x ist das verschlüsselte Shell-Skript im Binärformat
- random.sh.x.c ist der C-Quellcode der random.sh-Datei. Dieser C-Quellcode wird kompiliert, um die obige verschlüsselte random.sh.x-Datei zu erstellen. Die ganze Logik hinter dem shc besteht darin, das random.sh-Shell-Skript in das Programm random.sh.x.c C zu konvertieren (und natürlich zu kompilieren, um die ausführbare Datei random.sh.x zu generieren).
$ file random.sh
random.sh: Bourne-Again shell script text executable
$ file random.sh.x
random.sh.x: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, stripped
$ file random.sh.x.c
random.sh.x.c: ASCII C program text
4. Führen Sie das verschlüsselte Shell-Skript aus
Lassen Sie uns nun das verschlüsselte Shell-Skript ausführen, um sicherzustellen, dass es wie erwartet funktioniert.
$ ./random.sh.x
How many random numbers do you want to generate? 3
7489
10494
29627
Bitte beachten Sie, dass die Binärdatei selbst immer noch von der Shell abhängig ist (die erste Zeile im random.sh /bin/bash), um für die Ausführung des Skripts zur Verfügung zu stehen.
5. Angeben des Ablaufdatums für Ihr Shell-Skript
Mit shc können Sie auch ein Ablaufdatum angeben. d.h. nach diesem Ablaufdatum, wenn jemand versucht, das Shell-Skript auszuführen, erhält er eine Fehlermeldung.
Nehmen wir an, Sie möchten nicht, dass jemand die random.sh.x nach dem 31-Dez-2011 ausführt (ich habe das Datum des letzten Jahres zu Testzwecken verwendet).
Erstellen Sie ein neues verschlüsseltes Shell-Skript mit der Option"shc -e", um das Ablaufdatum anzugeben. Das Ablaufdatum wird im Format TT/MM/YYYANGEGEBEN.
$ . /shc -e 31/12/2011 -f random.sh
Wenn in diesem Beispiel jemand versucht, die random.sh.xnach dem 31. Dezember 2011 auszuführen, erhält er eine Standardablaufmeldung, wie unten gezeigt.
$ ./random.sh.x
./random.sh.x: has expired!
Please contact your provider
Wenn Sie Ihre eigene benutzerdefinierte Ablaufnachricht angeben möchten, verwenden Sie die Option -m (zusammen mit der Option -e, wie unten gezeigt).
$ . /shc -e 31/12/2011 -m "Contact admin@thegeekstuff.com for new version of this script" -f random.sh
$ ./random.sh.x
./random.sh.x: has expired!
Contact admin@thegeekstuff.com for new version of this script
6. Erstellen Sie verteilbare verschlüsselte Shell-Skripte
Neben -e und -m (für Ablauf) können Sie auch die folgenden Optionen verwenden:
- -r lockert die Sicherheit, um eine verteilbare Binärdatei zu erstellen, die auf anderen Systemen ausgeführt wird, auf denen dasselbe Betriebssystem ausgeführt wird wie das, auf dem sie kompiliert wurde.
- -T ermöglicht es, die erstellten Binärdateien mit Programmen wie strace, ltrace usw. nachvollziehbar zumachen.
- -v steht für ausführlich
In der Regel möchten Sie möglicherweise sowohl die Option -r als auch die Option -T verwenden, um ein verteilbares und rückverfolgbares Shell-verschlüsseltes Shell-Skript wie unten gezeigt zu erstellen.
$ ./shc -v -r -T -f random.sh
shc shll=bash
shc [-i]=-c
shc [-x]=exec '%s' "$@"
shc [-l]=
shc opts=
shc: cc random.sh.x.c -o random.sh.x
shc: strip random.sh.x
shc: chmod go-r random.sh.x
$ ./random.sh.x
How many random numbers do you want to generate? 3
28954
1410
15234
Abschließend lohnt es sich, noch einmal zu wiederholen: Sie sollten Ihr Shell-Skript gar nicht erst verschlüsseln. Wenn Sie sich jedoch entschieden haben, Ihr Shell-Skript mit shc zu verschlüsseln, denken Sie bitte daran, dass eine intelligente Person immer noch das ursprüngliche Shell-Skript aus der verschlüsselten Binärdatei generieren kann, die von shc erstellt wurde.