- ИТ База знаний
- Полезно
- Навигация
- Серверные решения
- Телефония
- Корпоративные сети
- Runlevel в Linux: что это и с чем едят
- Почему важны уровни доступа
- Сколько уровней выполнения существует?
- Как узнать текущий режим работы?
- Как менять уровень выполнения?
- Linux system против runlevels
- Как поменять уровень выполнения по умолчанию?
- Разница между уровнями выполнения 3 и 5
- Просмотр список служб конкретного уровня
- Под каким уровнем работает процесс
- Меняем уровень запуска приложения
- Проблемы безопасности с уровнями доступа Linux
- Какой уровень выполнения выбрать?
- Можно ли создано новый уровень на Linux?
- Understanding Linux runlevels the right way
- Importance of Linux runlevels
- How many runlevels are in Linux?
- What is my current runlevel?
- How to change the current runlevel?
- Linux systemd targets vs. runlevels
- How to change the default runlevel at startup?
- Runlevel 3 vs. runlevel 5
- List services that are enabled at a particular runlevel
- Under which runlevel will a process run?
- How to change the runlevel of an application?
- Security issues with runlevels in Linux
- Which runlevel is the best for me?
- Can we create a new runlevel in Linux?
ИТ База знаний
Курс по Asterisk
Полезно
— Узнать IP — адрес компьютера в интернете
— Онлайн генератор устойчивых паролей
— Онлайн калькулятор подсетей
— Калькулятор инсталляции IP — АТС Asterisk
— Руководство администратора FreePBX на русском языке
— Руководство администратора Cisco UCM/CME на русском языке
— Руководство администратора по Linux/Unix
Навигация
Серверные решения
Телефония
FreePBX и Asterisk
Настройка программных телефонов
Корпоративные сети
Протоколы и стандарты
Runlevel в Linux: что это и с чем едят
А какой у тебя уровень?
Уровни выполнения (runlevel) Linux можно представить, как режим, в котором запускается система. Каждый из этих режимов обладают своими процессами, которые включены или выключены в зависимости от запущенного уровня выполнения. С момента загрузки Linux выполняется в одном из режимов, нельзя запускать систему в нескольких режимах, но есть возможность переключаться между уровнями во время работы на компьютере.
Мини — курс по виртуализации
Знакомство с VMware vSphere 7 и технологией виртуализации в авторском мини — курсе от Михаила Якобсена
Например, при запуске системы с графическим интерфейсом выполняется один уровень, а если запускать систему в режиме командной строки выполнится другой. Это происходит потому, что режиму GUI нужны доступы к тем процессам, в которых командная строка не нуждается. В зависимости от того, какие службы нужно включить, а какие выключить система меняет уровни выполнения.
Почему важны уровни доступа
Вы можете годами пользоваться системой Linux, даже не понимая разницу между уровнями доступа, так как эта опция не является часто конфигурируемой.
Тем не менее уровни выполнения Linux дают администраторам повышенный контроль над системой.
Режим, в котором работает система, может быть изменен (как это сделать будет показано далее), как и сервисы, которые выполняются в этом режиме. Это позволяет нам полностью контролировать, к каким службам система будет иметь доступ в данный момент.
Сколько уровней выполнения существует?
В системе Linux есть семь уровней выполнения, которые нумеруются от 0 до 6. Разные дистрибутивы по-разному используют уровни выполнения, так что очень сложно составить список задач, которые выполняет конкретный уровень.
Зато вы сами можете посмотреть какие задачи выполняют уровни доступа вашего дистрибутива. Ниже приведён список уровней выполнения и основных задач, выполняемых ими.
- Runlevel 0 завершает работу системы
- Runlevel 1 однопользовательский режим работы. Чаще всего используется в целях обслуживания и выполнения других административных задач. Это уровень также может называться runlevel S, где S означает single-user. Если вам когда-то приходилось сбрасывать пароль на Linux, то вы вероятно уже пользовались этим режимом.
- Runlevel 2 многопользовательский режим работы без поддержки сетевых служб (демонов).
- Runlevel 3 многопользовательский режим с поддержкой сети, но без графического интерфейса. Чаще всего серверные версии Linux работают именно на этом уровне выполнения.
- Runlevel 4 не используется. Пользователь может настраивать этот уровень исходя из его целей. О том, как это сделать также будет рассказано далее.
- Runlevel 5 этот режим схож с уровнем 3, но тут еще запускается графический интерфейс. В этом режиме работают десктопные версии Linux.
- Runlevel 6 этот уровень перезагружает систему.
Как узнать текущий режим работы?
Чтобы узнать текущий уровень выполнения достаточно ввести команду runlevel в командной строке.
На выводе этой команды две цифры. Первая указывает на предыдущий режим работы, а второй на текущий. На скриншоте вместо первой цифры указана буква N, что значит система изначально запускалась и работает в 5 режиме, о чём говорит вторая цифра 5.
Как менять уровень выполнения?
Текущий уровень выполнения можно менять командой «telinit». Ниже приведён пример смены уровня выполнения на CentOS.
Следует отметить, что эта операция требует прав привилегированного пользователя. Имейте ввиду, что на системах семейства Debian уровни выполнения работают по-другому. Например, Ubuntu в режиме командой строки запускается с уровнем выполнения 5.
После выполнения команды указанной выше, ваш экран может стать пустым. Это потому, что вы остались на пустом терминале, чтобы вернутся на рабочий терминал нажмите комбинацию клавиш Alt+F1.
Если запустить команду runlevel еще раз, то мы увидим, что текущий уровень выполнения 3, а предыдущий 5.
Linux system против runlevels
В последние годы systemd сменила многолетнюю систему уровней доступа (System V init). Фактически он работает по тому же принципу, но использует новые команды, которые в целом используют «runlevel» как «target».
- Runlevel 0 = poweroff.target (runlevel0.target)
- Runlevel 1 = rescue.target (runlevel1.target)
- Runlevel 2 = multi-user.target (runlevel2.target)
- Runlevel 3 = multi-user.target (runlevel3.target)
- Runlevel 4 = multi-user.target (runlevel4.target)
- Runlevel 5 = graphical.target (runlevel5.target)
- Runlevel 6 = reboot.target (runlevel6.target)
По ходу статьи мы изучим systemd и его команды.
Как поменять уровень выполнения по умолчанию?
Может быть очень много причин для того чтобы загружаться с другим уровнем выполнения. Например, системные администраторы в основном используют систему в режиме командой строки, включая графический интерфейс только в случае необходимости.
Именно для таких случаев нужно убедиться, что уровень выполнения по умолчанию 3, а не 5.
В прошлом для этого приходилось редактировать файл /etc/inittab. Вы еще можете увидеть эту практику на некоторых системах. Если вы работаете с ОС, которые давно не обновляются до новых версий, этот путь будет приемлемым.
На скриншоте уровнем выполнения по умолчанию установлен 5.
Но большинство систем Linux отказались от файла /etc/inittab в пользу systemd targets и мы рассмотрим разницу между ними по ходу статьи.
Вы можете не найти в своей системе файл /etc/inittab или же файл inittab выведет вам сообщение с советом использовать systemd.
Чтобы проверить текущий уровень выполнения по умолчанию введите команду
Система вернула нам «graphical.target». Как вы наверное и догадались, это не что иное, как уровень выполнения 5.
Чтобы просмотреть остальные «target» и уровни выполнения, ассоциированные с ними введите команду:
Символьные ссылки указывают на то, что systemd работают так же как и runlevel. Итак, что необходимо сделать, чтобы поменять уровень выполнения по умолчанию? Для этого достаточно создать новую символьную ссылку на интересующую нас цель systemd.
Данной командой мы поменяли режим запуска системы по умолчанию с уровня выполнения 5, на 3 и при следующей загрузке система выполнить именно этот уровень.
Ключ f указывает на то, что перед созданием новой символьной ссылки целевой файл должен быть удален. Это же самое могли бы сделать командой rm.
Чтобы проверит успешно ли применились изменения достаточно повторно ввести команду «systemctl get-default».
Разница между уровнями выполнения 3 и 5
Самыми часто используемыми уровнями выполнения являются уровни 3 и 5. В целом их разница сводится к тому, что 3 это режим командной строки, а 5 режим графического интерфейса.
Конечно, не во всех дистрибутивах выполняется это условие или же ваша система может быть сконфигурирована так, что эти два уровня имеют больше отличий. Дальше мы рассмотрим, как узнать, какие процессы задействованы для того или иного уровня.
Просмотр список служб конкретного уровня
Чтобы просмотреть список служб, доступных для каждого уровня до недавнего времени использовалась команда «chkconfig -list». Если у вас стоит одна из последний версий, системы, то вероятно вы получите ошибку, как на скриншоте ниже:
Чтобы проверить, какие службы запускаются во время загрузки системы в режиме графического интерфейса (уровень выполнения 5 для семейства RedHat), нужно запустить следующую команду:
Чтобы просмотреть список доступных служб другого уровня, просто замените «graphical.target» на нужную.
Под каким уровнем работает процесс
Если нужно посмотреть по каким уровнем выполнения запущена та или иная служба, можно ввести команду:
Например, чтобы посмотреть какой runlevel использует служба sshd, введите команду:
Судя по скриншоту выше, служба sshd запушена под уровнями 2,3 и 4 (multi-user.target)
Меняем уровень запуска приложения
Как было показано выше, демон SSH запущена только на уровнях 2-4. Что если нам нужно, чтобы он работал ещё и на уровне 5? Для этого нужно ввести следующее изменение:
Проблемы безопасности с уровнями доступа Linux
Как было сказано ранее, уровни доступа дают администраторам возможность управлять службами, которые работают в определённых случаях. Такая возможность детального контроля повышает безопасность системы, так как системный администратор может быть уверен, что не запущена ни одна сторонняя служба.
Проблема возникает, когда администратор не знает точно какие службы запущены и, следовательно, не может принять меры по уменьшению площади атаки.
Используя методы из данного руководства, вы можете настроить уровень выполнения по умолчанию и контролировать запущенные приложения. Это, конечно, не уменьшит нагрузку на системные ресурсы, но сервер будет более защищен.
Помните, что надо запускать тот уровень, который вам необходим. Нет смысла запускать систему в графическом режиме, если планируете работать там режиме командной строки.
Каждый уровень выполнения запускает новые службы, большинство из которых работают в фоновом режиме, и вы можете забыть обезопасить их.
Какой уровень выполнения выбрать?
Выбор режима запуска системы полностью зависит от ситуации. В основном используется один из двух режимов: либо runlevel 3, либо runlevel 5.
Если вам удобно работать с командной строкой и вам не нужен графический интерфейс, то уровень выполнения 3 самый подходящий.
Это предотвратит запуск ненужных служб. С другой стороны, если вам хочется работать в десктопном режиме или же вам нужна графическая оболочка для работы какой-то программы, то выберите уровень 5.
Если же нужно запустить систему в режиме обслуживания, то выбирайте уровень 1. В этом режиме в системе будете только вы, так как сетевые службы даже не запущены. Это позволит выполнить обслуживания без сбоя.
В редких случаях появляется необходимость использовать уровень выполнения 4. Это может быть только в том случае, если администратору нужен уровень выполнения для особых задач.
Как вы уже, наверное, заметили, мы не может запускать систему с уровнем 0 и 6, но можно переключаться на них если нужно выключить или перезагрузить систему. Но в этом нет особой необходимости, так как есть команды, которые выполняют эти операции.
Можно ли создано новый уровень на Linux?
Так как система Linux это система бесконечных возможностей, то и создание нового уровня не исключение. Но очень маловероятно, что вам когда-нибудь понадобится это. Но если вы все-таки решили создать новый уровень, то следует начать с копирования существующего уровня и изменения её под свои задачи.
Целевые уровни расположены по следующему пути:
Если хотите создать свой уровень на основе 5-го уровня выполнения, скопируйте искомую директорию в новую:
Затем в новой директории создайте поддиректорую «wants»:
Затем просто создайте символьную ссылку на дополнительные службы в директории /usr/lib/systemd/system, которые необходимы вашему уровню.
Мини — курс по виртуализации
Знакомство с VMware vSphere 7 и технологией виртуализации в авторском мини — курсе от Михаила Якобсена
Источник
Understanding Linux runlevels the right way
You can think of Linux runlevels as different “modes” that the operating system runs in. Each of these modes, or runlevels, has its list of processes and services that are either turned on or off. From the time Linux boots up, it’s always in some runlevel.
This runlevel may change as you continue to use your computer, depending on what kind of services the operating system needs access to.
For example, running your Linux machine with a graphical user interface will necessitate a different runlevel than if you were only running the command line on your system.
This is because the graphical user interface will need access to various services that the command line simply does not. For the system to determine which services are needed to be switched on (or off), it changes the runlevel as needed.
Table of Contents
Importance of Linux runlevels
You may have used Linux for years without realizing that there are different runlevels. That’s because it’s not something most server administrators will need to configure often.
However, Linux runlevels do give administrators increased control over the systems they manage.
You can change the runlevel a system is in (which we will see how to do later in the article), as can the services which run inside the runlevels. This allows us complete control over what services our systems have access to at any given time.
How many runlevels are in Linux?
There are seven different runlevels in Linux, from zero to six. Various distributions may use the seven runlevels differently, so it’s not very easy to compile a definitive list of what the runlevels do.
Instead, you would need to check how the runlevels work on the specific distribution that you are using. For the most part, the list below represents how Linux distributions generally configure runlevels:
Runlevel 0 shuts down the system.
Runlevel 1 is a single-user mode, which is used for maintenance or administrative tasks. You may also see this mode referred to as runlevel S (the S stands for single-user).
Runlevel 2 is a multi-user mode. This runlevel does not use any networking services.
Runlevel 3 is a multi-user mode with networking. This is the normal runlevel you are used to if you use a system that doesn’t boot into a GUI (graphical user interface).
Runlevel 4 is not used. The user can customize this runlevel for their own purposes (which we will cover how to do later in the article).
Runlevel 5 is the same as runlevel 3, but it also starts a display manager. This is the runlevel you are using if you use a system that boots into a GUI.
Runlevel 6 reboots the system.
What is my current runlevel?
You can see your current runlevel on most distributions by simply typing “runlevel” in the terminal.
When you enter the “runlevel” command, it’ll give you two different numbers. The first number is the previous runlevel your system was running, and the second number is the current runlevel of your system.
In the screenshot above, the “N” is short for “none”, meaning that the system was not in any different runlevel previously. The “5” means our system is currently in runlevel 5.
We are running CentOS in this example, which booted directly into a graphical interface, hence why the system went straight to runlevel 5.
How to change the current runlevel?
You can change the current runlevel of your system using the “telinit” command. For example, to change to runlevel 3 on CentOS, you would type:
Keep in mind that you must be the root user to execute this command. Be aware that runlevels work differently on Debian and Ubuntu – for example, Ubuntu will boot into runlevel 5 even without starting a GUI.
If you follow the example above, your screen may go blank. This is because you’re left at the – now empty – tty. Just do Alt+F1 (or some other function key) on your keyboard to be taken to a working terminal.
If we use the “runlevel” command again, we’ll see that we are now in runlevel 3, and the previous runlevel is listed as 5 since we just changed from it.
Linux systemd targets vs. runlevels
In recent years, systemd has come to replace the long-standing “System V init” (runlevels) system. It still works in basically the same way, but uses some new commands and commonly refers to “runlevels” as “targets” instead.
Runlevel 0 = poweroff.target (runlevel0.target)
Runlevel 1 = rescue.target (runlevel1.target)
Runlevel 2 = multi-user.target (runlevel2.target)
Runlevel 3 = multi-user.target (runlevel3.target)
Runlevel 4 = multi-user.target (runlevel4.target)
Runlevel 5 = graphical.target (runlevel5.target)
Runlevel 6 = reboot.target (runlevel6.target)
We’ll continue going over systemd and the commands you’ll need to know as this tutorial progresses.
How to change the default runlevel at startup?
There are a lot of reasons why you may wish to boot into a different runlevel. For example, it’s common for system administrators to boot into the command line, and only start a graphical interface when deemed necessary.
For this functionality, you need to make sure your default runlevel is set to 3, and not 5.
In the past, one was required to edit the /etc/inittab file to define the default runlevel at startup. You may still find this to be the case on some distributions.
If working with an operating system that has not been upgraded for a few years, you’ll still find this method to be relevant for you.
In the screenshot above, runlevel 5 is currently set to the default runlevel for the startup.
As of 2016, most major Linux distributions have phased out the /etc/inittab file in favor of systemd targets – we’ll cover the differences later in this article.
You may find that your system doesn’t have the /etc/inittab file at all, or your inittab file may advise you to use systemd instead like, in this screenshot from our CentOS system.
To check the current default target of your system:
In the screenshot above, the reply back from the system is “graphical.target”. As you can probably guess, this is the equivalent to runlevel 5.
To see the other available targets and the runlevels they are associated with, type:
These symbolic links tell us that the systemd targets pretty much operate the same way runlevels do. So, how can we change the default runlevel (or target) at startup? We need to create a new symbolic link, like this:
This command will change our default runlevel to 3, so the next time we reboot, our system will be in runlevel 3 instead of 5. If you wanted a different runlevel, you would just substitute a different number in place of the “3” in the command.
For reference, the -f switch in that command indicates that the target file should be removed before creating the new link. You could also just remove it first with a simple rm command.
You can confirm that the change was made successfully with the “systemctl get-default” command again.
Runlevel 3 vs. runlevel 5
The two runlevels you will hear about and work with the most are going to be 3 and 5. It basically boils down to this: runlevel 3 is a command line, and runlevel 5 is a graphical user interface.
Of course, not every distribution follows this convention, and your system could be configured by an admin so that these runlevels have even more differences.
But, in general, that’s how it works. If you want to see what services are enabled at both of these runlevels, we cover that in the next section.
List services that are enabled at a particular runlevel
Up till recent years, “chkconfig –list” was the command to list the services that would be enabled at different runlevels. If your operating system is up to date, that command may give you an error or defer you over to systemd.
If we want to see what services will be started when we boot into graphical mode (runlevel 5), we can run this command:
To see the services that run by default on other runlevels, just replace “graphical.target” with the name of the target you need to see.
Under which runlevel will a process run?
If you’d like to see which runlevel(s) a specific service runs at, you can use this command:
For example, if you wanted to see at which runlevel the SSH daemon will run, you would type:
According to the output in the above screenshot, the SSH service will start on runlevels 2, 3, and 4 (multi-user.target)
How to change the runlevel of an application?
As seen above, our SSH service is only running at runlevels 2-4 (multi-user.target). What if we also want it to start when we boot into a graphical interface – runlevel 5 (graphical.target)? We could apply that configuration with the following command:
Security issues with runlevels in Linux
As we said earlier in this article, the point of Linux runlevels is to give an administrator control over what services run under certain conditions. Having this type of granular control over your system enhances security since you can be sure that there are no extraneous services running.
The problem can arise when an administrator is unaware of exactly what services are running, so he doesn’t bother to secure those attack surfaces.
You can use the methods in this guide to configure your default runlevel and to control which applications are running. These practices will not only free up system resources but also keep your server more secure.
Remember to only use the runlevel you need. For example, there is no sense in starting runlevel 5 (graphical interface) if you only plan to use the terminal.
Changing to a different runlevel will introduce multiple new services, some of which may run completely in the background, and you may forget to secure them.
Which runlevel is the best for me?
Determining which runlevel is the best for you all depends on the situation. Generally, you are probably going to be using runlevels 3 and 5 on a regular basis.
If you are comfortable with the command line and don’t need a graphical interface, runlevel 3 (on most distributions) is going to be best for you.
This will keep unnecessary services from running. On the other hand, if you want more of a desktop experience and a graphical interface to use various apps, etc., then runlevel 5 will be your preferred runlevel.
If you need to perform maintenance on a production server, runlevel 1 suits that situation well. You can use this runlevel to ensure that you are the only one on the server (the network service is not even started), and you can perform your maintenance uninterrupted.
In rare cases, you may even need to use runlevel 4. This would only be in particular situations where you or the system administrator has a custom configured runlevel. We will cover how to do that in the next section.
As you have probably assumed, you won’t (and can’t) run your system in runlevels 0 or 6, but it’s possible to switch to them just to reboot or power off. Doing so shouldn’t ordinarily be necessary since there are other commands that do that for us.
Can we create a new runlevel in Linux?
It is possible to create a new runlevel in Linux, but it’s extremely unlikely that you would ever need to do that. If you were determined to do it anyway, you can start by copying one of the existing systemd targets, and then editing it with your own customizations.
The targets are located in:
If you wanted to base your new runlevel/target off of graphical.target (runlevel 5), copy that directory to your new target directory.
After that, create a new “wants” directory, like so:
And then symlink the additional services from /usr/lib/systemd/system that you want to enable for your new runlevel.
I hope you find the tutorial useful. Keep coming back.
Источник