J'ai besoin de wget
quelque chose (résulte en un fichier compressé dans cwd), puis je dois l'extraire, puis faire des trucs de copie / déplacement / modification et peut-être enfin exécuter un script (à partir de l'archive téléchargée).
Maintenant, toutes ces tâches, directement ( wget
extraire, etc.) ou indirectement (exécuter le script), entraînent la création de fichiers et de répertoires (tous dans le répertoire de travail actuel). Je fais tout ça root
(pas moyen de le faire avec l'utilisateur final souhaité).
Le problème est le suivant: tout ce qui est créé dans le processus appartient à root ou à l'utilisateur sudo. Quand j'ai fini (et parfois à mi-chemin), je dois émettre une série de commandes chmod
et chown
pour faire les choses correctement.
Maintenant, ce serait bien de pouvoir dire au système que "Désormais, tous les fichiers ou répertoires que vous créez lorsque j'émets des commandes en tant que root, vous les créez avec telle ou telle propriété et autorisations".
chown
déposer des fichiers vers un autre utilisateur, et définir une valeur par défaut comme celle-ci a le potentiel d'erreurs de l'utilisateur, donnant aux autres utilisateurs des autorisations sans que l'root
utilisateur ne s'en rende compte.Il y a une autre façon, assez élégante je pense. Utilisation de l'installation (1)
Par exemple, zabbix-agentd a besoin d'un sous-dossier dans / var / run, mais les distributions récentes utilisent tmpfs pour / var / run, donc le répertoire ne survit pas aux redémarrages. Je l'ai résolu en créant un fichier / etc / sysconfig / zabbix-agentd contenant:
la source
-m 0700
par exemple. La réponse.install
crée le répertoire , puis change le propriétaire / groupe. Il y a donc un court laps de temps où le répertoire n'a pas le propriétaire / groupe spécifié. Dans certains contextes, cela peut être important.Sur les systèmes de type Unix, les fichiers et répertoires nouvellement créés appartiennent au propriétaire du processus qui les a créés. Les utilitaires standard n'ont normalement pas la possibilité de changer le propriétaire des fichiers créés.
Variables avec UID et GID de l'utilisateur d'origine
Si vous exécutez certaines commandes à plusieurs reprises, vous pouvez utiliser les variables
$SUDO_UID
et$SUDO_GID
faire référence à l'utilisateur qui a appelésudo
:Obtention automatique de la liste des fichiers et répertoires créés
Si vous souhaitez obtenir automatiquement la liste des fichiers et répertoires créés (et éventuellement modifiés), vous pouvez exécuter vos commandes sous
strace
surveillance basée sur l'ptrace()
appel système:ou vous pouvez utiliser par exemple Installwatch qui est basé sur le
LD_PRELOAD
mécanisme.Idées de travaux futurs
Sur la base des méthodes mentionnées ci-dessus, il est possible de créer un outil qui changerait automatiquement le propriétaire et éventuellement les droits d'accès des fichiers créés / modifiés. L'utilisation pourrait être aussi simple que:
la source