Как мне остановить Ubuntu от запуска демонов, которые я явно не просил запустить?

8

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

Я был pgrepпинг для процесса сегодня , когда я заметил , что мой Ubuntu 9,04 (рабочий стол) машина работает демон мерзавец сервера. После небольшой клятвы я обнаружил, что git-daemon-runпакет был (возможно, случайно) установлен, и удалив его, избавился от этого процесса (и гарантировал, что он не будет перезапущен позже).

Но в других случаях я хочу, чтобы был установлен пакет сервера, но не хочу, чтобы работал демон сервера. Например, я использую lighttpdдля внутреннего тестирования (оно запускается специальными тестовыми сценариями для некоторых приложений и прослушивает только localhost в этих конфигурациях), но я не хочу, чтобы оно прослушивало внешние соединения с каким-то случайным файлом конфигурации. (Если бы я хотел запустить одно прослушивание для внешних подключений, я бы настроил и запустил его сам.)

Мне действительно не нравится запускать все виды случайных серверов, которые мне не нужны, на компьютерах, выходящих в Интернет, так как кто знает, какие дыры в безопасности они открывают. И я предпочитаю не лезть в брандмауэры, поскольку это еще один потенциальный источник ошибок и неправильной конфигурации, которые могут открыть дыры в безопасности. Не так сложно настроить машины Unix, чтобы они не запускали серверы, если администратор не попросил об этом; NetBSD (и я думаю, OpenBSD тоже) идут по умолчанию.

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

(Просить установить пакет не является, в моей книге, просьбой запустить сервер. Если это должно быть, это ужасный пользовательский интерфейс, так как во многих установках пакета даже нет сервера для запуска, поэтому он делает слишком легко непреднамеренно запустить сервер, не осознавая, что вы это сделали.)

РЕДАКТИРОВАТЬ: Просто чтобы прояснить, проблема не в том, что я хочу иметь возможность остановить существующие серверы. Проблема в том, что я не хочу, чтобы новые серверы запускались без явного запроса. Это означает, что я должен быть в состоянии выполнить любую задачу системного администратора, например установить пакет, и быть уверенным, что ни один сервер не запущен. Большинство ответов не касаются этого вопроса.

CJS
источник
3
Я копался в пакетах .deb около 10 минут. Они включают в себя сценарий postinst, который запускается после установки пакета. Последней командой, которую они запускают, часто является «invoke-rc.d <servicename> start», которая заставляет службу запускаться сама. Вызов invoke-rc.d, как правило, встроен без какой-либо проверки глобальной переменной конфигурации, чтобы контролировать, действительно ли запускать службу. Таким образом, было бы до invoke-rc.d принять решение о том, запускать ли службу. На этом мое расследование закончилось.
Барри Браун
2
как объяснил Барри, Ubuntu явно не для тебя. Извините, но вы должны: 1) изменить дистрибутив или 2) внимательно следить за тем, что делает Ubuntu.
Elcuco
Причина, по которой Ubuntu / Debian отличается от Fedora в этом отношении, заключается в том, что Debian устанавливает только то, что вы просите, в то время как Fedora устанавливает кухонную раковину. Поэтому в Fedora обычно установлен пакет, который вы не просили, поэтому по умолчанию он не запущен. В Debian вы явно установили пакет, поэтому ожидается, что вы хотите, чтобы сервер работал немедленно.
TRS-80
любые обновления. Какой ты пробовал? а что сработало? а
Нандини Ананд
Грустно сказать, что, похоже, не существует другого решения, кроме как «тщательно проверять, какое программное обеспечение работает в вашей системе после любого изменения пакетов», очевидно, весьма подверженного ошибкам процесса.
cjs

Ответы:

12

Установите sysv-rc-conf и просто отключите службы, которые вы не хотите запускать.

sudo apt-get install sysv-rc-conf
ОПИСАНИЕ: sysv-rc-conf предоставляет простой в использовании интерфейс для управления символьными ссылками "/etc/rcndomrunlevel Event.d/".

альтернативный текст

Jindrich
источник
Как это предотвращает включение новых серверов системой упаковки?
cjs
Пожалуйста, прочитайте комментарий Барри Брауна, он объясняет, почему этот ответ устарел.
Elcuco
8

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

