GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Automatisieren Sie die mysql_secure_installation mit dem echo-Befehl über ein Shell-Skript

Ich habe das gerade unter CentOS 6.7 mit folgendem gemacht:

mysql_secure_installation <<EOF

y
secret
secret
y
y
y
y
EOF

Seit mysql_secure_installation ist nur ein Bash-Skript, schauen Sie sich einfach den rohen Quellcode an, wie hier gezeigt. Suchen Sie nach den Zeilen mit der Aufschrift do_query (Beachten Sie, dass ich nach do_query ein zusätzliches Leerzeichen eingefügt habe; müssen Abfragen gegenüber der Funktion finden) und dann können Sie diese Befehle finden.

UPDATE mysql.user SET Password=PASSWORD('root') WHERE User='root';
DELETE FROM mysql.user WHERE User='';
DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1', '::1');
DROP DATABASE IF EXISTS test;
DELETE FROM mysql.db WHERE Db='test' OR Db='test\\_%';
FLUSH PRIVILEGES;

Beachten Sie, dass ich für dieses Beispiel das Passwort auf root gesetzt habe Sie können dies jedoch gerne an Ihre Einrichtungsanforderungen anpassen. Wie auch immer, nehmen Sie diesen einfachen Stapel von MySQL-Befehlen und speichern Sie ihn in einer Datei namens mysql_secure_installation.sql .

Führen Sie danach einfach den folgenden Befehl per Skript aus, um die MySQL-Installation zu sichern:

mysql -sfu root < "mysql_secure_installation.sql"

Die s schweigt Fehler und die f zwingt die Befehle fortzufahren, selbst wenn man erstickt. Die u bezieht sich auf den unmittelbar darauf folgenden Benutzernamen, der in diesem Fall eindeutig root ist .

Führen Sie das in einem Bereitstellungsskript aus, in dem MySQL anfänglich ohne Passwort installiert wird, und Sie können es ohne Tastaturinteraktion sperren.

PS:Dieses Skript wurde zusammengestellt, um eine MySQL-Installation auf Ubuntu 14.04 zu sichern, die mit dem export DEBIAN_FRONTEND=noninteractive installiert wurde gesetzt und der eigentliche Installationsbefehl auf sudo -E aptitude install -y --assume-yes -q mysql-server mysql-client gesetzt wird . Dadurch wird MySQL ohne Passwort sauber auf Ubuntu installiert; Das ist gut für Bereitstellungsskripts. Diese mysql -sfu root < "mysql_secure_installation.sql" sperrt einfach alles innerhalb von Sekunden nach der Installation.


Ich bin über diese Frage gestolpert, habe mich aber entschieden, die Abfragen manuell über ein Bash-Skript auszuführen:

#!/bin/bash

# Make sure that NOBODY can access the server without a password
mysql -e "UPDATE mysql.user SET Password = PASSWORD('CHANGEME') WHERE User = 'root'"
# Kill the anonymous users
mysql -e "DROP USER ''@'localhost'"
# Because our hostname varies we'll use some Bash magic here.
mysql -e "DROP USER ''@'$(hostname)'"
# Kill off the demo database
mysql -e "DROP DATABASE test"
# Make our changes take effect
mysql -e "FLUSH PRIVILEGES"
# Any subsequent tries to run queries this way will get access denied because lack of usr/pwd param

Sie können versuchen, Expect zu verwenden, das interaktive Anwendungen automatisiert. Sehen Sie sich diese Automatisierung von mysql_secure_installation oder meine Modifikation an.


Linux
  1. Shell-Script-Wrapper, um das Ausführen von Befehlen ohne Argumente zu verhindern?

  2. Shell-Skript hängt am Mail-Befehl?

  3. Echo-Befehl mit praktischen Beispielen

  4. Ist es möglich, ein Bash-Shell-Skript mit einem anderen Befehlszeilenprogramm interagieren zu lassen?

  5. Bearbeiten Sie das Shell-Skript, während es ausgeführt wird

Echo-Befehl in Linux (mit Beispielen)

Echo-Befehl in Linux mit Beispielen

Linux-Befehl „runuser“ – Shell mit angegebener Benutzer-/Gruppen-ID ausführen

So führen Sie einen Shell-Befehl mit Python aus

Ändern Sie Benutzerkonten mit dem Usermod-Befehl

Wie führe ich einen Befehl in einem Shell-Skript aus?