Почему новый пользователь унаследовал файлы от удаленного пользователя?


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.

Поэтому по умолчанию в файле паролей будет использоваться наименьший неиспользованный uid, который больше других пользователей. Видя, что удаление sbaxter удаляет его из файла passwd, его uid является «свободным» и назначается mjane (так как useraddвыбор uid одинаков для обоих пользователей во время использования useraddкоманды).

Файлы на диске хранят только uid, а НЕ перевод имени пользователя (так как этот перевод определен в файле паролей). Вы можете подтвердить это, выполнив команду, ls -lnчтобы узнать, какие файлы принадлежат uid.

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


2
... это похоже на ужасный недостаток безопасности. Есть ли способ обойти это?
BlueRaja - Дэнни Пфлюгофт

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

2
@OlivierDulac Это называется резервной копией. Либо заблокируйте, но не удаляйте учетную запись до тех пор, пока вам необходимо сохранить ее данные. Ведь если вам нужно сохранить данные, то учетная запись все же нужна.
Жиль "ТАК - перестать быть злым"

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

5
По нынешним меркам это недостаток безопасности. Как показывает пример, это означает, что вы не можете связывать людей с файлами. Конечно, люди могут быть тесно связаны с учетными записями, но файл ассоциации <-> account <-> не работает из-за повторного использования UID. С другой стороны, Unix никогда не имел большой безопасности в этом отношении ( rootмог подделать почти все). Для этого вам нужны контрольные записи.
MSalters

13

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

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