ユーザー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セッションの一時コマンドにも適しています。
ローカルソリューション:su yourself
再度ログインします。新しいセッションでは、グループのメンバーと見なされます。
newgrp
とsg
のmanページも、現在のグループIDを変更する(そして新しいグループにログインする)のに役立ちます。
現在のシェルでwebdev
のグループID(および特権)を使用するには、次のコマンドを使用します。
newgrp webdev
いくつかのグループIDでコマンドを開始するには(そしてシェルで現在の特権を維持するには)、次のコマンドを使用します。
sg webdev -c "command"
(sg
はsu
に似ていますが、グループの場合、システムのデータでグループのメンバーとしてリストされている場合は、グループパスワードがなくても機能します)
システムの再起動はやりすぎです。gpasswd
を使用している場合は、ログアウトとログインも不要です。
次のコマンドを使用して、takpar
をwebdev
グループに追加できます。
$ 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)
id webdev
ここでは間違っているようです-あなたは自分のid
、takpar
ではなくwebdev
について知りたいです。
id
とid takpar
の出力を比較すると、前者はまだ変更を表示していないが、後者は変更を表示していることがわかります。どうして?これは、id
が現在のプロセスのグループを示しているためです。ログアウトして再度ログインした場合、または新しいターミナルウィンドウのみを開いた場合でも、再起動せずに変更がすでに表示されているはずです。