Кроме того, я нахожу некоторые из приведенных выше комментариев к оригинальному постеру грубыми, покровительственными и лишенными конструктивности. Например, предположить, что он должен либо принять поведение по умолчанию, либо изменить распределение, действительно замечательно. Во-первых, ни один дистрибутив не будет идеально подходить, и переход к новому дистрибутиву со связанной дополнительной работой вряд ли будет реалистичным решением этой проблемы. Во-вторых, опытные пользователи Linux / Unix привыкли к тому, что каждое поведение может быть изменено: проблема может занять два часа без копания, но затем она решается. Для такого пользователя естественным делом, когда значения по умолчанию не подходят, является принятие обходного пути и попытка выяснить, что это такое. В-третьих, в этикете с открытым исходным кодом и свободным программным обеспечением, If you don't like it, then patch the source code!'' is an acceptable response; however,..., тогда походите! '' Нет.


источник
5

Ожидается, что система упаковки при установке серверного пакета захочет запустить этот сервер. Это разумное ожидание.

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

Рой ответил на этот вопрос для вас. Когда вы устанавливаете новый серверный пакет, вы останавливаете этот сервер и затем используете инструмент, такой как sysv-rc-conf, чтобы предотвратить запуск этого сервера при следующей перезагрузке или изменении уровня запуска. Да, вы должны сделать некоторую работу самостоятельно, и это разумно, потому что вы настраиваете свою систему иначе, чем большинство людей, которые используют Ubuntu.

Например, я использую lighttpd для внутреннего тестирования (оно запускается специальными тестовыми сценариями 
для некоторых приложений и слушает только на localhost) но я вообще этого не хочу 
прослушивание внешних связей.

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

Осужденный
источник
3
Во-первых, я не думаю, что это разумное ожидание; то, что я установил бинарный файл lighttpd, не означает, что я хочу запустить публичный сервер. Во-вторых, я не всегда знаю, что я установил серверный пакет; они иногда втягиваются другими пакетами, которые я установил.
cjs
1
О, и я знаю, как настроить lighttpd для прослушивания только на локальном хосте, и у меня часто есть полдюжины или больше проверок проектов в любой конкретной системе, которые делают это.
cjs
5

Я нашел следующее полезное для установки Ubuntu в средах chroot, таких как debootstrapping новых гостей 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 не запустит службы после установки. Тем не менее, это только половина вашей проблемы, потому что символические ссылки все еще на месте, службы будут запущены после следующей загрузки. Я не знаю, как автоматически остановить это :(


источник
1
это может нарушить логинирование nginx, потому что /etc/logrotate.d/nginx invoke-rc.d nginx rotateв Ubuntu используется в разделе постротации. Я использую немного отличающуюся версию gist.github.com/hostmaster/7c25ef4e1e47bc3e2d71
hostmaster
Это также предотвращает остановку демона при удалении пакетов из системы. Это не хорошо.
ведущий
4

Барри Браун в комментарии к вопросу дает ключ к возможному ответу.

Система упаковки использует 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] Это действительно работает?

CJS
источник
3

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

ojblass
источник
Гектометр Интересно, почему за это проголосовали? Это взлом, но, по крайней мере, он решает мою проблему, в отличие от большинства ответов здесь.
CJS
Я проголосовал за это, потому что это самое близкое решение, которое вы, вероятно, получите с Ubuntu, хотя я думаю, что сделать каталоги init неизменяемыми - ужасная идея (представьте, что вы пытаетесь установить сервис, который вы ХОТИТЕ запустить). Я знаю, что find можно использовать для отслеживания изменений в файлах и каталогах, хотя я недостаточно знаком с инструментом, чтобы дать вам точную команду. Я бы попросил одного из гуру о рабочей команде, вставил ее в скрипт bash и запускал ее после каждой установки, а затем использовал sysv-rc-conf, чтобы вручную отключить ненужные вам службы.
Бабу
2

В идеале это вопрос post-instсценариев. В начале проекта Ubuntu были предприняты преднамеренные усилия, чтобы заставить вменяемые значения по умолчанию использовать скрипты конфигурации dpkg, чтобы вам и мне не приходилось отвечать на каждый чертов вопрос, который может возникнуть, или тратить время на изучение вариантов. Теперь, когда Ubuntu настроил это, многие люди не знают о его существовании. Должна быть возможность задать вопрос о том, следует ли устанавливать как демон или нет, но я не вижу таких вопросов в нескольких проверенных мной пакетах.

