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

13

Я использую настольную систему Ubuntu 12.04. Пока я установил только некоторые программы (у меня есть права sudo).

  1. Когда я проверяю список пользователей в системе, я вижу длинный список, например, более 20 пользователей - когда были созданы эти пользователи (например, daemon, sys, sync, games, pulse и т. Д.)? Как они связаны с установкой новых программ?

  2. Если я запускаю программу в моей системе, она должна запускаться с моим UID. Но при выполнении ps я вижу много других программ, работающих с разными UID (например, root, daemon, avahi, syslog, colord и т. Д.) - как эти программы запускались с разными UID?

Джейк
источник
3
Подумайте об этом по-другому: когда компьютер загружается впервые, вы еще не вошли в систему, и программы должны запускаться от имени кого-либо . Все они могут работать от имени пользователя root, но это небезопасно, поскольку большинство этих программ отвечают только за небольшую часть работы компьютера. После того, как вы вошли в систему, большинство программ, которые вы запускаете напрямую, будут работать как вы.
dimo414
В конце концов, это взломать. Широко используемый, но взломать все же. В дистрибутивах UNIX используется концепция «пользователя» для обхода старой и неполной модели безопасности.
Федерико Полони,

Ответы:

24

Учетные записи пользователей используются не только для реальных пользователей, но и для запуска системных служб, а иногда и в качестве владельцев системных файлов. Это сделано потому, что разделение между ресурсами пользователей (процессами, файлами и т. Д.) И разделением ресурсов системных сервисов требует одинаковых механизмов.

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

Под Ubuntu идентификаторы пользователей в диапазоне 0–99 создаются при установке системы. 0 является корнем; многие из них в диапазоне 1–99 существуют только по историческим причинам и сохраняются только для обратной совместимости с некоторыми локальными установками, которые их используют (несколько дополнительных записей не повредит). Идентификаторы пользователей в диапазоне 100–999 создаются и удаляются динамически, когда устанавливаются или удаляются службы, которым требуется выделенный идентификатор пользователя. Диапазон от 1000 лет предназначен для пользователей или любой другой учетной записи, созданной системным администратором. То же самое касается групп.

Жиль "ТАК - перестань быть злым"
источник
7

Я полагаю, вы нашли этот список пользователей, проверив /etc/passwd? Это совершенно нормально - «пользователи» служат для переноса набора разрешений, что полезно для блокировки не только «реальных пользователей», но и программ для определенных областей вашей системы и отслеживания того, что они изменили (та же концепция с группами).

Я вставил один из моих /etc/passwdфайлов Raspberry Pi ниже для вашей справки; вы увидите пользователя ntopвнизу этого файла, созданного программой ntop(мониторинг сети). Точно так же sshd, gnatsсообщение об ошибке и т. Д.

root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh
lp:x:7:7:lp:/var/spool/lpd:/bin/sh
mail:x:8:8:mail:/var/mail:/bin/sh
news:x:9:9:news:/var/spool/news:/bin/sh
uucp:x:10:10:uucp:/var/spool/uucp:/bin/sh
proxy:x:13:13:proxy:/bin:/bin/sh
www-data:x:33:33:www-data:/var/www:/bin/sh
backup:x:34:34:backup:/var/backups:/bin/sh
list:x:38:38:Mailing List Manager:/var/list:/bin/sh
irc:x:39:39:ircd:/var/run/ircd:/bin/sh
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/bin/sh
nobody:x:65534:65534:nobody:/nonexistent:/bin/sh
libuuid:x:100:101::/var/lib/libuuid:/bin/sh
pi:x:1000:1000:,,,:/home/pi:/bin/bash
sshd:x:101:65534::/var/run/sshd:/usr/sbin/nologin
ntp:x:102:104::/home/ntp:/bin/false
statd:x:103:65534::/var/lib/nfs:/bin/false
messagebus:x:104:106::/var/run/dbus:/bin/false
usbmux:x:105:46:usbmux daemon,,,:/home/usbmux:/bin/false
lightdm:x:106:109:Light Display Manager:/var/lib/lightdm:/bin/false
smmta:x:107:110:Mail Transfer Agent,,,:/var/lib/sendmail:/bin/false
smmsp:x:108:111:Mail Submission Program,,,:/var/lib/sendmail:/bin/false
Debian-exim:x:109:113::/var/spool/exim4:/bin/false
ntop:x:110:115::/var/lib/ntop:/bin/false
toxefa
источник
когда я устанавливаю новую программу в Ubuntu, создает ли она нового пользователя? Если нет, то почему так много программ работают с другим UID, чем у меня? Я имею в виду, как эти программы работают с diff UID?
Джейк
Вы можете запустить его 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только что запустилась с UID nobody.
Toxefa
2
@ py4on Не совсем ... он запускался из файла с nobodyUID, но работал с вашим UID; для этого вам нужно сделать это SUID-файлом, но бит SUID сбрасывается, если файл запускается с помощью интерпретатора.
Riking
Хорошо, поскольку я не могу отредактировать свой комментарий выше, но этот dpkgбит все еще полезен (надеюсь), пожалуйста, не обращайте внимания на то, как запустить его от себя! Либо перейдите с SUID, либо войдите в систему под другим именем, чтобы это имело смысл
toxefa
3

