Pour des raisons évidentes, je dois définir la valeur umask
pour un dossier spécifique. Comment peut-on faire ça?
Merci d'avance!
PDATE 1
La raison pour laquelle j'ai besoin d'utiliser umask pour un dossier spécifique est la suivante. J'ai une application Web et quand il crée un fichier, l'autorisation par défaut est 700. Mais j'ai besoin d'au moins 755 autorisations pour ce fichier. Je pense que je pourrais expliquer le problème plus clairement maintenant.
vous pouvez utiliser setfacl
setfacl -d -m group:name:rwx /path/to/your/dir
Où name
est le nom du groupe
Pour trouver les groupes auxquels vous ou un utilisateur spécifique appartenez, voir Sous Unix/Linux, comment savoir à quel groupe appartient un utilisateur donné via la ligne de commande?
Vous ne pouvez pas définir umask par répertoire, c'est une valeur au niveau du processus. Si vous devez empêcher d'autres personnes de lire des fichiers dans un répertoire, révoquez les bits d'autorisations correspondants.
Par exemple, si vous avez un répertoire /home/user/directory
avec des fichiers et des répertoires pouvant obtenir des autorisations telles que 777 à partir d'un processus, définissez les bits d'autorisation de /home/user/directory
sur quelque chose comme 700. Cela rendra la tâche impossible pour les autres utilisateurs (à l'exception de la racine superutilisateur). descendre dans /home/user/directory
.
Je suis paranoïaque et attribue les autorisations sur /home/user
à 750. Ainsi, je suis le seul à pouvoir lire, écrire et descendre dans mon répertoire personnel. Cela a pour conséquence que des dossiers tels que /home/user/Public
ne sont pas accessibles aux autres, mais je peux vivre avec cela.
Par mise à jour de votre question: vous ne pouvez toujours pas contrôler cela dans le système de fichiers (autre que l’utilisation d’un type de système de fichiers tel que FAT qui est fortement déconnecté), vous devez le faire dans votre application Web. Si votre application Web est codée en PHP, vous pouvez changer d'umask à la volée à l'aide de la fonction umask
:
<?php
umask(0022);
// other code
?>
Vous pouvez le placer dans un fichier de configuration, tel que le fichier contenant le mot de passe de connexion à la base de données (en pensant à des applications comme Wordpress).
N'oubliez pas qu'il s'agit d'une valeur de processus, certains serveurs Web vous permettent de le définir dans leurs fichiers de configuration. Sinon, vous pouvez modifier les scripts de démarrage pour définir le umask souhaité. N'oubliez pas que les autorisations telles que 755
et 644
sont assez dangereuses pour les applications Web. Si le code est sensible, tout le monde peut le lire.
Une autre solution consiste peut-être simplement à définir l’ID de groupe sur les fichiers créés dans le répertoire, ce qui fait que les nouveaux fichiers seront possédés par l’ID de groupe de répertoires au lieu de l’ID de groupe de l’utilisateur qui a créé les fichiers. Donc, je pense que vous pourriez simplement faire:
chown www-data:www-data /my/folder
chmod 4755 /my/folder
Ceci définit l’autorisation de fichier spéciale setgid, ce qui ferait que tous les fichiers créés dans /my/folder
appartiendraient au groupe www-data
, qui a ensuite l’autorisation rx (5) en raison du répertoire parent.
Pour modifier les autorisations d'un dossier, utilisez chmod. umask est pour les fichiers.
Définissez umask selon vos besoins en
umask xxx
et changez quand vous avez fini
umask 022
En relation, mais peut-être pas applicable dans ce cas, le clip suivant provient de .zshrc
:
# Change the umask automatically for some directories; use 0022 as the default
chpwd () {
case $PWD in
$HOME/[Dd]ocuments*)
if [[ $(umask) -ne 077 ]]; then
umask 0077
echo -e "\033[01;32mumask: private \033[m"
fi;;
*/[Ww]eb*)
if [[ $(umask) -ne 072 ]]; then
umask 0072
echo -e "\033[01;33mumask: other readable \033[m"
fi;;
/vol/nothing)
if [[ $(umask) -ne 002 ]]; then
umask 0002
echo -e "\033[01;35mumask: group writable \033[m"
fi;;
*)
if [[ $(umask) -ne 022 ]]; then
umask 0022
echo -e "\033[01;31mumask: world readable \033[m"
fi;;
esac
}
Donc, pour une utilisation interactive, quelque chose comme ça fonctionnerait (mais, évidemment, pas pour assurer la sécurité).