Чому новий користувач успадкував файли від видаленого користувача?


24

Тому мені довелося робити вправу в книзі як домашнє завдання. Спочатку вам довелося створити користувача, наприклад:

useradd -c "Steven Baxter" -s "/bin/sh" sbaxter

Тоді вам довелося додати кілька файлів до /home/sbaxterкаталогу:

touch /home/sbaxter/ some.txt new.txt files.txt

Тоді вам довелося видалити sbaxterкористувача та створити нового користувача на ім’я mjane. На мій подив, коли я біг find /home/ -user mjane, новий користувач mjaneтепер володів усіма старими файлами sbaxter, що сталося?

Відповіді:


41

Чорт знаходиться в деталях, на useraddсторінці людини (це ви можете побачити, видаючи man 8 useradd):

   -u, --uid UID
       The numerical value of the user's ID. This value must be unique,
       unless the -o option is used. The value must be non-negative. The
       default is to use the smallest ID value greater than or equal to
       UID_MIN and greater than every other user.

Таким чином, за замовчуванням у файлі паролів буде використовувати найменший невикористаний, тобто більше, ніж інші користувачі. Бачачи, що видалення sbaxter видалило його з файлу passwd, його uid є "вільним" і присвоюється mjane (оскільки useraddвибір uid однаковий для обох користувачів на момент використання useraddкоманди).

Файли на диску зберігають лише uid, а НЕ переклад імен користувача (оскільки цей переклад визначено у файлі паролів). Ви можете підтвердити це, видавши, ls -lnщоб побачити, якими є файли власності uid.

Я б фактично рекомендував вам відключити, а не видаляти облікові записи. Блокування облікових записів у більшості дистрибутивів Linux можна досягти за допомогою usermod -L -e today <username>блокування пароля та встановлення терміну дії облікового запису сьогодні (ви можете побачити дату закінчення терміну дії облікового запису chage -l).


2
... це здається жахливим недоліком безпеки. Чи є спосіб обійти це?
BlueRaja - Danny Pflughoeft

6
@ BlueRaja-DannyPflughoeft Це не вада безпеки: користувачів ідентифікують за ідентифікатором користувача, а не за ім'ям користувача. Видаляючи обліковий запис, ви повинні видалити всі його файли (тобто всі файли, що належать цьому ідентифікатору користувача, а не лише домашній каталог користувача). Це частина звичайної процедури видалення рахунку.
Жил "ТАК - перестань бути злим"

2
@OlivierDulac Це називається резервною копією. Крім того, заблокуйте, але не видаляйте обліковий запис, поки вам потрібно зберегти його дані. Зрештою, якщо вам потрібно зберегти дані, то обліковий запис все-таки потрібен.
Жил "SO- перестань бути злим"

1
Блокування облікових записів у більшості дистрибутивів Linux можна досягти за допомогою usermod -L -e today <username>блокування пароля та встановлення терміну дії облікового запису сьогодні (ви можете побачити дату закінчення терміну дії облікового запису chage -l).
Drav Sloan

5
Це - недолік безпеки, за сьогоднішніми мірками. Як показує приклад, це означає, що ви не можете асоціювати людей з файлами. Звичайно, люди можуть бути сильно пов’язані з обліковими записами, але файл асоціації людських <-> акаунтів <-> файл руйнується через переробку UID. Знову ж таки, Unix ніколи не мав великої безпеки в цьому відношенні ( rootміг підробити майже все). Для цього вам потрібні аудиторські сліди.
MSalters

13

UID видаленого користувача був повторно використаний новим користувачем, а файлові системи використовують UID для власності, а не імені користувача.

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