web-dev-qa-db-ja.com

adduserは、ユーザーが存在しないときにユーザーが存在すると言います

主題が言うように、私は新しいユーザーを追加しようとしています。コマンドを実行すると、ユーザーが既に存在していると表示されます。ただし、/ etc/passwd、/ etc/group、および/ etc/shadowを調べると、ユーザーが存在しないことがわかります。

ローカルマシンでコマンドを実行すると問題なく動作します。両方でUbuntu 11.10を実行しています。

これが私の端末コマンドと出力です:

root@ws-prod-www-01:~# useradd -s /sbin/nologin -m -d /var/www/html/atc -g 33 -u 10141 atc
useradd: user 'atc' already exists
root@ws-prod-www-01:~# grep atc /etc/passwd
speech-dispatcher:x:111:29:Speech Dispatcher,,,:/var/run/speech-dispatcher:/bin/sh
root@ws-prod-www-01:~# grep atc /etc/shadow
speech-dispatcher:!:15259:0:99999:7:::
root@ws-prod-www-01:~# grep atc /etc/group
root@ws-prod-www-01:~# 

私も試しました:

root@ws-prod-www-01:~# adduser --Shell /sbin/nologin --home /var/www/html/atc --gid 33 --uid 10141 atc
Warning: The home dir /var/www/html/atc you specified already exists.
adduser: The user `atc' already exists.
root@ws-prod-www-01:~# 

何かご意見は?

5
David R.

ターミナルで次のように入力してみてください

Sudo userdel -r atc

これにより、ユーザーのすべてのインスタンスが削除されます。

6
Scott Stookey

システムにユーザーに選択させるのではなく、uidを指定する理由はありますか? grep '10141' /etc/passwdを実行すると、選択したIDが使用中かどうかを確認できます。その場合、エラーメッセージは確かに少し紛らわしいです:/

また、システムが/etc/passwdにないユーザーを認識する可能性もあります-たとえば、LDAPを使用する場合。これをテストする簡単な方法の1つは、id atcを実行し、システムがそれを認識するかどうかを確認することです。別の方法はgetent passwd atcで、これはシステムが/etc/passwdにいないユーザーを認識するユーザーを表示します。または、getent passwd 10141でuidが使用されているかどうかを再度確認できます。 (getent passwdを実行して、エントリの完全なリストを取得することもできます。) getentの詳細

これらのユーザーがどこから来たのかを見るには、/etc/nsswitch.confman page )を見ることができます-passwdで始まる行は、システムがユーザーを探している場所を示します。一般的なデフォルト値はfilescompatですが、より複雑なセットアップには、ldapdnswinbindなどの値を含む複数の値が含まれる場合があります。 filesは、/etc/passwdを含む標準ファイルを意味します。

compatの正確な意味はあまり明確ではありませんが、nsswitch.confのマニュアルページを読むと、filesnisの組み合わせであることがわかります。 nisは、 ネットワーク情報サービス であり、最近ではほとんど置き換えられていますが、システムに影響を与える可能性があります。

12
Hamish Downer

私の場合、/ etc/nsswitch.confにはpasswdに対してこれがありました。

passwd:     files winbind

ユーザーはActive Directoryにいたため、winbindはADに「既存の」ユーザーアカウントを表示していました。

Running:   # service winbind stop

次に、useraddを実行すると、ユーザーアカウントを追加できました。

0
YDY