Debian 仮想マシンの他のグループにユーザーリストを追加しようとしています。 Bash スクリプトでは、次の一連のコマンドを使用します。
getent group $uid || groupadd $uid #add group before adding user
useradd -s $shell -m -d $users_directory -g $uid $uname #add user with group id $uid
ただし、実行すると、以下が印刷されます。
groupadd: group '5067' already exists
useradd: group '5067' does not exist
私のグループを見ると、cut-d: -f1 /etc/group
そこに「5067」が存在することがわかりますが、実行するとgroups
唯一のグループ「root」だけが表示されます。
どのようなヒントがありますか?
答え1
数値のグループ ID で呼び出すと、groupadd
グループが作成されます。名前付き 5067
。たとえば、
# groupadd 5067
# grep 5067 /etc/group
5067:x:1000:
数値識別子を渡すときにのみuseradd -g ...
グループを調べます。ID。だから一群の人でも名前付き 5067
存在する:
# useradd -g 5067 testuser
useradd: group '5067' does not exist
これが問題の原因だと思います。
実行時に新しいグループが表示されないのはgroups
正常です。ユーザーを追加した新しいグループは、そのユーザーがログインするまで適用されません。ユーザーがすでにログインしている場合は、ログアウトしてから再度ログインする必要があります(オペレーティングシステムは新しいログインシェルを起動します)。では、新しいグループがgroups
表示されますが、出力では新しいグループが表示されないのはこの理由です/etc/group
。
答え2
回答:ルートのグループコマンドのみを表示してください。
group と入力すると、次のような応答が表示されます。あなたのuid。ユーザーグループを表示するには、グループ$unameを使用する必要があります。
また、useraddは同じ名前のユーザーに対して新しいグループを作成できます。これを防ぐには、-N を使用できます。オプションのデフォルト値を確認するには、/etc/login.defsと/etc/default/useraddを確認してください。