Я удалил файл «/ etc / passwd» и не могу войти

22

Я пытался изменить свое имя пользователя, а также домашний каталог ( /home/username), и моя система начала падать. Я удалил passwdфайл, но у меня была резервная копия passwd_bkp. Я попытался переименовать это passwd_bkpкак, passwdи это не сработало. Никакие команды не выполнялись ... Я был в окне терминала.

Я перезапустил свою систему и теперь не могу войти в систему. GRUB предлагает две опции: Linux и режим восстановления.

Я пытался открыть сеанс как root, но он говорит, что файловая система повреждена. Я не могу получить доступ к своим файлам.

Я потерял все мои файлы?

Жоао Родриго Лео
источник
1
На следующий вопрос: замените пароль, используя метод восстановления. Смотрите: askubuntu.com/questions/24006/…
david6
1
@ david6 Когда пользователь не может войти в систему из-за отсутствия /etc/passwdфайла , также невозможно восстановить пароль. Вы должны восстановить (или воссоздать) passwdфайл. И как только это будет сделано, как правило, нет необходимости сбрасывать пароль.
Элия ​​Каган
@Eliah Kagan: Согласен, но я отвечал на дополнительный вопрос после того, как / etc / passwd был (предположительно) восстановлен из резервной копии.
Давид6
Вам нужно будет более конкретно об ошибке.
psusi

Ответы:

32

Нет, учитывая ваше описание, вы не потеряли ни один из ваших файлов (кроме тех /etc/passwd, которые вы удалили, но которые вы создали резервную копию).

Загрузите Ubuntu Live CD / DVD или USB флэш-накопитель. Выберите Try Ubuntu(не Install Ubuntu). Когда загрузится рабочий стол, откройте окно Nautilus (файловый браузер). Вы можете найти раздел для вашей системы Ubuntu в разделе Devices. Нажмите на него, чтобы установить его.

Теперь вы можете восстановить резервную копию. Вы должны сделать это как корень, однако. Вот один довольно простой способ сделать это.

  1. Откройте окно терминала ( Ctrl+ Alt+ T). В Терминале введите cdи введите Spaceключ, но пока не нажимайте Enter.

  2. В Nautilus найдите etcкаталог внутри установленной системы Ubuntu. (Это не то же самое, что etcкаталог для live CD. etcКаталог внутри установленной системы Ubuntu находится в только что смонтированном разделе.)

  3. Перетащите этот etcкаталог в Терминал, который вставит его полный путь в Терминал, выполнив cd ...команду.

  4. Нажмите Enterдля запуска команды. Теперь вы находитесь в каталоге, в котором содержится ваш passwdфайл. Я предполагаю, что ваш файл резервной копии passwd_bkp, также находится здесь.

  5. Запустите эту команду:

    sudo cp passwd_bkp passwd
    

Это восстановит passwdфайл из вашей резервной копии, так что теперь вы сможете перезагрузить компьютер, вынуть CD / DVD или USB-флеш-накопитель и снова загрузиться в установленную систему Ubuntu. Ваша установленная система Ubuntu должна снова работать.


В будущем, вы должны знать , что не рекомендуется редактировать вручную /etc/passwd, /etc/group, /etc/shadow, или /etc/gshadow. Вместо этого вы должны использовать утилиты, предоставляемые как часть Ubuntu, чтобы вносить любые необходимые изменения в пользователей и группы в вашей системе. Вы, вероятно, знаете, что вы можете изменить это в Системных настройках или с помощью users-admin. Но для этого есть также очень мощные утилиты командной строки, которые намного безопаснее и проще, чем сами редактировать файлы конфигурации вручную. Вот документация по наиболее актуальным подобным утилитам в Ubuntu:

  • adduser / addgroup
  • deluser / delgroup
  • usermod
  • groupmod
  • useradd(более низкий уровень, чем adduserобычно следует использовать adduserвместо)
  • userdel(более низкий уровень, чем deluserобычно следует использовать deluserвместо)
  • groupadd(более низкий уровень, чем addgroupобычно следует использовать addgroupвместо)
  • groupdel(более низкий уровень, чем delgroupобычно следует использовать delgroupвместо)
  • passwd
  • gpasswd
  • pwck
  • grpck

Вы можете изменить свое имя пользователя с помощью некоторых из этих утилит. Этот ответ объясняет один способ в деталях. Однако вы должны знать (как в настоящее время затрагивается комментарием там), что некоторые приложения предполагают, что ваше имя пользователя остается прежним. Таким образом, изменение вашего имени пользователя может вызвать некоторые проблемы.

Элия ​​Каган
источник
Огромное спасибо. Здесь, на юге Бразилии, четыре часа утра ... Я так волновалась, что не могла уснуть. Я попробую это ...
Жоао Родриго Лео
2
Если вы не сделали резервную копию, попробуйте использовать /etc/passwd-или /var/backups/passwd.bak. Обязательно установите правильные разрешения. Пример:sudo install -m644 /etc/passwd- /etc/passwd
Лекенштейн
4

