web-dev-qa-db-fra.com

Comment définir umask pour un dossier spécifique

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.

23
Bakhtiyor

vous pouvez utiliser setfacl

setfacl -d -m group:name:rwx /path/to/your/dir

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?

29
yogi70

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.

11
Lekensteyn

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.

1
Bastiaan

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
1
wojox

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é).

0
Ville