Когда были созданы эти пользователи?

В тех случаях, которые вы упомянули, они были созданы при установке системы. Эти учетные записи являются обычными, некоторые датируются десятилетиями. Они также стандартизированы. Стандартная база 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учетную запись пользователя при очистке пакета, чтобы решить проблему с демоном, который продолжает работать под эгидой этой учетной записи.

Как эти программы запускались с разными UID?

В Unix и Linux процесс, работающий под эгидой суперпользователя, может изменить свою учетную запись пользователя на что-то другое и продолжить выполнение той же программы, но обратное не допускается. (Нужно использовать механизм set-UID.)

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

  • В System 5 rcсценарий /etc/init.dиспользует вспомогательный инструмент, такой как start-stop-daemonи его --chuidопция.
  • С менеджером службы Daemontools семьи, runсценарий вызывает setuidgid, s6-setuidgid, chpstили runuidс именем учетной записи пользователя. В /unix//a/179798/5132 есть примеры этого, которые устанавливают nagiosучетную запись пользователя.
  • С upstart setuidв файле задания есть строфа, в которой указана учетная запись пользователя. Это не очень мелкозернистое, и иногда хочется того, что описано на /superuser//a/723333/38062 .
  • При использовании systemd User=в файле сервисной единицы есть настройка, определяющая учетную запись пользователя.

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

Есть довольно длинное объяснение, почему хорошее управление демонами осуществляется именно так. Но ты не спросил почему; только когда, как и откуда. ☺ Поэтому очень краткое описание:

Операционные системы Unix и Linux изолируют процессы, выполняемые под эгидой разных учетных записей друг от друга. Исторически сложилось так, что если кто-то мог захватить демона, который был суперпользователем, он мог делать все, что ему нравилось. С другой стороны, демон, работающий под эгидой непривилегированной учетной записи, может получать доступ только к файлам, каталогам, устройствам и процессам, доступным для этой непривилегированной учетной записи. Систему взаимных недоверчивых программ-демонов, работающих под эгидой разных учетных записей пользователей и неспособных получить доступ / контролировать внутренние (доверенные) файлы / каталоги / процессы / устройства друг друга, следовательно, взломать намного сложнее.

дальнейшее чтение

JdeBP
источник
1

В Linux, когда мы устанавливаем службу, она создает пользователя с именем службы или схожим с ним именем, чтобы не иметь доступа к другим файлам.

PRS
источник
1
Это соглашение, но вовсе не обязательно и, конечно, не универсально. На самом деле, это на самом деле не что общее больше ...
HalosGhost
1
@HalosGhost А? Нет, это очень распространенное соглашение, все еще сильное. Этот ответ неполный, но совершенно правильный.
Жиль "ТАК - перестань быть злым"
1
@ Жиль, я не говорил (и даже не подразумевал), что это неправильно. Но это в основном устарело. В наши дни огромная часть сервисов (с появлением systemd) - это просто сервисные файлы. Нельзя сказать, что учетные записи пользователей для каждой службы больше не существуют; они определенно делают. Но, например, во всей моей системе всего 24 учетных записи, где у меня гораздо больше услуг.
HalosGhost
@ Жиль У меня та же ситуация, что и у HalosGhost - больше услуг, чем аккаунтов. Значит ли это, что все они работают от имени пользователя root?
Ионикс