Я использую настольную систему Ubuntu 12.04. Пока я установил только некоторые программы (у меня есть права sudo).
Когда я проверяю список пользователей в системе, я вижу длинный список, например, более 20 пользователей - когда были созданы эти пользователи (например, daemon, sys, sync, games, pulse и т. Д.)? Как они связаны с установкой новых программ?
Если я запускаю программу в моей системе, она должна запускаться с моим UID. Но при выполнении ps я вижу много других программ, работающих с разными UID (например, root, daemon, avahi, syslog, colord и т. Д.) - как эти программы запускались с разными UID?
Ответы:
Учетные записи пользователей используются не только для реальных пользователей, но и для запуска системных служб, а иногда и в качестве владельцев системных файлов. Это сделано потому, что разделение между ресурсами пользователей (процессами, файлами и т. Д.) И разделением ресурсов системных сервисов требует одинаковых механизмов.
Программы, которые вы запускаете, обычно работают с вашим идентификатором пользователя. Это только системные демоны, которые работают под своей учетной записью. Либо файл конфигурации, в котором указывается, когда следует запускать демон, также указывает, какой пользователь должен его запустить, либо после запуска демон переключается на непривилегированную учетную запись. Некоторые демоны требуют полных прав администратора, поэтому они запускаются под учетной записью root . Многим демонам нужен только доступ к определенному аппаратному устройству или к определенным файлам, поэтому они работают под выделенной учетной записью пользователя. Это сделано для безопасности: таким образом, даже если в одном из этих сервисов есть ошибка или неправильная конфигурация, это не может привести к полной системной атаке, потому что злоумышленник будет ограничен тем, что может сделать этот сервис, и не будет возможность перезаписывать файлы, следить за процессами и т. д.
Под Ubuntu идентификаторы пользователей в диапазоне 0–99 создаются при установке системы. 0 является корнем; многие из них в диапазоне 1–99 существуют только по историческим причинам и сохраняются только для обратной совместимости с некоторыми локальными установками, которые их используют (несколько дополнительных записей не повредит). Идентификаторы пользователей в диапазоне 100–999 создаются и удаляются динамически, когда устанавливаются или удаляются службы, которым требуется выделенный идентификатор пользователя. Диапазон от 1000 лет предназначен для пользователей или любой другой учетной записи, созданной системным администратором. То же самое касается групп.
источник
Я полагаю, вы нашли этот список пользователей, проверив
/etc/passwd
? Это совершенно нормально - «пользователи» служат для переноса набора разрешений, что полезно для блокировки не только «реальных пользователей», но и программ для определенных областей вашей системы и отслеживания того, что они изменили (та же концепция с группами).Я вставил один из моих
/etc/passwd
файлов Raspberry Pi ниже для вашей справки; вы увидите пользователяntop
внизу этого файла, созданного программойntop
(мониторинг сети). Точно так жеsshd
,gnats
сообщение об ошибке и т. Д.источник
dpkg --get-selections | grep -v deinstall
и сравнить с вашим списком пользователей / etc / passwd, если хотите. Что касается вашего вопроса: «... как эти программы работают с diff UID», вы можете попробовать это сами. Напишите случайный скрипт bash,test_file
который содержит что-то безобидное (echo "Test"
). Затемsudo chmod 755 test_file
(так что он может быть прочитан и выполним любым пользователем и доступен для чтения, записи и выполнения владельцем), а затемsudo chown nobody
назначит его пользователюnobody
. Тогда запустите это. «Программа»test_file
только что запустилась с UIDnobody
.nobody
UID, но работал с вашим UID; для этого вам нужно сделать это SUID-файлом, но бит SUID сбрасывается, если файл запускается с помощью интерпретатора.dpkg
бит все еще полезен (надеюсь), пожалуйста, не обращайте внимания на то, как запустить его от себя! Либо перейдите с SUID, либо войдите в систему под другим именем, чтобы это имело смыслВ тех случаях, которые вы упомянули, они были созданы при установке системы. Эти учетные записи являются обычными, некоторые датируются десятилетиями. Они также стандартизированы. Стандартная база Linux делит их на:
root
,bin
, иdaemon
; иadm
,lp
,sync
,shutdown
,halt
,mail
,news
,uucp
,operator
,man
, иnobody
Другие учетные записи пользователей, которые упоминаются здесь -
pulse
,avahi
,colord
, иDebian-exim
(выбрать один из файла паролей py4on в) - привести нас к следующему вопросу.Нестандартные учетные записи пользователей создаются и уничтожаются «сценариями сопровождающего» для различных пакетов по мере их установки и очистки. Учетная запись пользователя будет создана с помощью так называемого
postinst
сценария сопровождающего пакета , который запускается,getent
чтобы увидеть, существует ли учетная запись пользователя, иuseradd
если нет. Теоретически он будет удаленpostrm
запущенным так называемым сопровождающим скриптом пакетаuserdel
.На практике учетные записи пользователей для пакетов не удаляются. Вики Fedora (см.) Объясняет, что это будет сопряжено с трудностями. См. Ошибку Debian # 646175 для примера такого обоснования в действии, где принято решение просто не удалять
rabbitmq
учетную запись пользователя при очистке пакета, чтобы решить проблему с демоном, который продолжает работать под эгидой этой учетной записи.В Unix и Linux процесс, работающий под эгидой суперпользователя, может изменить свою учетную запись пользователя на что-то другое и продолжить выполнение той же программы, но обратное не допускается. (Нужно использовать механизм set-UID.)
Система управления демоном работает как суперпользователь. Его данные конфигурации указывают, что определенные демоны работают под эгидой определенных учетных записей пользователей:
rc
сценарий/etc/init.d
использует вспомогательный инструмент, такой какstart-stop-daemon
и его--chuid
опция.run
сценарий вызываетsetuidgid
,s6-setuidgid
,chpst
илиrunuid
с именем учетной записи пользователя. В /unix//a/179798/5132 есть примеры этого, которые устанавливаютnagios
учетную запись пользователя.setuid
в файле задания есть строфа, в которой указана учетная запись пользователя. Это не очень мелкозернистое, и иногда хочется того, что описано на /superuser//a/723333/38062 .User=
в файле сервисной единицы есть настройка, определяющая учетную запись пользователя.Когда система управления демоном порождает процесс, чтобы стать демоном, эти механизмы отбрасывают привилегии суперпользователя, так что процесс демона продолжает выполняться под эгидой непривилегированной учетной записи пользователя.
Есть довольно длинное объяснение, почему хорошее управление демонами осуществляется именно так. Но ты не спросил почему; только когда, как и откуда. ☺ Поэтому очень краткое описание:
Операционные системы Unix и Linux изолируют процессы, выполняемые под эгидой разных учетных записей друг от друга. Исторически сложилось так, что если кто-то мог захватить демона, который был суперпользователем, он мог делать все, что ему нравилось. С другой стороны, демон, работающий под эгидой непривилегированной учетной записи, может получать доступ только к файлам, каталогам, устройствам и процессам, доступным для этой непривилегированной учетной записи. Систему взаимных недоверчивых программ-демонов, работающих под эгидой разных учетных записей пользователей и неспособных получить доступ / контролировать внутренние (доверенные) файлы / каталоги / процессы / устройства друг друга, следовательно, взломать намного сложнее.
дальнейшее чтение
источник
В Linux, когда мы устанавливаем службу, она создает пользователя с именем службы или схожим с ним именем, чтобы не иметь доступа к другим файлам.
источник