utiliser root pour mkdir dans le répertoire de base d'un autre utilisateur

27

avoir un peu de mal à essayer de créer un dossier sous le dossier d'un autre utilisateur /home/devuser1/pubic_html. J'essaie d'éviter d'utiliser sudoet de chercher une alternative. Les autorisations sur ledit dossier se lisent comme suit:

drwxr-s--- 2 devuser1  www-data 4096 Apr 28 19:40 public_html

Sinon, en supposant que j'utilise le sudopréfixe, quelles seraient les implications? J'ai lu que c'est une mauvaise pratique à utiliser sudopour créer un dossier. Une fois le nouveau dossier créé, je change toujours la propriété de celui-ci à l'utilisateur en question. Exemple:

chown -vR devuser1:www-data /home/devuser1/public_html/$vhost
maGz
la source

Réponses:

31

Avec install, vous pouvez créer un répertoire avec un propriétaire, un groupe et un mode spécifiques:

install -d -o <user> -g <group> -m <mode> <path>
user2313838
la source
29

sudo -u [username] mkdir /home/[username]/public_html/[folder_name] fonctionne bien.

D'après ce que je peux voir, les autorisations et la propriété sont les mêmes si je devais me connecter en tant que même utilisateur et créer le dossier sous public_html.

Vous pouvez également appeler su -c "mkdir /home/[username]/public_html/[folder_name]" [username]

maGz
la source
2
Lorsque vous exécutez sudo -u USERNAME mkdir DIRNAME, vous exécutez la mkdircommande en tant qu'utilisateur USERNAME. Ce n'est pas exactement équivalent à se connecter en tant que USERNAME, car la connexion implique également la définition de variables d'environnement, etc., mais c'est la partie qui compte, à savoir l'exécution d'un processus en tant qu'utilisateur particulier.
Gilles 'SO- arrête d'être méchant'
1
Cet utilisateur peut également ne pas avoir d'autorisation.
mahemoff
1

Compte tenu de ces autorisations, seul le propriétaire du répertoire ou le super utilisateur peut créer des sous-répertoires.

La seule façon d'éviter d'utiliser des privilèges supplémentaires pour créer le dossier est de changer la propriété pour vous-même (avec sudo), de créer le sous-répertoire et de retourner finalement la propriété au propriétaire, mais cela ne me semble pas être une bonne solution.

RSFalcon7
la source
oui, difficile celui-ci. C'est une question stupide, mais quelles sont mes options?
maGz
qu'en est-il (en tant que root) d'exécuter la commande en tant qu'utilisateur?: sudo -u devuser1 mkdir /home/devuser1/public_html/test. Ce n'est pas la même chose que de créer le dossier avec, sudon'est-ce pas? ls -alrévèle:drwxr-sr-x 2 devuser1 www-data 4096 Apr 28 23:49 test
maGz
Peut-être que je suis naïf, mais je ne vois vraiment aucun mal à créer un dossier avec sudotant que vous changez de propriétaire après cela.
RSFalcon7
D'après ce que lsrévèle le contenu de l'utilisateur public_html, il semble que le changement de propriétaire ne soit pas nécessaire, mais peut-être des autorisations.
maGz
Je pense que je suis également naïf en pensant à ceci: je ne crée pas le dossier car su, au lieu de cela, je l'utilise pour m'authentifier en tant qu'utilisateur qui va créer le dossier ... est-ce que cela a du sens?
maGz
0

J'ai essayé de faire mkdir -p /srv/postgres/data/mydirmais parce que

drwxr-xr-x 3 root root 4.0K Apr 7 08:26 srv a un propriétaire root

ni install -d -o <user> -g <group> -m <mode> <path> @ user2313838

ni sudo -u postgres mkdir -p /srv/postgres/data/mydirfonctionne @maGz

Je dois donc le diviser en deux commandes:

sudo mkdir -p /srv/postgres/data/mydir
sudo chown postgres:postgres /srv/postgres -R
hannes ach
la source