Ubuntuサーバーでは、ユーザーをグループに追加した後、システムを再起動するまでそのユーザーにはグループ権限がないことに気づきました。例えば:
ユーザー 'hudson'には、ディレクトリ 'root:shadow/etc/shadow'を読み取るためのアクセス許可が必要なので、シャドウグループにhudsonを追加します。ハドソンはまだ読むことができません。したがって、私は「Sudo shutdown -h -r now」を実行し、システムが再び起動したときに、ユーザーhudsonが読み取ることができます。
再起動が必要ですか、またはユーザーをグループに追加した後に権限を適用するより良い方法はありますか?
私は解決策を探していましたが、この投稿に出くわし、後で解決策を見つけました!
他の人が恩恵を受けることができるように、私は実際にソリューションを提供すると思いました。ログインとログアウトは1995年です。
から取られる:
https://arkaitzj.wordpress.com/2010/03/08/linux-add-user-to-a-group-without-logout/
したがって、cdrom
グループの権限を取得する必要がある場合は、ユーザーを次の場所に追加しただけです。
newgrp cdrom
例えば
したがって、手順は次のようになります。
#adduser my_user cdrom
その後
$newgrp cdrom
動作することを確認しました。
シンプルな $groups
CLIから確認すると、ユーザーがグループに属していることが示されます。そして、そのグループからの必要な特権を使用した迅速な実行が機能します。
あなたのウィンドウを殺してログインしてログアウトする必要はありません!他の人の役に立つことを願っています!
追加情報(jytouの役立つコメントに基づく):「[この]ソリューションは、現在開いているシェルに対してのみ機能します。別のシェルを開いている場合は、変更を考慮するには、同じコマンドを使用する必要があります。」
ユーザーを新しいグループに追加する場合、ユーザーはログアウトしてからログインし直す必要があります。再起動はそれを達成しますが、それは必要とされるべきではありません。
ユーザーをグループに追加しても、現在ログインしているユーザーには影響しません。
デーモンの場合、新しいグループを適用するにはデーモンを再起動する必要があります。
さらに、デーモン自体のオプションを使用してデーモンを再起動すると、現在の環境を継承するため機能しません。
これを機能させる最も簡単な方法は、デーモンを完全に停止してから再起動することです。
/etc/init.d/foo stop ; /etc/init.d/foo start
これははるかに簡単です。次のように入力して、現在のアクセスレベルを確認できます。
id
必要なグループをリロードするには:
su - $USER
その後、アクセスレベルを再度確認します。
id
新しいグループがアクティブになっていることがわかります。
ここでも対処する必要がある別の障害モードがあります。
管理者が/etc/group
を更新したが/etc/gshadow
を更新できなかった場合(この設定のシステム)、ログアウトして再度ログインしても、実際には新しいグループに割り当てられません。
紛らわしいことに、groups
は実際の現在の状況を表示しますが、id
は出力が誤って出力され、are適切にグループのメンバー。
tripleee@vbvntv$ groups
tripleee
tripleee@vbvntv$ id
uid=1234(tripleee) gid=1234(tripleee) groups=1234(tripleee),4(adm)
tripleee@vbvntv$ ls -l /var/log/mail.log
-rw-r----- 1 root adm 15728 May 26 14:26 /var/log/mail.log
tripleee@vbvntv$ tail /var/log/mail.log
tail: cannot open `/var/log/mail.log' for reading: Permission denied
newgrp
はパスワードを要求するため使用できません。パスワードがなく、SSH公開鍵認証のみです。
解決策は、管理者が/etc/groups
の手動編集を元に戻し、Sudo gpasswd -a tripleee adm
を使用して再度行うことです。または、grpconv
を使用して変更をマージするには(これを https://serverfault.com/a/389719/983 から取得します)