GNU/Linux >> Tutoriels Linux >  >> Linux

Automatisez mysql_secure_installation avec la commande echo via un script shell

Je viens de le faire sur CentOS 6.7 avec ce qui suit :

mysql_secure_installation <<EOF

y
secret
secret
y
y
y
y
EOF

Depuis mysql_secure_installation est juste un script Bash, vérifiez simplement le code source brut comme indiqué ici. Recherchez les lignes qui lisent, do_query (notez que l'espace supplémentaire que j'ai placé après do_query; besoin de trouver des requêtes par rapport à la fonction) et ensuite vous pouvez trouver ces commandes.

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;

Notez que pour cet exemple, j'ai le mot de passe défini sur root mais n'hésitez pas à modifier cela pour répondre à vos besoins de configuration. Quoi qu'il en soit, prenez simplement cette pile de commandes MySQL et enregistrez-la dans un fichier nommé mysql_secure_installation.sql .

Une fois cela fait, exécutez simplement la commande suivante via un script pour sécuriser l'installation de MySQL :

mysql -sfu root < "mysql_secure_installation.sql"

Le s fait taire les erreurs et le f force les commandes à continuer même si l'on s'étouffe. Le u se rapporte au nom d'utilisateur qui le suit immédiatement qui, dans ce cas, est clairement root .

Exécutez cela dans un script de déploiement où MySQL est initialement installé sans mot de passe et vous êtes prêt à le verrouiller sans aucune interaction avec le clavier.

PS :Ce script a été mis en place pour sécuriser une installation MySQL sur Ubuntu 14.04 qui a été installé avec le export DEBIAN_FRONTEND=noninteractive set et la commande d'installation réelle étant définie sur sudo -E aptitude install -y --assume-yes -q mysql-server mysql-client . Cela installera proprement MySQL sur Ubuntu sans mot de passe; ce qui est bien pour les scripts de déploiement. Ce mysql -sfu root < "mysql_secure_installation.sql" verrouille tout en quelques secondes après l'installation.


Je suis tombé sur cette question mais j'ai décidé d'exécuter les requêtes manuellement via un script Bash :

#!/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

Vous pouvez essayer d'utiliser expect, qui automatise les applications interactives. Regardez ceci automatisant mysql_secure_installation ou ma modification.


Linux
  1. Comportement inattendu d'un script shell ?

  2. Shell Script Wrapper pour empêcher l'exécution de la commande sans arguments ?

  3. Commande d'écho avec des exemples pratiques

  4. Ajouter une ligne au fichier /etc/hosts avec le script shell

  5. Exécuter un script shell en tant qu'utilisateur différent

Commande Echo sous Linux (avec exemples)

Commande Echo sous Linux avec exemples

Commande Linux runuser - Exécuter Shell avec l'ID utilisateur/groupe spécifié

Comment exécuter une commande Shell avec Python

Modifier les comptes d'utilisateurs avec la commande Usermod

Comment exécuter une commande dans un script shell ?