Почему веб-серверы традиционно запускаются как суперпользователь?

Вот:

$ awk -F+ '{sum+=$2;printf("%s+%d\n",$1,sum-$2);}' blah.txt
aa+0
bb+2
cc+6
dd+16

Edit1: вот немного более простой путь благодаря Sukminder

$ awk -F+ '{printf("%s+%d\n",$1,sum);sum+=$2}' blah.txt

Edit2: И немного более краткое, благодаря Bernhard:

$ awk -F+ '{print $1,sum;sum+=$2}' OFS="+" blah.txt

Edit3: но первый не отображается 0 на первой строке, таким образом, вот исправленная и несколько упакованная версия, которая показывает более короткий способ ответить на вопрос Tom (пока некоторый новый комментарий не предлагает лучший):

$ awk -F+ '{print$1,s+0;s+=$2}' OFS=+ blah.txt
7
14.04.2014, 01:07
3 ответа
[113546] Хотя POSIX имеет стандарт для возможностей, который, как я думаю, включает CAP_NET_BIND_SERVICE, они не требуются для соответствия [114010]и могут в некотором смысле быть [114012]несовместимы [114013] с реализацией на, например, на [114012], linux.

Так как вебсерверы типа apache написаны не только для одной платформы, использование привилегий root является наиболее переносимым методом. Я предполагаю, что он может делать это специально на linux и BSD (или где бы он ни был обнаружен), но это означает, что поведение будет варьироваться от платформы к платформе, и т.д.

Мне кажется, что вы могли бы настроить свою систему так, чтобы любой веб-сервер мог использоваться таким образом; здесь есть некоторые (возможно, неуклюжие) предложения по поводу этого WRT-апаша: [114014]NonRootPortBinding[114015].

Screenshot

Так почему же они [114401]традиционно[114402] запускаются от имени root, когда после этого делается все возможное, чтобы избавиться от подразумеваемых проблем с безопасностью, которые с ними связаны?

Они запускаются от имени root, потому что обычно им нужен доступ к привилегированному порту, и [114018]традиционно[114019] это был единственный способ сделать это. Причина, по которой они после этого понижаются, заключается в том, что им впоследствии не нужны привилегии, а также в ограничении потенциала ущерба, который может быть нанесён множеством дополнительных программ сторонних производителей, обычно используемых сервером.

Это не лишено смысла, так как деятельность с привилегиями очень ограничена, и по соглашению многие другие системные демоны работают с правами root непрерывно, включая других inet-демонов (например, [114020]sshd[114021]).

Имейте в виду, что если бы сервер был упакован так, чтобы его можно было запускать как непривилегированного пользователя с CAP_NET_BIND_SERVICE, то это позволило бы [114022]любому [114023] непривилегированному пользователю запустить службу HTTP(S), что, возможно, представляет больший риск.[113559].

8
27.01.2020, 20:17
[113866] В системах на базе Unix прослушивание сервисов на привилегированных портах требует благословения системного администратора. Это указывает на то, что служба выполняется доверенным (по крайней мере, администратором) пользователем. Пользователи таких сервисов могут затем доверять тому, что существует некоторый административный контроль над серверным приложением. Значение этого доверия может быть не столь велико, как в предыдущие десятилетия. [12236] Многие веб-серверы работают на старых ядрах операционной системы, которые могут не поддерживать возможности, необходимые для запуска и работы от имени непривилегированного пользователя. Требуемые изменения в ядре являются относительно новыми и не стандартизированными для всех ядер операционной системы. Для таких сред можно скомпилировать программное обеспечение условно. Однако, Такие изменения не могут быть использованы на большинстве платформ и могут быть плохо протестированы или настолько безопасны, насколько это необходимо. [12237] Обычно процессы демона запускаются от имени root, чтобы сделать все, что требует root доступа, а затем перейти на непривилегированный UID. Это позволяет обезопасить ресурсы, в то же время не допуская причинения большого ущерба программе при ее запуске. В случае web-сервера SSL ключи должны быть защищены от чтения приложением сервера rouge, но должны быть прочитаны для настройки SSL-приемника. Раздельная привилегия допускает раздельный доступ к ресурсам, что может быть использовано для значительного повышения безопасности.[12238]Несмотря на то, что существует возможность посадить в тюрьму веб-сервер, на многих системах тюрьма может содержать значительную часть файловой системы. Это может быть как сложно настроить, так и чревато ошибками. Обычно тюремное заключение приложения подразумевает более безопасную конфигурацию. В этом случае это доверие может быть утеряно из-за риска того, что тюрьма будет настроена неправильно. Даже без тюрьмы может быть сложно диагностировать проблемы доступа. Исключение из тюрьмы больших кусков файловой системы усложнит эту задачу. [113873]
1
27.01.2020, 20:17
[113800]Есть несколько причин запуска веб-сервера от имени root:[12205]для привязки к порту 80 (порты ниже 1024 зарезервированы за root, так что если удалённый пользователь подключается к сервису на низком порту, он знает, что этот сервис одобрен root);[12206]для установки ограничения, e. g. chroot;[12207]для чтения и обслуживания веб-страниц пользователей, где это применимо.[12208]Эта наименьшая причина - плохая настройка; самый простой способ защитить такую настройку - потребовать от пользователей публичного доступа к веб-страницам. Это не работает, когда пользователи могут захотеть иметь частные веб-страницы с контролем доступа (например, университетскую машину, где преподаватели хотят обмениваться текстами экзаменов через Интернет, но не хотят, чтобы студенты их видели). В этом случае необходим более сложный подход (например, требуется, чтобы веб-страницы имели ACL, позволяющий веб-серверу их читать).[12209]Веб-серверы, которые запускаются с правами root, часто начинаются только с правами root, но затем опускают права до прав выделенного пользователя. Перед отменой привилегий они связывают порт 80, возможно, читают некоторые файлы (например, файл с закрытым ключом SSL), и возможно, выполняют другую локализацию[113807]. [113808] [114282] [Почему бы не] использовать [114489]setcap(8)[114490] с [114491]CAP_NET_BIND_SERVICE[114492] на выполняемом бинаре?[12210]Это можно сделать, но для этого требуется система, поддерживающая возможности. Относительно истории Unix, и даже веб-серверов, это относительно недавно[113811]. [113812] [114284] [Почему бы не] настроить папки с журналами, чтобы позволить (не корневой) пользователю записывать туда? [12211] Обычно это делается; иначе процесс web-сервера регистрируется через Unix или Internet-сокет к даемону с журналами.[113815]. [113816] [114286] [Почему бы и нет] если вам кажется, что chroot вообще помогает, используйте chroot или lxc, чтобы "посадить" веб-сервер? [12212] Это означает, что веб-сервер сможет прочитать все свои конфигурационные файлы, такие как приватные ключи SSL. Иногда уязвимости позволяют удалённым злоумышленникам извлекать произвольные файлы; ограничение сервера таким образом, чтобы он не мог получить доступ к конфигурационным файлам, позволяет избежать экспозиции в этом случае.[12213]Слабость большинства unix-систем заключается в том, что они не позволяют непривилегированному процессу установить область ограничения, из которой он не сможет вырваться. Под Linux это возможно, так как [114288]улучшения пространства имён в ядре 3.8[114289], которые еще не получили широкого распространения.[113821].
0
27.01.2020, 20:17

Теги

Похожие вопросы