web-dev-qa-db-ja.com

再起動せずに新しく追加されたユーザーグループの変更を適用する方法

ユーザーtakparでログインしているとします。

takpar@skyspace:/$

Rootとして、takparをグループwebdevのメンバーとして追加しました。

# usermod -a -G webdev takpar

しかし、それは適用されていないようです。たとえば、グループの読み取り権限を持つwebdevのディレクトリにアクセスできないためです。

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

しかし、再起動後、期待どおりにアクセスできます。この種のグループ変更は私のルーチンに含まれているので、再起動せずに変更を適用する方法はありますか?

Answer現在のセッションに新しいグループを通知する方法がないようです。たとえば、ファイルマネージャーは新しい変更を処理できません。しかし、再ログインすればうまくいきます。 suコマンドは、urrentセッションの一時コマンドにも適しています。

41
Alexar

ローカルソリューション:su yourself再度ログインします。新しいセッションでは、グループのメンバーと見なされます。


newgrpsgのmanページも、現在のグループIDを変更する(そして新しいグループにログインする)のに役立ちます。

  • 現在のシェルでwebdevのグループID(および特権)を使用するには、次のコマンドを使用します。

     newgrp webdev
    
  • いくつかのグループIDでコマンドを開始するには(そしてシェルで現在の特権を維持するには)、次のコマンドを使用します。

     sg webdev -c "command"
    

    sgsuに似ていますが、グループの場合、システムのデータでグループのメンバーとしてリストされている場合は、グループパスワードがなくても機能します)

59

システムの再起動はやりすぎです。gpasswdを使用している場合は、ログアウトとログインも不要です。

次のコマンドを使用して、takparwebdevグループに追加できます。

$ gpasswd -a takpar webdev

getent group {name}コマンドを使用してグループメンバーシップを確認できます。

$ getent group webdev
webdev:x:1008:webdev,takpar

これはcat /etc/group | grep webdevと同じである必要があります。完全を期すために、idシェルセッションからのtakpar出力を次に示します。

$ id takpar
uid=1007(takpar) gid=1007(takpar) groups=1007(takpar),1008(webdev)
3
Tombart
id webdev

ここでは間違っているようです-あなたは自分のidtakparではなくwebdevについて知りたいです。

idid takparの出力を比較すると、前者はまだ変更を表示していないが、後者は変更を表示していることがわかります。どうして?これは、idが現在のプロセスのグループを示しているためです。ログアウトして再度ログインした場合、または新しいターミナルウィンドウのみを開いた場合でも、再起動せずに変更がすでに表示されているはずです。

1
glglgl