В качестве альтернативы загрузке livecd вы можете нажать eв меню grub, чтобы отредактировать запись режима восстановления и добавить init=/bin/shк аргументам ядра. Это перенесет вас прямо в корневую оболочку, где вы сможете скопировать файл резервной копии обратно в оригинал после перемонтирования файловой системы с возможностью чтения-записи mount -o remount,rw /.

psusi
источник
1
Вы уверены, что это сработает? Без /etc/passwd, нет пользователь называется корнем, и ни один пользователь с UID = 0 . Будут ли необходимые утилиты работать в таких необычных условиях?
Элия ​​Каган
1
@EliahKagan, всегда есть пользователь с uid = 0, так как это тот uid, с которого ядро ​​запускает первый процесс. cpили mvне нужно / etc / passwd.
псуси
это спасло мою тупую задницу! я вручную редактирую / etc / shadow в отношении crontab. Я не знал, что никто не связывается с 'shadow' .... Я думал, что я был f ** ckd, но слава богу за @psusi .... Я редактировал меню grub для восстановления добавил / bin / sh, как он сказал , последовал за своим монтированием и просто скопировал shawdow из / var / backups поверх поврежденного в / etc ... Хорошо, как новый .. спасибо
rowntreerob
2

Прежде чем продолжать читать этот ответ, вы должны прочитать ответ Элии Кагана. Он объясняет, как справиться с ситуацией и почему обычно нет необходимости изменять / etc / passwd вручную.

В любом случае, если вы действительно знаете, что делаете, и вам нужно отредактировать /etc/passwdвручную , вы можете это сделать, но вам все равно не следует просто изменять файлы с помощью вашего любимого редактора. Вместо этого есть инструмент

vipw

Из справочных страниц:

The vipw and vigr commands edits the files /etc/passwd and /etc/group,
respectively. With the -s flag, they will edit the shadow versions of those
files, /etc/shadow and /etc/gshadow, respectively. The programs will set
the appropriate locks to prevent file corruption.

Например, если вы хотите изменить UID пользователя, насколько я знаю, редактировать файлы вручную, это единственный способ. Кроме того, если вы хотите изменить пароль пользователя, а затем вернуться к его предыдущему, не зная его, нет никакого способа с usermodили около того. Но если вы сохраните хешированный пароль из теневого файла, то измените пароль пользователя, который впоследствии сможете добавить хешированный пароль, снова редактируя теневой файл vipw -s.

lumbric
источник
1

После ответа @ EliahKagan я не смог войти в систему, lightdmи моя учетная запись не была указана. Я обнаружил, что разрешение passwdфайла не было правильно настроено; пользователь lightdm не имел к нему доступа. Вот как я это исправил:

Войти на терминал Ctrl+ Alt+F1

перейти в /etcкаталог

cd /etc

Затем измените разрешения на 644

sudo chmod 644 passwd

Тогда делай ls -la

строка разрешения должна выглядеть следующим образом

-rw-r--r--
danidee
источник
-1

Если вы можете войти, просто откройте терминал и попробуйте это:

sudo cp /etc/passwd- /etc/passwd
sudo chmod 644 /etc/passwd

еще

Загрузитесь в режиме восстановления или из Ubuntu Live Cd. Затем установите ваш старый диск:

mkdir /olddrive
mount /dev/hda5 /olddrive
assuming that your old drive is on /dev/hda5.
then, cd to /olddrive/etc
type:
echo "root::0:0:Superuser:/:/bin/bash" > passwd

затем перезагрузите компьютер. Это не установит пароль для root.

Затем вы можете войти, создать все свои учетные записи снова и т. Д.

Вы также можете использовать резервную копию, которая называется (я думаю) /etc/passwd-

Изменить : (еще один метод, который я не пробовал раньше, но я думаю, что он также должен работать)

  • Запустите GRUB при загрузке (нажмите Escво время загрузки)
  • Нажмите eна (режим восстановления)
  • Нажмите eна строку, начинающуюся с ядра
  • Нажмите Spaceи введитеinit=/bin/bash
  • Нажмите Enter
  • Нажмите b
  • В командной строке введите: cp /etc/passwd- /etc/passwd
  • Перезагрузитесь в GRUB снова
  • Нажмите eна (режим восстановления)
  • Нажмите eна строку, начинающуюся с ядра
  • Нажмите Spaceи введитеinit=/bin/bash
  • Нажмите Enter
  • Нажмите b
  • В командной строке введите mount -o remount,rw /
  • Тип passwd YOURUSERNAMEHERE(если вы не знаете свой тип имени пользователя ls /home(то есть строчные буквы L и строчные S) для списка пользователей)
  • Введите новый пароль по запросу
  • Перезагрузитесь для нормальной загрузки.

Источник

Maythux
источник