Присутствие системной учетной записи, такой как корень, sys, никто, мусорное ведро, демон, и т.д. не был темой многих проверок защиты, которыми я был через за эти годы, и это действительно сводится к нескольким вещам.
Да эти типы учетных записей могут быть дырами в системе безопасности, особенно если им включили оболочку:
Плохо
bin:x:1:1:bin:/bin:/bin/sh
Хороший
bin:x:1:1:bin:/bin:/sbin/nologin
При конфигурировании с /sbin/nologin
или иногда /bin/false
эти учетные записи отключены от того, чтобы быть вошедшимся, но они могут все еще владеть процессами. Они могут также владеть файлами также.
Давайте возьмем принадлежность файла сначала, так как это - более легкие из 2.
Наличие этих записей в /etc/passwd
и /etc/group
относительно принадлежности файла представляет нулевой риск. В этой способности их присутствие делает вывод инструментов как ls
отобразите это:
с записью в/etc/passwd
$ ls -l woof
-rwxrwxr-x 1 saml saml 20284 May 31 2012 woof
без записи в/etc/passwd
$ ls -n woof
-rwxrwxr-x 1 500 501 20284 May 31 2012 woof
Таким образом с этой точки зрения более хорошо для администратора смочь видеть имена владельцев по сравнению с UID/GID, который это записано на диске. Но эти записи не обеспечивают дополнительного осуществления о том, что UID/GID может быть создан в системе, например:
$ touch afile && chown 10000:10000 afile
$ ls -l | grep afile
-rw-r--r-- 1 10000 10000 0 Jun 11 05:11 afile
Единственный реальный риск, понесенный при наличии этих записей в /etc/passwd
и /etc/group
это, это дает быть взломщиком способность скрыть файлы в файловой системе и заставить их появиться, как будто они принадлежат путем предоставления их файлам большего количества подлинно выглядящего владения.
Это - действительно проблема, которой большинство аудиторов, кажется, становится одержимым при наличии системных записей учетной записи в /etc/passwd
. У них создается впечатление, что записи в этом файле ограничивают объем. Но вот протирание. Таким же образом это /etc/passwd
не ограничивает Вашу способность создать файлы со спорадическим UID/ценурозами, и при этом это не осуществляет процессы, работающие как безотносительно UID/GID, который они хотят также.
Посмотрите это ТАК названные Вопросы и ответы: setuid определяет большой номер.
В UNIX существует 4 функции C, которые управляют, кому принадлежит процесс:
setuid()
- идентификатор пользователя аппаратаseteuid()
- установите эффективный идентификатор пользователяsetgid()
- идентификатор группы набораsetegid()
- установите эффективный идентификатор группыЕсли учетная запись, в которой Вы работаете, подняла privledges затем, можно звонить, они функционируют с чем-либо, что Вы хотите. Например:
setuid(500); setuid(0);
Ответ: 500/500 (вызов first генерирует 500/500 и вторые сбои вызова).seteuid(500); setuid(0);
Ответ: 0/500 (вызов first генерирует 500/500 и второй вызов, генерирует 0/500).seteuid(600); setuid(500);
Ответ: 500/500 (вызов first генерирует 600/500 и второй вызов, генерирует 500/500).seteuid(600); setuid(500);
setuid (0); Ответ: 0/500 (вызов first генерирует 600/500, второе, генерирует 500/500, и третье генерирует 0/500).Выше кода, одолженного отсюда: UID набора Привилегированные Программы - читает лекции примечаниям.
Таким образом учитывая тот факт, что пользователь ни у кого нет поднятых полномочий (т.е. sudo
), нет опции, где сервер/сервис, работающий, поскольку никто не смог бы породить любые дочерние процессы как что-либо ни кроме кого. Если этот сервер/сервис, работающий, поскольку никто не был скомпрометирован, только файлы, принадлежавшие никому, будет находиться в опасности.
В моих деловых отношениях с обеспечением систем действительно самая критическая область к прямому фокусу находится в том, какие сервисы работают на данной системе, и какое программное обеспечение установлено в этой системе.
Для производственной системы установка не должна совершенно определенно включать средства разработки, такие как gcc/g ++, и только базовые услуги должны работать. Там должен существовать политика обновления периодически обновить программное обеспечение, установленное в этой системе.
Говоря все вышеупомянутое, ни одно из этого не имеет никакого отношения к присутствию дополнительных счетов на связанные с системой операции в /etc/passwd
файл.
Я упоминаю это здесь, потому что в конце дня, 9 раз из 10, аудиторы будут знакомы с безопасностью Windows, где они не могут быть так же знакомы с безопасностью UNIX.
При рассмотрении системы Windows, Вы будете видеть приблизительно дюжину учетных записей пользователей, которые непосредственно не связываются с определенным пользователем. Это системные учетные записи, и они служат точной цели, которой служит учетная запись, такая как никто. Без них, или если бы они были отключены, система Windows была бы эффективно в действующем. Так также для системы UNIX.
Обычно, когда они объяснены таким образом, большинство аудиторов может ценить, почему эти учетные записи могут/нуждаются, чтобы быть оставленными в конкретной системе, которая требует их.
Вы, наверное, ошибаетесь и не установили для любезности -20.
Если вы выполнили команду как обычный пользователь, вместо -x вы получите 0. Для значений> 20 вы получите 20.
Если вы работаете как root, для значений <-20 вы получите -20.
Тестирование как обычный пользователь:
$ nice -n -20 sleep 100
nice: cannot set niceness: Permission denied
# ps ax -o pid,ni,cmd | grep "sleep 100"
26349 0 sleep 100
Тестирование как root:
$ sudo nice -n -200 sleep 100
# ps ax -o pid,ni,cmd | grep "sleep 100"
28118 0 sudo nice -n -200 sleep 100
28119 -20 sleep 100