Один из основных принципов компьютерной безопасности - никогда не запускать то, что вам не нужно.
я был pgrep
ping для процесса сегодня, когда я заметил, что на моем компьютере с Ubuntu 9.04 (настольный компьютер) был запущен демон сервера git. После быстрой ругани я обнаружил, что git-daemon-run
package был установлен (вероятно, случайно), и его удаление избавило от этого процесса (и гарантировало, что он не будет перезапущен позже).
Но в других случаях я хочу, чтобы серверный пакет был установлен, но не хочу, чтобы демон сервера работал. Например, я использую lighttpd
для внутреннего тестирования (он запускается с помощью определенных тестовых сценариев для некоторых приложений и в этих конфигурациях прослушивает только локальный хост), но я не хочу, чтобы он прослушивал внешние соединения с каким-то случайным файлом конфигурации. (Если бы я хотел запустить одно прослушивание внешних подключений, я бы настроил и запустил его сам.)
Мне действительно не нравится запускать всевозможные случайные серверы, которые мне не нужны, на машинах, открытых в Интернете, поскольку кто знает, какие дыры в безопасности они открывают. И я предпочитаю не возиться с брандмауэрами, поскольку это еще один потенциальный источник ошибок и неправильных настроек, которые могут открыть дыры в безопасности. Не так сложно настроить Unix-машины так, чтобы они не запускали какие-либо серверы, если это специально не попросит администратор; NetBSD (и OpenBSD, я думаю, тоже) по умолчанию поступает таким образом.
Как мне настроить мои системы Ubuntu никогда запускать какой-либо серверный демон, если я специально не скажу, что хочу, чтобы он запустился?
(В моей книге просьба об установке пакета не является запросом на запуск сервера. Если это и должно быть, то это ужасный пользовательский интерфейс, поскольку многие установки пакетов даже не имеют сервера для запуска, поэтому слишком легко непреднамеренно запустить сервер, не осознавая, что вы это сделали.)
РЕДАКТИРОВАТЬ: Просто чтобы прояснить, проблема не в том, что я хочу остановить существующие серверы. Проблема в том, что я не хочу, чтобы новые серверы запускались без явного запроса. Это означает, что я должен иметь возможность выполнять любую задачу системного администратора, такую как установка пакета, и быть уверенным, что ни один сервер не запущен. В большинстве ответов этот вопрос не рассматривается.
Как человек с подобной проблемой, я очень уверен, что это не Для демона разумно предположить, что пользователь хочет, чтобы он запускался по умолчанию: существует множество вполне допустимых случаев использования, когда это не так. (Не говоря уже о том, что не всегда ясно, какие установки на самом деле включают демон.) Демон может быть отключен по умолчанию, пользователь может быть запрошен явным образом или может быть центральная настройка. Все остальное - рассуждения Microsoft, совершенно недостойные Linux.
Кроме того, я считаю, что некоторые из приведенных выше комментариев к исходному плакату являются грубыми, покровительственными и лишенными конструктивности. Например, предложить ему либо принять поведение по умолчанию, либо изменить распределение - это действительно замечательно. Во-первых, ни один дистрибутив не будет идеальным вариантом, и переход на новый дистрибутив с сопутствующей дополнительной работой вряд ли будет реальным решением по этому поводу. Во-вторых, опытные пользователи Linux / Unix привыкли к изменению любого поведения: на копание может потребоваться два часа, но затем она будет устранена. Когда значения по умолчанию не подходят, для такого пользователя естественно предположить существование обходного пути и попытаться выяснить, что это такое. В-третьих, в этикете открытого исходного кода и бесплатного программного обеспечения If you don't like it, then patch the source code!'' is an
acceptable response; however,
..., тогда отправляйтесь в поход! '' - нет.
Ожидается, что при установке пакета сервера вы захотите запустить этот сервер. Это разумное ожидание.
How do I configure my Ubuntu systems never to start any kind of server unless I specifically tell it to I want a server started?
Рой ответил на этот вопрос за вас. Когда вы устанавливаете новый пакет сервера, вы останавливаете этот сервер, а затем используете такой инструмент, как sysv-rc-conf, чтобы предотвратить запуск этого сервера при следующей перезагрузке или изменении уровня выполнения. Да, вам придется поработать самостоятельно, и это разумно, потому что вы настраиваете свою систему иначе, чем большинство людей, использующих Ubuntu.
For example, I use lighttpd for internal testing (it's started by specific test scripts for some applications, and listens only on localhost) but I generally don't want it listening for outside connections.
Вам следует потратить некоторое время, чтобы узнать, как настроить lighttpd так, чтобы он был постоянно настроен на прослушивание только на localhost. Затем, когда вы запускаете сервер, вы знаете, что он уже настроен по вашему вкусу.
Я нашел следующее полезным для установки Ubuntu в среде chroot, например, для удаления новых гостей xen. На самом деле заслуга скриптов xen-tools, которые научили меня этому:
echo '#! / bin / sh'> /usr/sbin/policy-rc.d
echo 'выход 101' >> /usr/sbin/policy-rc.d
chmod 755 /usr/sbin/policy-rc.d
Если этот сценарий установлен, apt не будет запускать службы после установки. Однако это только половина вашей проблемы, поскольку символические ссылки все еще сохраняются, службы запускаются после следующей загрузки. Я не знаю, как это автоматически остановить :(
Барри Браун в комментарии к вопросу дает ключ к возможному ответу.
В системе упаковки используется invoke-rc.d
программа для запуска сервера после установки пакета. [1] Эта программа будет работать /usr/sbin/policy-rc.d
чтобы определить политику при запуске этого сервера.
Посылка policyrcd-script-zg2
включает policy-rc.d
скрипт, который либо запускает /etc/policy-rc.d
со своими параметрами, если они есть, и завершает работу с кодом ошибки этого сценария или завершает работу с 0 (успех) в противном случае. Интерфейс policy-rc.d
ожидается предложение, кратко задокументировано в invoke-rc.d
управлять, и намного более широко в /usr/share/doc/sysv-rc/README.policy-rc.d.gz
.
Я полагаю, что следующим шагом будет проверка этого.
[1] Какие другие части системы используют invoke-rc.d
? [2] Это действительно работает?
Как насчет просмотра каталогов, в которых находятся сценарии инициализации? Скорее всего, вы можете сделать эти каталоги неизменяемыми с помощью команды chatr.
В идеале это вопрос post-inst
скрипты. В начале проекта Ubuntu была предпринята преднамеренная попытка принудительно установить разумные значения по умолчанию для сценариев конфигурации dpkg, чтобы вам и мне не приходилось отвечать на все проклятые вопросы, которые могут возникнуть, или тратить время на изучение вариантов. Теперь, когда Ubuntu настроил это, многие люди не знают, что это существует. Должна быть возможность задать вопрос о том, устанавливать ли как демон или нет, но я не вижу таких вопросов в нескольких проверенных мной пакетах.
Возможно, вам стоит пообщаться с командой Ubuntu Server и, возможно, даже с политикой Debian, чтобы улучшить ситуацию.
Вы можете попробовать создать скрипт, который будет проверять список установленных служб и сравнивать их с некоторым списком разрешенных служб. Если службы нет в списке, скрипт ее отключит. Сценарий должен запускаться при запуске перед общими службами. И, возможно, запустить как демон, чтобы закрыть только что установленные службы. Или, если возможно, запускать автоматически после каждой установки для проверки наличия новых служб.
P.S. Я могу придумать две возможные причины запуска служб после установки пакета. Это функция пакета или функция диспетчера пакетов. Если это функция пакета, я не думаю, что есть способ изменить поведение службы. Если это функция диспетчера пакетов, возможно, есть некоторая опция конфигурации, предотвращающая запуск службы после установки. Я не знаю прямо сейчас, так что просто подбрасываю идеи.
Если вы настроили iptables с политикой по умолчанию DROP для цепочки INPUT, вам не нужно беспокоиться о портах для прослушивания, потому что они будут заблокированы iptables. Сервер Ubuntu поставляется с удобный интерфейс для iptables если вы новичок в iptables.
Из вашего сообщения мне кажется, что вам больше понравится другой дистрибутив Linux, такой как CentOS. Процесс установки по умолчанию для CentOS позволит вам устанавливать различные метапакеты, и, выбрав ни один, вы можете быть более довольны своей базовой установкой.
Кроме того, я думаю, что ваш вопрос мог бы быть немного яснее, если бы вы заменили слово «сервер» словом «сервис» или «демон», когда вы имели в виду то, что работает на сервере. Люди склонны использовать слово «сервер» для обозначения физического компьютера или виртуальной машины. Хотя я предполагаю, что это не технически некорректно.
Посмотрите, на каком уровне выполнения вы находитесь, с помощью команды runlevel и удалите все символические ссылки в / etc / rc.<
уровень запуска> .d /. Вы, вероятно, захотите, чтобы некоторые из демонов работали, но большинство из них, вероятно, можно удалить.
Вы можете добавить их обратно с помощью символической ссылки из сценария в /etc/init.d.
Я думаю, что есть команда, которая проделает тот же трюк и добавит все символические ссылки для всех уровней запуска, но я просто делаю это вручную.
В качестве альтернативы вы можете использовать update-rc.d
команда.
Отключить apache2
служба
# update-rc.d [-f] apache2 remove
РЕДАКТИРОВАТЬ:
Это означает, что я должен иметь возможность выполнять любую задачу системного администратора, например, устанавливать пакет, и быть уверенным, что ни один сервер не запущен.
Это поведение контролируется скриптами внутри пакетов .deb. Когда вы устанавливаете пакет, этот сценарий выполняется автоматически. IIRC, мы не можем обойти этот скрипт.
В принципе, нельзя.
Если вы устанавливаете пакет, и он запускает службу, вот что происходит. Если вам не нравится, сообщите об ошибке на https://launchpad.net/.
Не стоит возиться с пакетами deb. Подобные вещи могут вернуться и укусить вас за задницу позже.
Если вы хотите, чтобы в стиле OpenBSD «по умолчанию ничего не работало», запустите OpenBSD. Не каждый дистрибутив подходит всем. В Ubuntu обязательно найдутся вещи, которые вам не понравятся. Если вы все еще хотите запустить ubuntu, вам придется проверить работающие службы и отключить их.
Вы можете включить и отключить некоторые службы в меню Система> Службы в GNOME.