Я видалив файл "/ 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 (нібито) було відновлено із резервної копії.
david6

Вам потрібно буде бути більш конкретним щодо помилки.
psusi

Відповіді:


32

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

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

Тепер ви можете відновити резервну копію. Однак це потрібно робити як корінь. Ось один досить простий спосіб зробити це.

  1. Відкрийте вікно терміналу ( Ctrl+ Alt+ T). У Терміналі введіть cdі введіть Spaceклавішу, але ще не натискайте Enter.

  2. У Nautilus знайдіть etcкаталог всередині встановленої системи Ubuntu. (Це не те саме, що etcкаталог для живого компакт-диска. 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

Ви можете змінити своє ім'я користувача за допомогою деяких з цих утиліт. Ця відповідь детально пояснює один спосіб. Однак, ви повинні знати (як це зараз зачіпається коментарем), що деякі програми передбачають, що ваше ім’я користувача залишається незмінним. Тож зміна вашого імені користувача може спричинити деякі проблеми.


Дуже дякую. Годинник на чотири години ранку тут, на півдні Бразилії ... Я був настільки стурбований, що не міг спати. Я спробую це ...
joao rodrigo leao

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 /.


1
Ви впевнені, що це спрацює? Без /etc/passwd, немає користувач називається коренем, і ні один користувач з UID = 0 . Чи обов'язково комунальні служби обов'язково працюватимуть у тих незвичних умовах?
Елія Каган

1
@EliahKagan, завжди є користувач з uid = 0, оскільки це uid, з якого ядро ​​починає перший процес. cpабо mvне потрібно / etc / passwd.
psusi

це врятувало мою тупу дупу! я вручну редагую на / etc / shadow щодо речей crontab. Я не знав, що ніхто не возиться з 'тінню' .... Я думав, що я f ** ckd, але дякую Богу за @psusi .... Я відредагував меню grub для відновлення, додав / bin / sh, як він сказав , слідкували за його монтуванням та щойно скопіювали тінь з / var / резервного копіювання над корумпованою в / 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.


1

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

Увійдіть на tty Ctrl+ Alt+F1

зміни в /etcкаталог

cd /etc

Потім змініть дозволи на 644

sudo chmod 644 passwd

Тоді робіть ls -la

рядок дозволу повинен виглядати приблизно так

-rw-r--r--

-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

потім перезавантажте. Це не встановить жодного 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) для списку користувачів)
  • Введіть новий пароль під час запиту
  • Перезавантажте звичайне завантаження.

Джерело

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.