Whoami: не может найти имя для идентификатора пользователя 0

8

Когда я бегу, whoamiон говорит:

whoami: не может найти имя для идентификатора пользователя 0

Мой /etc/passwdфайл выглядит так:

root::0:0:root:/root:/bin/bash
gabemai
источник
Ваш / etc / passwd не работает? Можете ли вы опубликовать содержимое
маргаритка
Что вы id commandв current shellкогда вы Whoami ?.
PersianGulf
7
(1) Какой дистрибутив Linux? (2) Что является результатом pwckи grpck? (3) Файл /etc/shadowсуществует?
Джон Сиу
5
Кроме того, вы установили (или пытались) какие-либо службы каталогов (LDAP, NIS и т. Д.)? Вы трогали /etc/nsswitch.conf?
Дероберт
1
Я думаю, nsswitch.confкак упоминал Дероберт. Но я видел nscdпричину странного дерьма, как это раньше. Если он работает, попробуйте остановить его. Если он не запущен, попробуйте запустить его (хотя запуск, если он не запущен, был старой ошибкой RHEL, которая больше не должна появляться).
Патрик

Ответы:

7

Обратите внимание, что отсутствует x

Это мой контент на Linux Mint с ядром 3.8.0-35-generic

root:x:0:0:root:/root:/bin/zsh

В xозначает , что текущая информация пароль хранится в отдельном файле теневых паролей, Tipically/etc/shadow

https://en.wikipedia.org/wiki/Passwd

Хайме Агудо
источник
6

Я бы порекомендовал проверить разрешения на /etc/passwdи /etc/group. Если они не установлены на 644 ( -rw-r--r--), тогда выполните:

chmod 644 /etc/passwd; chmod 644 /etc/group

Nate
источник
все еще говорит, что не может найти имя для идентификатора пользователя 0
gabemai
6

просто скажи мой опыт

0. проблема

на сломанном устройстве:

cat /etc/passwd
root:x:0:0:root:/root:/bin/bash

а также

whoami
whoami: cannot find name for user ID 0

на обычном устройстве:

whoami
root

1. исследование

попытаться найти причину:

strace whoami 2>&1 | grep -E '/etc|/lib'
...
open("/lib/arm-linux-gnueabi/libnss_compat.so.2", O_RDONLY) = 3
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
open("/lib/arm-linux-gnueabi/libnsl.so.1", O_RDONLY) = 3
open("/etc/ld.so.cache", O_RDONLY)      = 3
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
open("/lib/arm-linux-gnueabi/libnss_nis.so.2", O_RDONLY) = 3
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
open("/lib/arm-linux-gnueabi/libnss_files.so.2", O_RDONLY) = 3
open("/etc/passwd", O_RDONLY|O_CLOEXEC) = 3

нашел это нужно тем * .so:

/lib/arm-linux-gnueabi/libnss_compat.so.2
/lib/arm-linux-gnueabi/libnsl.so.1
/lib/arm-linux-gnueabi/libnss_nis.so.2
/lib/arm-linux-gnueabi/libnss_files.so.2

// все из libc6пакета, я работаю с устройством arm linux.

2. разрешение

я копирую их на сломанное устройство, затем whoamiработал правильно,

и bash подсказка I have no name!@localhostисправлена.

yurenchen
источник
1

Убедитесь, что каждая строка /etc/passwdсодержит ровно семь полей.

Flup
источник
0

Я знаю, что это вовремя, но причина может быть coreutilsскомпилирована без поддержки ACL. Проверьте это и пересоберите пакет, если необходимо.

Александр Жак
источник