Comment puis-je avoir MySQL pour écrire des fichiers sortants en tant qu'utilisateur différent?

StackOverflow https://stackoverflow.com/questions/231862

  •  04-07-2019
  •  | 
  •  

Question

Je travaille avec une requête MySQL qui écrit dans un fichier de sortie. Je lance cette requête une fois par jour ou tous les deux jours et je veux donc pouvoir supprimer le fichier sans avoir à recourir à su ou à sudo. La seule façon dont je peux y arriver est de faire écrire le fichier de sortie comme appartenant à quelqu'un d'autre que l'utilisateur mysql. Est-ce possible?

Modifier: je ne redirige pas la sortie vers un fichier, j'utilise la partie INTO OUTFILE d'une requête de sélection pour générer un fichier.

Si cela vous aide:

mysql --version
mysql  Ver 14.12 Distrib 5.0.32, for pc-linux-gnu (x86_64) using readline 5.2

Était-ce utile?

La solution

Le fichier de sortie est créé par le processus mysqld, pas par votre processus client. Par conséquent, le fichier de sortie doit appartenir à l’uid et au gid du processus mysqld.

Vous pouvez éviter de devoir accéder au fichier par sudo si vous y accédez à partir d'un processus utilisant un uid ou un gid pouvant accéder au fichier. En d’autres termes, si mysqld crée des fichiers appartenant à uid et à gid "mysql" / "quot mysql", ajoutez votre propre compte au groupe "mysql". Ensuite, vous devriez pouvoir accéder au fichier, à condition que le mode de permission du fichier inclue l'accès au groupe.

Modifier:

Vous supprimez un fichier dans / tmp, avec un mode d’autorisation de répertoire de rwxrwxrwt. Le bit collant ('t') signifie que vous ne pouvez supprimer des fichiers que si votre identifiant utilisateur est identique au propriétaire du fichier, quelles que soient les autorisations sur le fichier ou le répertoire.

Si vous enregistrez votre fichier de sortie dans un autre répertoire pour lequel le sticky bit n'est pas défini, vous devriez pouvoir le supprimer normalement.

Lisez cet extrait de la page de manuel de sticky (8):

RÉPERTOIRES ADHÉSIFS

Un répertoire dont le «sticky bit» est défini devient un répertoire réservé aux ajouts ou, plus précisément, un répertoire dans lequel la suppression de fichiers est restreinte. Un fichier d'un répertoire collant ne peut être supprimé ou renommé par un utilisateur que si celui-ci dispose du droit d'écriture pour le répertoire et qu'il est le propriétaire du fichier, le propriétaire du répertoire ou le super-utilisateur. Cette fonctionnalité est utilement appliquée aux répertoires tels que / tmp, qui doivent être accessibles en écriture pour le public, mais doivent empêcher les utilisateurs de détenir la licence permettant de supprimer ou de renommer de manière arbitraire leurs fichiers.

Autres conseils

Ne pas utiliser les options "SELECT ... INTO OUTFILE" syntaxe, n °

Vous devez exécuter la requête (le client) en tant qu'utilisateur différent et rediriger la sortie. Par exemple, modifiez votre crontab pour exécuter la commande suivante à tout moment:

mysql db_schema -e 'SELECT col,... FROM table' > /tmp/outfile.txt

Cela créera /tmp/outfile.txt en tant qu'utilisateur crontab auquel vous avez ajouté la commande.

Si un autre utilisateur exécute la requête à partir de cron, le fichier sera créé sous le nom de cet utilisateur.

je fais juste

sudo gedit /etc/apparmor.d/usr.sbin.mysqld

et ajoutez

 /var/www/codeigniter/assets/download/* w,

et

sudo service mysql restart

Et voilà, je peux faire facilement SÉLECTIONNER INTO OUTFILE n’importe quel nom de fichier

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top