主題が言うように、私は新しいユーザーを追加しようとしています。コマンドを実行すると、ユーザーが既に存在していると表示されます。ただし、/ 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:~#
何かご意見は?
ターミナルで次のように入力してみてください
Sudo userdel -r atc
これにより、ユーザーのすべてのインスタンスが削除されます。
システムにユーザーに選択させるのではなく、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.conf
( man page )を見ることができます-passwd
で始まる行は、システムがユーザーを探している場所を示します。一般的なデフォルト値はfiles
とcompat
ですが、より複雑なセットアップには、ldap
、dns
、winbind
などの値を含む複数の値が含まれる場合があります。 files
は、/etc/passwd
を含む標準ファイルを意味します。
compat
の正確な意味はあまり明確ではありませんが、nsswitch.conf
のマニュアルページを読むと、files
とnis
の組み合わせであることがわかります。 nis
は、 ネットワーク情報サービス であり、最近ではほとんど置き換えられていますが、システムに影響を与える可能性があります。
私の場合、/ etc/nsswitch.confにはpasswdに対してこれがありました。
passwd: files winbind
ユーザーはActive Directoryにいたため、winbindはADに「既存の」ユーザーアカウントを表示していました。
Running: # service winbind stop
次に、useraddを実行すると、ユーザーアカウントを追加できました。