Почему в SVN, Apache и многих других программах администратор должен создавать нового пользователя только для использования сервером?
2 ответа
Если я правильно понимаю ваш вопрос, вы спрашиваете, почему для svn должен быть создан пользователь svn, а для apache и т.д. - пользователь www-data и т.д. Правильный?
Причина в безопасности. Основная концепция в игре называется «изоляция» и является обычной практикой. Основная основная идея заключается в том, что если каждая служба работает как отдельный пользователь, то если в программе когда-либо будет обнаружен недостаток безопасности или ошибка, эта уязвимость будет использоваться только в той степени, которая разрешена этим пользователем.
Например, предположим, что кто-то понял, как взломать SVN и удалить все ваши файлы. (Это не настоящий недостаток безопасности, и, вероятно, никогда не будет, но просто предположим, ради аргумента)... Если вы запустили службу SVN от имени пользователя root, то теоретический хакер может начать удалять все ваши файлы. Если, с другой стороны, SVN требует своего собственного пользователя, то этот теоретический хакер может удалить только файлы, принадлежащие пользователю SVN.
Я надеюсь, что это отвечает на ваш вопрос ... если нет, пожалуйста, уточните, и я попробую еще раз.
РЕДАКТИРОВАТЬ: Чтобы ответить на ваш комментарий ...
Обычно / всегда можно запустить любую программу от имени пользователя root. Но это обычно нецелесообразно, за исключением случаев, когда это действительно необходимо. Очень распространенный подход к такого рода вещам - запускать каждую программу с наименьшим количеством необходимого разрешения. Это также может помочь предотвратить случайную ошибку в программе, которая может вызвать проблемы с другими программами (еще одна причина изоляции безопасности, о которой я ранее не упоминал).
Однако бывают случаи, когда программа должна запускаться с правами root, потому что она просто не может делать то, что ей нужно, любым другим способом. Некоторые общие задачи, которые требуют привилегий суперпользователя и, таким образом, являются оправданием для того, чтобы не работать как отдельный пользователь:
- Доступ к базе данных системных паролей
- Связывание с (прослушиванием) привилегированного порта TCP (т.е. портов 1-1023)
- Взаимодействие с файловой системой или некоторыми аппаратными устройствами на низком уровне
Даже в этих (и других) категориях часто есть способы обойти необходимость запуска от имени пользователя root. Например, многие сетевые программы (например, Apache) запускаются от имени пользователя root, затем связываются с портом 80, а затем меняют пользователей на www-данные до конца своего выполнения. Поэтому даже в тех случаях, когда существуют конкретные случаи, требующие корневого доступа, часто принимаются меры, чтобы обойти это требование, чтобы процесс мог запускаться как пользователь с меньшими правами.
Поскольку авторы этих программ предпочитают использовать отдельные пользовательские базы данных, а не базу данных системных паролей.
Одна из причин, почему это иногда делается, заключается в том, что программе необходимо иметь доступ к незашифрованной версии пароля, возможно, потому, что она реализует сетевой протокол, который требует этого, поскольку нет никакого способа получить доступ к незашифрованным паролям для пользователей системы, поскольку они проводятся только в хешированном виде.
Это справедливо, например, для apache и для svn, когда он использует базовую аутентификацию HTTP, поскольку для базовой аутентификации HTTP требуется доступ к открытым текстовым паролям.