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


8

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

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

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

root::0:0:root:/root:/bin/bash

Ваш / 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


все еще говорит, что не может найти имя для идентификатора пользователя 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исправлена.


1

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


0

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.