Возможно, вам следует сотрудничать с Ubuntu Server Team и, возможно, даже с политикой Debian, чтобы улучшить ситуацию.

jldugger
источник
1

Вы можете попробовать создать скрипт, который проверит список установленных сервисов и проверит их по некоторому списку разрешенных сервисов. Если службы нет в списке, скрипт отключит ее. Сценарий должен быть запущен при запуске до общих служб. И, возможно, запустить как демон, чтобы закрыть недавно установленные службы. Или, если возможно, запускаться автоматически после каждой установки, чтобы проверить наличие новых сервисов.

PS Я могу вспомнить две возможные причины запуска служб после установки пакета. Это функция пакета или функция менеджера пакетов. Если это особенность пакета, я не думаю, что есть какой-то способ изменить поведение службы. Если это функция менеджера пакетов, возможно, есть какая-то опция конфигурации, чтобы предотвратить запуск службы после установки. Я не знаю сейчас, так что просто бросаю идеи.

проворный
источник
1

Если вы устанавливаете iptables с политикой по умолчанию DROP для цепочки INPUT, вам не нужно слишком беспокоиться о прослушивающих портах, потому что они будут заблокированы iptables. Ubuntu сервер поставляется с удобным интерфейсом для iptables, если вы новичок в iptables.

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

Кроме того, я думаю, что ваш вопрос мог бы быть немного понятнее, если вы заменяете слово «сервер» словом «сервис» или «демон», когда имеете в виду нечто, работающее на сервере. Люди склонны использовать «сервер» для обозначения физического блока или виртуальной машины. Хотя я думаю, это технически неверно.

Кайл Брандт
источник
0

Посмотрите, на каком уровне выполнения вы находитесь, с помощью команды 'runlevel' и удалите все символические ссылки в / etc / rc <runlevel> .d /. Возможно, вы захотите запустить некоторые из демонов, но большинство из них, вероятно, можно будет удалить.

Вы можете добавить их обратно с помощью символической ссылки из скрипта в /etc/init.d.

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

резонатор
источник
Проблема в том, что я не знаю, когда можно добавить символические ссылки. Я должен предотвратить то, что добавляет симлинки и запускающие серверы (в основном, упаковочную систему), если я не предприму какое-либо действие, которое специально попросит это сделать.
cjs
Наверное, проще и надежнее просто настроить брандмауэр. Может быть, сценарий что-то, чтобы принять порт и протокол в качестве аргумента, чтобы добавить / del правила брандмауэра, чтобы сделать вещи проще.
резонатор
или запустить свою машину в однопользовательском режиме ... Это может создать больше проблем, чем экономит.
резонатор
Я новичок в Ubuntu, будучи давним пользователем Fedora / RedHat. Одна вещь в Ubuntu, которая кажется мне странной: сервисы включены по умолчанию. В Fedora сервисы по умолчанию отключены.
Барри Браун
Запуск настольного компьютера или сервера в однопользовательском режиме не очень практичен.
cjs
0

В качестве альтернативы вы можете использовать update-rc.dкоманду.

Отключить apache2сервис

# update-rc.d [-f] apache2 remove

РЕДАКТИРОВАТЬ:

Это означает, что я должен быть в состоянии выполнить любую задачу системного администратора, например установить пакет, и быть уверенным, что ни один сервер не запущен.

Это поведение контролируется скриптами внутри пакетов .deb. Когда вы устанавливаете пакет, этот скрипт выполняется автоматически. IIRC, мы не можем обойти этот сценарий.

Арье К
источник
0

По сути, вы не можете.

Если вы устанавливаете пакет, и он запускает службу, то это то, что происходит. Если вам не нравится, сообщите об ошибке на https://launchpad.net/ .

Вы не должны возиться с пакетами deb. Такие вещи могут вернуться и укусить вас в задницу позже.

Если вы хотите, чтобы в стиле OpenBSD «по умолчанию ничего не выполнялось», запустите OpenBSD. Не каждый дистрибутив подходит всем. В Ubuntu обязательно найдутся вещи, которые вам не нравятся. Если вы все еще хотите запустить Ubuntu, вам придется проверить работающие службы и отключить их.

Рори
источник
-2

Вы можете включить и отключить некоторые службы в меню «Система»> «Службы» в GNOME.

dmityugov
источник