Supposons que je suis connecté avec l'utilisateur takpar
:
takpar@skyspace:/$
En tant que root, j'ai ajouté takpar
en tant que membre du groupe webdev
en utilisant:
# usermod -a -G webdev takpar
Mais il semble que cela n'ait pas été appliqué, car par exemple, je ne peux pas entrer dans le répertoire d'un webdev
qui a l'autorisation de lecture pour le groupe:
400169 drwxr-x--- 3 webdev webdev 4.0K 2011-08-15 22:34 public_html
takpar@skyspace:/home/webdev/$ cd public_html/
bash: cd: public_html/: Permission denied
Mais après un redémarrage, j'ai accès comme prévu. Comme ce type de changement de groupe est dans ma routine, y a-t-il un moyen d'appliquer des changements sans avoir besoin d'un redémarrage?
Answer Il semble qu'il n'y ait aucun moyen de faire connaître à la session en cours le nouveau groupe, par exemple le gestionnaire de fichiers ne fonctionnera pas avec les nouvelles modifications. Mais une nouvelle connexion fera l'affaire. La commande su
convient également aux commandes temporaires dans une session urrent.
Solution locale: utilisez su yourself
pour vous reconnecter. Dans la nouvelle session, vous serez considéré comme un membre du groupe.
Les pages de manuel pour newgrp
et sg
peuvent également être utiles pour changer votre identifiant de groupe actuel (et vous connecter à un nouveau groupe):
Pour utiliser l'ID de groupe (et les privilèges) de webdev
dans votre shell actuel, utilisez:
newgrp webdev
Pour démarrer une commande avec un identifiant de groupe (et conserver les privilèges actuels dans votre shell), utilisez:
sg webdev -c "command"
(sg
est comme su
mais pour les groupes, et il devrait fonctionner sans le mot de passe du groupe si vous êtes répertorié comme membre du groupe dans les données du système)
Le redémarrage du système est une exagération, même la déconnexion et la connexion ne sont pas nécessaires si vous utilisez gpasswd
.
Vous pouvez ajouter takpar
au groupe webdev
en utilisant:
$ gpasswd -a takpar webdev
Vous pouvez vérifier l'appartenance à un groupe à l'aide de getent group {name}
commande:
$ getent group webdev
webdev:x:1008:webdev,takpar
qui devrait être identique à cat /etc/group | grep webdev
. Pour être complet, voici id
sortie de takpar
Session Shell:
$ id takpar
uid=1007(takpar) gid=1007(takpar) groups=1007(takpar),1008(webdev)
id webdev
semble avoir tort ici - vous voulez connaître votre propre id
, takpar
, pas webdev
.
Si vous comparez les sorties de id
et id takpar
, vous remarquerez que le premier ne montre pas encore le changement, tandis que le second le montre. Pourquoi? Cela est dû au fait que id
affiche les groupes du processus en cours. Si vous vous déconnectez et vous reconnectez, ou même si vous n'ouvrez qu'une nouvelle fenêtre de terminal, vous devriez déjà voir la modification sans redémarrer.