Intereting Posts
Можно ли привязать определенные приложения к рабочему пространству в Unity? Сценарий Bash не выполняется из crontab Как разделить Wifi через Ethernet-кабель на windows pc? Как свернуть все окна в Ubuntu 12.10? После синхронизации музыка все еще не может быть установлена ​​на устройстве iOS 5, исправить? Является ли ядро ​​безопасным для использования? Ошибка конкатенации пути каталога в сценарии bash Невозможно использовать apt: libstdc ++. So.6: version `GLIBCXX_3.4.20 'не найден Подключение к Интернету с использованием TataPhoton 3G-ключа (ZTE MF190) Ubuntu 12.04 Сенсорная панель Acer V3-771 обнаружена как ps / 2 универсальная мышь Неужели Ubuntu и Gnome дрейфуют из-за Unity? Ошибка при попытке открыть контейнер VeraCrypt, veracrypt :: process :: выполнить: 108 Какая фактическая разница между обновлением пакета и обновлениями безопасности? Звуковое устройство ввода (микрофон) не работает Объединение 2 файлов на основе одного столбца

Почему я могу создать пользователей с тем же UID?

Мое понимание UID – это уникальное положительное целое число, назначенное Unix-подобной операционной системой для каждого пользователя. Каждый пользователь идентифицируется системой по его UID, а имена пользователей обычно используются только как интерфейс для людей.

Как два пользователя могут иметь одинаковый UID, разве это не конфликт для моей системы и пакетов?

root@kdc:~# id test12 uid=1005(test10) gid=1000(server) groups=1005(test10) root@kdc:~# id test13 uid=1005(test10) gid=1000(server) groups=1005(test10) root@kdc:~# 

Я добавил двух пользователей с одинаковыми UID и GID: test12 и test13

Выходной файл /etc/passwd :

 client@kdc:~$ cat /etc/passwd | grep test12 test12:x:1005:1000::/home/test12:/bin/sh client@kdc:~$ cat /etc/passwd | grep test13 test13:x:1005:1000::/home/test13:/bin/sh 

Я добавил пользователей по useradd -ou 1005 -g1000 username.

Я запутался в том, что является целью этого, и может ли он повлиять на разрешения и журналы пользователей и т. Д. Итак, теперь, если пользователь добавлен с uid=0 а gid=0 имеет привилегии, такие как учетная запись root?

Ответ здесь заключается в том, что Linux не защищает вас от вас самих.

Если вы действительно хотите su root и зайти в / etc файлы и дать всем пользователям тот же UID, вы можете. Это всего лишь текстовый файл.

Но вы действительно не должны этого делать, и это будет иметь непреднамеренные последствия.

На самом деле есть веские причины для этого. Например, я работал в лаборатории, где у каждого из нас был наш собственный компьютер, но наш $HOME находился в общем диске, экспортированном сервером. Итак, мой $HOME был

 /users/terdon 

Поскольку папка /users самом деле не была на моем локальном компьютере, но экспортирована через NFS, для любого анализа, который был тяжелым для ввода-вывода, я использовал бы данные, хранящиеся на локальных жестких дисках, чтобы не обременять сеть лаборатории. Для этого у меня и всех остальных было два пользователя: один из них был общесистемным и один был локальным для рассматриваемой машины. Дом местного пользователя был

 /home/localuser 

Тем не менее, мне нужно было иметь полный доступ к моим файлам, был ли я зарегистрирован как terdon или как localuser и как наш sysadmin реализовал это, предоставляя как localuser и terdon одинаковый UID. Таким образом, я мог свободно манипулировать локальными файлами, независимо от того, какой пользователь я в настоящий момент зарегистрировал.

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

Unix-системы и Linux вообще ничего не делают, чтобы запрещать дубликаты в /etc/passwd . Цель этого файла – связать UID с физическим именем, которое может отображаться с помощью инструментов командной строки, таких как ls когда пользователь выводит файлы.

 $ ls -n | head -5 total 986000 drwxrwxr-x. 3 1000 1000 4096 Feb 13 19:51 1_archive_sansa -rw-rw-r--. 1 1000 1000 760868 Dec 16 08:21 2.18.x Database Scheme.jpg -rw-rw-r--. 1 1000 1000 972 Oct 6 20:26 abcdefg drwxrwxr-x. 2 1000 1000 4096 Feb 11 03:34 advanced_linux_programming 

Другая цель этого файла – указать, какую оболочку пользователь получит при входе в систему.

 $ getent passwd saml saml:x:1000:1000:saml:/home/saml:/bin/bash 

Общим вектором атаки в системах типа Unix является добавление таких строк в файл /etc/passwd :

 $ getent passwd r00t r00t:x:0:0:root:/root:/bin/bash $ getent passwd toor toor:x:0:0:root:/root:/bin/bash 

Роль файла /etc/passwd НЕ предназначена исключительно для отслеживания учетных записей пользователей. Роль отслеживания имени пользователя и паролей лежит на /etc/shadow . Файлы, такие как /etc/passwd и /etc/group , действительно предназначены для предоставления читаемого человеком имени, когда ваша система перечисляет файлы с дисков.

Помните, что ваши файлы записываются на диск с использованием неидентичных имен UID / GID.

 $ stat afile File: 'afile' Size: 0 Blocks: 0 IO Block: 4096 regular empty file Device: fd02h/64770d Inode: 6560621 Links: 1 Access: (0664/-rw-rw-r--) Uid: ( 1000/ saml) Gid: ( 1000/ saml) Context: unconfined_u:object_r:user_home_t:s0 Access: 2014-02-27 15:54:21.852697029 -0500 Modify: 2014-02-27 15:54:21.852697029 -0500 Change: 2014-02-27 15:54:21.852697029 -0500 Birth: - 

Обратите внимание на Uid: и Uid: цифры – это то, что на самом деле записано на диск!

На самом деле довольно распространено иметь двух пользователей с одинаковым идентификатором. На FreeBSD обычно есть два пользователя с UID 0: root и toor. Root использует встроенную / bin / sh оболочку, а toor использует другую оболочку, обычно bash.

В Linux все пользователи и группы на самом деле просто цифры. Вот что показывает вывод команды id вы опубликовали.

Файл /etc/passwd сопоставляет имена пользователей с идентификаторами пользователей (номерами) и в примере, который вы предоставили, вы просто сопоставили два имени пользователя с одним и тем же идентификатором пользователя.

Фактически, вы создали одного пользователя, test12 , ID 1005, у которого также есть второе имя пользователя test13 . Однако система отобразит UID 1005 на первое имя пользователя, которое будет test12 , что будет test12

Linux «позволяет» делать это, потому что нет системы, которая бы мешала вам это делать. /etc/passwd – это просто текстовый файл, имена пользователей сопоставляются с UID, найденным для их записи в этом файле, UID сопоставляются с первым именем пользователя, найденным в этом файле.

Но то, что вы создали, представляет собой запутанную ситуацию для других администраторов systams; избегайте этого путем изменения UID test13

Причина, по которой это разрешено сегодня, – это просто потому, что система не мешает ей.

Если бы это изменилось, это нарушило бы те системы, в которых администраторы использовали эту функцию (см. Пример Тердона). Поэтому он никогда не менялся, и я не думаю, что это когда-либо будет.

Первоначально были только файлы passwd и group, и они служили своей цели. не было никакой команды adduser , никакой addgroup , файлы были отредактированы root с помощью vi или ed.

Было несколько причуд!

Чтобы запомнить следующий идентификатор пользователя, для админов было обычным для пользователя, как последняя строка с именем пользователя ! (потому что ! было недопустимым именем пользователя), и эта запись использовалась для хранения следующего идентификатора пользователя. Грубо, признаюсь, но это сработало! Так почему же перебор кисти усложняет ситуацию, сродни быстрому развитию.

Были известные недостатки. Главное, что он должен быть читаемым в мире, так что утилиты вроде ls могли бы сопоставить имя user-id => name . Это означало, что кто-то мог видеть зашифрованный пароль всех, а также всех пользователей и идентификаторов в системе.

Некоторые Unix-системы начали вводить пару оболочечных скриптов adduser addgroup , часто они игнорировались, потому что они были несовместимы между Unix, поэтому большинство людей просто продолжало ручное редактирование.

Прошло немало лет, прежде чем был создан файл shadow пароля, это обеспечило немного большую безопасность, скрыв зашифрованные пароли. Опять же, была добавлена ​​достаточно сложная сложность, но она все еще была довольно грубой и простой. Были введены утилиты useradd и groupadd , которые сохраняли shadow и shadow обновление. Начнем с того, что это были простые оболочки оболочки оболочки вокруг собственных утилит adduser / addgroup . Снова этого было достаточно, чтобы продолжать идти.

Сети компьютеров росли, люди работали по несколько за раз, чтобы получить работу, поэтому администратор файлов passwd/group стал кошмаром, особенно с NFS, поэтому в «Желтые страницы» также называются NIS для облегчения бремени ,

Уже стало очевидным, что требуется нечто более гибкое, и PAM был изобретен. Поэтому, если вы были действительно сложны и хотели иметь централизованную, безопасную, уникальную систему идентификации и проверки подлинности всех колоколов и свистов, вы могли бы обратиться к центральному серверу для аутентификации, возможно, к серверу Radius, LDAP-серверу или Active Directory.

Мир вырос. Но файлы passwd / group / shadow по-прежнему оставались для нас меньшими пользователями / разработчиками / лабораториями. Мы все еще не требовали всех колоколов и свистов. Я предполагаю, что философия изменилась к настоящему времени: «Если вы собираетесь сделать это лучше, вы не будете использовать ее вообще» , так что не беспокойтесь об этом.

Вот почему я не думаю, что простой файл passwd будет когда-либо изменяться. Там больше нет смысла, и это просто отлично подходит для тех 30 фунтов малины Pi с 2, может быть, 3 пользовательской температурой мониторинга и твиттер-фидами. Хорошо, вам просто нужно быть немного осторожным с вашим идентификатором пользователя, если вы хотите, чтобы они были уникальными, и нет ничего, что помешало бы энтузиасту обернуть useradd в сценарий, который сначала выбирает следующий уникальный идентификатор из базы данных (файла), чтобы установить уникальный идентификатор, если это то, что вы хотите. Это открытый источник.

Есть идентификаторы, которые операционная система ожидает быть уникальной, но они используются для отслеживания оборудования. Знание того, что конкретный универсально уникальный идентификатор соответствует жесткому диску, содержащему системные файлы, может помочь ему продолжить работу, если изменяется аппаратная конфигурация. Microsoft называет эти глобально уникальные идентификаторы и использует их для отслеживания всего программного обеспечения Windows. Как ни странно, эти акронимы были плохо выбраны.

С точки зрения ОС большинство изменений идентификатора пользователя и группы сводятся к изменению внешнего интерфейса. Он мог нормально функционировать, несмотря на столкновения; в основном, то, что требуется пользователям и группам системы, заключается в том, что они существуют. Он не может знать, чего требуют пользователи. В таких ситуациях философия Unix заключается в том, что ОС должна предполагать, что администраторы знают, что они делают, и должны помочь им сделать это быстро.

Файл /etc/passwd просто сопоставляет символические имена пользователей с реальным идентификатором пользователя. Если вы намеренно создаете два символических имени, которые сопоставляются с одним идентификатором пользователя, это позволит вам.

Это не значит, что это действительно хорошая идея. Некоторые люди, возможно, нашли очень конкретные случаи использования, когда они могут воспользоваться этой функцией, но в целом вы не должны этого делать.

Linux (и другие UNIX) считают, что администратор знает, что они делают. Если вы скажете ему сделать что-то глупое, то это ваша собственная ошибка, во многом так же, как если бы вы сказали своему автомобилю ехать по скале, вы не можете пойти к производителям и спросить, почему автомобиль разрешил вам это сделать.