Какой из перечисленных портов может быть занят процессом linux без прав суперпользователя

Обновлено: 29.06.2024

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

Как же вычислить, какие запущенные процессы соотносятся с занятыми портами? Как определить, что за процесс открыл udp-порт 2222, tcp-порт 7777 и т.п.? Получить подобную информацию мы можем нижеперечисленными методами:

netstat утилита командной строки, показывающая сетевые подключения, таблицы маршрутизации и некоторую статистику сетевых интерфейсов; fuser утилита командной строки для идентификации процессов с помощью файлов или сокетов; lsof утилита командной строки, отображающая информацию об используемых процессами файлах и самих процессах в UNIX-системе; /proc/$pid/ в ОС Linux /proc для каждого запущенного процесса содержит директорию (включая процессы ядра) в /proc/$PID с информацией об этом процессе, в том числе и название процесса, открывшего порт.

Использование вышеперечисленных способов может потребовать права супер-пользователя.

Теперь давайте рассмотрим каждый из этих способов по отдельности.

Пример использования netstat

Введём в командную строку команду:

Получим примерно такой результат:

Примерный результат выполнения команды:

Результат будет примерно такой:

Пример использования fuser

Для того, чтобы вычислить процесс, занимающий порт 5050, введём команду:

И получим результат:

Аналогичным образом, как мы делали выше, можно посмотреть процесс в его директории /proc/$PID , в которой можно найти много интересной дополнительной информации о процессе, такую как рабочая директория процесса, владелец процесса и т.д., но это выходит за рамки этой статьи.

Пример использования lsof

При использовании lsof введите команду по одному из шаблонов:

Пример реального использования:

На выходе получим примерно следующее:

Получить информацию о процессе также можно следующим проверенным способом:

В этом выводе можно выделить следующие параметры:

Надеюсь, у меня получилось доступно объяснить, как определить процесс по порту в Linux-системах, и теперь у вас ни один порт не останется неопознанным!

В современных операционных системах не обойтись без взаимодействия программ с внешней средой и интернетом. Для этого используется специальные механизмы - порты.

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

Что такое порты и зачем они нужны?

Порты - это более широкое понятие, чем просто возможность подключится к удалённому компьютеру через сеть. Когда процесс хочет обратиться к серверу, ему нужно каким-либо образом идентифицировать, к какому серверу он хочет подключиться. Если мы знаем 32 битный IP-адрес сервера, то мы можем без проблем к нему подключиться.

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

Открытые порты Ubuntu

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

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

netstat

Это одна из самых старых и популярных утилит для просмотра открытых портов. Мы описывали её в отдельной статье, а сейчас просто кратко рассмотрим, как с ней работать. Чтобы посмотреть открытые порты, выполните такую команду:

netstat -ntlp | grep LISTEN

Опция -l сообщает, что нужно посмотреть прослушиваемые порты, -p показывает имя программы, -t и -u - отображают TCP и UDP порты, а -n показывает ip адреса в числовом виде. Дальше нужно выбрать только те строки, где встречается слово LISTEN, чтобы найти только прослушиваемые порты.

Здесь в первом столбце отображается протокол, затем два столбца - это данные, которые нам ничего полезного не говорят, а за ними уже идут локальный и внешний адреса. Если локальный адрес - 127.0.0.1, то это значит, что сервис доступен только на этом компьютере, а значение 0.0.0.0 или :: означает любой адрес, к таким сервисам могут подключаться из сети. В нашем примере это Apache и systemd-resolvd.

Утилита lsof тоже предназначена для просмотра открытых соединений. Основная ее функция - просмотр открытых файлов, но с её помощью можно посмотреть открытые порты Ubuntu. Используйте такие параметры:

sudo lsof -nP -i | grep LISTEN


Опции -n и -P указывают, что необходимо отображать не только цифровые имена портов и ip-адреса, но и имена доменов и сервисов. Опция -i отображает все сетевые подключения, а с помощью grep мы фильтруем только те, которые находятся в состоянии прослушивания.

Представление информации немного отличается, но в общем и целом мы видим всё ту же информацию. Кроме неё, здесь ещё отображается имя пользователя, от которого запущен процесс. Вы можете не ограничиваться фильтрами и посмотреть все доступные соединения:


Команда ss - это улучшенная версия netstat. Точно так, как для замены ifconfig была придумана утилита ip, ss разработали для замены netstat. Команда будет выглядеть следующим образом:


Все данные здесь выводятся почти так же, как и в netstat, поэтому вы легко во всём разберётесь. В дополнение к выше перечисленным командам: возможно, вам нужно будет посмотреть на правила брандмауэра iptables, чтобы понять, какие порты закрыты с его помощью:


В нашем примере нет никаких ограничений. Политика по умолчанию - ACCEPT. На промышленных серверах может применяться политика DENY, а нужные порты будут разрешены с помощью правил.

Сетевой сканер nmap позволяет проверить список портов Ubuntu так, как бы это делал злоумышленник при попытке атаки на вашу систему. Здесь вы будете видеть все порты, которые видны снаружи. Но для сканирования нужно использовать внешний ip-адрес. Не сетевой ip-адрес провайдера, а адрес вашего компьютера, например, в локальной сети чаще всего используется 192.168.1.2. Посмотреть ip вашего сетевого интерфейса можно с помощью команды ifconfig:


Чтобы просто просканировать открытые порты Ubuntu, будет достаточно выполнить:

nmap -sT 192.168.1.3


Также можно выполнить комплексное сканирование всех уязвимостей. Важно отметить, что команда не находит все уязвимости, а проверяет только самые простые. Для активации этого режима используется опция -A:

sudo nmap -A 192.168.1.3


Как пользоваться nmap, читайте в отдельной статье.

Выводы

В этой статье мы рассмотрели, как проверить порты Ubuntu с помощью нескольких утилит. Все они выводят подробную информацию, но для каждого отдельного случая может лучше подойти только одна из них. Например, проверять какие порты видят другие компьютеры извне лучше с помощью nmap. А чтобы посмотреть, какие службы или сокеты доступны локально, лучше применять netstat или ss.

Проверяйте, какие порты открыты, и если они не нужны, то закройте их в брандмауэре или просто отключите сервис. Иначе они ставят под угрозу безопасность вашей системы. Например, у меня на ноутбуке открыт порт SSH, и я не раз наблюдал в логах попытки перебрать пароль от каких-то роутеров из локальной сети. И если даже вас некому ломать, это могут сделать вирусы. Так что будьте осторожны, и не оставляйте открытые порты, если в этом нет необходимости.

Как вы знаете, Linux очень серьезно относится к управлению пользователями и предоставлению им прав на работу с системой. Обычный пользователь может записывать файлы только в свой каталог и каталог /tmp/. Также есть возможность читать некоторые файлы в корневой файловой системе. Но вы не можете устанавливать программы, ведь для этого нужно право на запись, не можете изменять атрибуты файлов, не можете запускать сервисы, не можете читать некоторые файлы логов и еще много чего не можете.

В Linux управлять корневой файловой системой и создавать там файлы имеет право только пользователь root.

В этой статье мы рассмотрим какие программы нужны для того, чтобы получить права root пользователя linux, как они работают, как выполнять программу с правами root от обычного пользователя и как запускать графические программы с правами root. А также выясним что такое sudo в чем разница su или sudo.

Права суперпользователя в Linux

Очень долго перечислять чего не может обычный пользователь Linux, проще сказать на что у него есть право, а именно при стандартной настройке полномочий для файлов в Linux, обычный пользователь может:

  • Читать, писать и изменять атрибуты файлов в своем каталоге
  • Читать, писать, изменять атрибуты файлов в каталоге /tmp
  • Выполнять программы там, где это не запрещено с помощью флага noexec
  • Читать файлы, для которых установлен флаг чтения для всех пользователей.

Если же нужно сделать что-то большее нам понадобятся права root пользователя linux. У root есть право делать все в вашей файловой системе независимо от того какие права установлены на файл.

Чтобы войти под пользователем root можно переключиться в одну из виртуальных консолей, например, с помощью сочетания клавиш Ctrl+Alt+F1 и затем ввести логин root и пароль root пользователя.

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

Можно поступить полностью противоположным путем, ввести логин root и его пароль в графическом менеджере входа, чтобы окружение рабочего стола работало от имени root, и мы получаем все права root linux, но такой вариант крайне не рекомендованный, и очень опасный, вы можете случайно повредить всю систему. Поэтому этот способ был отключен во многих менеджерах входа.

Переключение на суперпользователя в терминале

Теперь мы подошли к более интересному и практичному. С помощью специальных утилит вы можете переключить текущий эмулятор терминала в окружения суперпользователя и выполнять все следующие команды не от своего имени, а от его, таким образом, дав программе права root linux. Для этого существует утилита su. Вообще говоря, эта утилита позволяет не только переключаться на пользователя root но и на любого другого пользователя, но по умолчанию используется именно root. Рассмотрим ее подробнее. Команда su linux имеет следующий синтаксис:

$ su опции пользователь

Вот ее основные опции:

  • -c, --command - выполнить команду
  • -g, --group - установить основную группу пользователя (только для root)
  • -G --supp-group - дополнительные группы пользователя (только для root)
  • -, -l, --login - режим входа, будут очищены и инициализированы с учетом нового пользователя все переменные окружения, а также изменен домашний каталог
  • -p, --preserve-environment - сохранить переменные окружения
  • -s, --shell - задать оболочку для входа
  • --version - отобразить версию программы.

Теперь немного поэкспериментируем, чтобы понять как работает команда su linux.

Сначала выполним su без параметров, но для начала создадим переменную окружения, чтобы проверить как с ними обходится эта команда:

Теперь смотрим что получилось:

whoami
pwd
echo $VAR
echo $PATH
exit

sudo

Из этих команд мы видим, что теперь мы пользователь root, но домашней директорией считается директория нашего предыдущего пользователя и наша переменная не сохранилась также изменилась переменная PATH, теперь там добавлен путь /sbin.

Теперь используем вход в режиме логина:

И повторим ту же комбинацию:

whoami
pwd
echo $VAR
echo $PATH
exit

sudo1

Та же ситуация, только на этот раз изменена ко всему еще и домашняя директория на директорию root. Но мы можем сохранить наши переменные окружения, если это нужно, для этого есть опция -p:

sudo2

Как видите, наша переменная осталась. Вы также можете переключится на любого другого пользователя. Например:

sudo3

Более подробно о команде su вы можете почитать в отдельной статье. Получение прав суперпользователя таким способом используется во многих дистрибутивах, например, Debian, OpenSUSE, ArchLInux, Gentoo и т д. Но в Ubuntu, как дистрибутиве для начинающих вход под пользователем root отключен. Это сделано потому, что это тоже не очень безопасно, вы можете забыть что выполняете команду от root и что-то натворить в системе. Поэтому переходим к следующей программе.

Получение прав root без переключения

Чтобы реализовать максимально безопасный интерфейс для работы с правами суперпользователя в Linux была разработана команда sudo. Давайте рассмотрим что такое sudo. Эта команда пишется перед каждой командой, которую нужно выполнить от имени суперпользователя, и для ее выполнения нужно ввести пароль уже не root, а всего лишь вашего пользователя. Так же, как и в предыдущей, в этой утилиты есть свои опции. Сначала рассмотрим синтаксис:

$ sudo опции команда

  • -b - выполнять запускаемую утилиту в фоне
  • -E - сохранить переменные окружения
  • -g - запустить команду от группы
  • -H - использовать домашний каталог
  • -l - показать список полномочий в sudo для текущего пользователя
  • -r - использовать для команды роль SELinux
  • -s - использовать оболочку
  • -u - запустить команду от имени пользователя, если не задано используется root
  • -i - не выполнять команду, а войти в оболочку, эквивалентно su -

Вы можете выполнить те же эксперименты, только для этой команды, чтобы понять как использовать команду sudo. Например:

Использование sudo - это рекомендованный способ выполнять команды от имени суперпользователя в Linux. Так вы не забудете с чем имеете дело и меньше всего рискуете повредить систему. Более подробно о команде sudo читайте здесь. Но остался еще один нерешенный вопрос - как быть с графическими утилитами? Ведь команда sudo их не запускает, а запускать графическую оболочку от имени root небезопасно. Это мы и рассмотрим далее.

Графически приложения от имени суперпользователя

Для запуска графических приложений от имени суперпользователя существуют специальные утилиты. Они сохраняют все необходимые переменные окружения и полномочия. В KDE это команда kdesu, а в Gnome команда gksu.

Просто наберите gksu или kdesu, а затем нужную команду:

Эта команда запустит файловый менеджер KDE с правами суперпользователя. В Gnome это будет выглядеть вот так:

Программа запросит пароль, уже в графическом окне, а потом откроется файловый менеджер.

Выводы

Вот и все. Теперь вы знаете как получить права суперпользователя в Linux, знаете как использовать команду sudo и в чем разница sudo или su. Теперь программы, требующие дополнительных привилегий в системе, не вызовут у вас проблем. Если остались вопросы, пишите в комментариях!

Root sudo Linux

В дистрибутивах Linux пользовательские привилегии предоставляются путем открытия доступа к root. Наличие таких прав позволяет использовать функциональность операционной системы более широко и выполнять необходимые действия в корневом каталоге.

Давайте детально обсудим, что может суперпользователь в Linux, как настроить root и для чего нужна команда sudo .

Предназначение root-прав в Linux

Права обычного пользователя в Linux крайне ограничены. Он может управлять только своим каталогом и открывать для чтения определенные файлы из корня. Доступ для их изменения или установки программ отсутствует, что делает привилегии суперпользователя крайне важными при настройке ОС и решении разных проблем. Обычный пользователь ограничивается следующим набором прав:

  • чтение, запись и изменение любых атрибутов пользовательской папки;
  • то же самое и для каталога /tmp ;
  • выполнение программ в любом месте, где нет ограничений;
  • чтение файлов с соответствующим атрибутом для всех пользователей.

При наличии рут-прав у юзера появляется гораздо больше возможностей и расширяются границы взаимодействия с операционной системой. Становятся доступными любые действия со всеми папками и файлами.

Безопасность использования прав суперпользователя

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

С серверной частью все гораздо сложнее, поскольку рут как таковой не предоставляет полной защиты. Часто используемые пароли взламываются путем перебора или поиском бэкдора. Поэтому не стоит полагаться исключительно на защиту паролем, если вы владеете файлами сайтов или используете сервер для других целей. Займитесь настройкой файрвола, если это повысит уровень защиты.

Команда sudo и примеры ее использования

Команда sudo тесно связана с root в Linux, поскольку отвечает за передачу прав суперпользователя и позволяет от его имени выполнять команды в Терминале. Существует несколько ее вариаций, использующихся при разных обстоятельствах. Подходит эта команда как для выполнения всего одного действия, так и для передачи прав на всю текущую сессию.

Использование команды sudo в Linux

Самый простой пример использования sudo – запуск программы от имени суперпользователя. Для этого вводится:

Еще sudo применяется для установки софта, команда в таком случае обретает вид:

Если же вы желаете использовать сразу несколько команд, например, введя sudo cat file.txt | grep text > file.txt , появится ошибка, поскольку при выполнении второй команды права суперпользователя отсутствуют, а значит, запись в файл невозможна. Решается такая ситуация добавлением sudo перед каждым выражением.

В следующем разделе статьи речь пойдет о передаче прав суперпользователя, что тоже реализуемо при помощи sudo . Я рассмотрю два полезных аргумента. Советую ознакомиться с ними, если хотите упростить выполнение действий через Терминал.

VDS Timeweb арендовать

Переключение на суперпользователя

Еще раз уточню, что команда sudo идеально подходит для получения необходимых привилегий без переключения учетной записи. Ее можно использовать как для выполнения одного действия, так и нескольких. Если вы желаете временно получить рут-права через эту команду, введите sudo -s или sudo -i . В первом случае домашний каталог остается текущим, а во втором меняется на /root.

Примерно так же работает и команда su , но она обладает дополнительными аргументами, которые следует уточнить:

  • -c – позволяет выполнить команду;
  • -g – устанавливает группу для пользователя;
  • -G – дополнительные группы для юзера;
  • - , -l , --login – один из режимов входа, при котором происходит переключение домашнего каталога;
  • -p – сохранение переменных окружения;
  • -s – выбор оболочки для выхода.

Есть вариант выполнить вход в оболочку под суперпользователем, но он имеет свои неудобства. Он заключается в переключении в доступную виртуальную консоль, что осуществляется комбинацией Ctrl + Alt + F1-F6 . Там понадобится ввести логин и пароль root для получения доступа. Главный недостаток этого метода – потеря возможности взаимодействия с графическим интерфейсом операционной системы.

Второй вариант – ввод такого же логина и пароля при входе через графическую форму авторизации. Так вы сразу получите доступ ко всем файлам, даже не надо будет вводить sudo . Однако неопытным пользователям такой метод не подходит, поскольку возникает риск удаления или изменения системных файлов, что иногда приводит к поломке ОС.

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

Предоставление и отзыв прав суперпользователя

Каждому пользователю в Linux можно предоставить root-права, добавив его в соответствующую группу. Точно так же их можно и отнять, если вдруг это понадобится. Рассмотрю три варианта действий.

Создание нового пользователя с root

Допустим, что вы, единственный юзер в Linux, хотите создать еще одну учетную запись с правами суперпользователя. В таком случае алгоритм действий обретет следующий вид:

sudo Linux

  1. Откройте Терминал и введите команду sudo adduser user (user замените на нужное имя пользователя).
  2. В консоли появятся инструкции по созданию нового пользователя. Присвойте пароль и подтвердите действие, чтобы завершить создание.
  3. Добавьте новую учетную запись в группу sudo, введя sudo usermod -aG sudo user ( user здесь тоже понадобится заменить).
  4. Проверьте выполненные действия, переключившись на новую учетную запись через su testuser . Для подтверждения введите пароль (при вводе символы не отображаются на экране).
  5. Выполните любую команду с sudo и убедитесь, что все прошло успешно.

Для существующей учетной записи

Если учетная запись уже добавлена, в консоли остается ввести только одну команду, чтобы добавить пользователя в группу sudo и разрешить ему получение рут-прав. Сама команда представлена ниже, вам остается только скопировать ее и поменять имя юзера.

Предоставление прав суперпользователя существующей учетной записи в Linux

Используйте предыдущую инструкцию для проверки внесенных изменений.

Откат прав суперпользователя

Если вдруг вы решили, что одна из учетных записей больше не должна состоять в группе sudo, отзовите права, введя команду:

Измените user на необходимое имя. Можете переключиться на эту учетную запись и убедиться в том, что теперь команды с sudo она выполнять не может.

Откат прав суперпользователя в Linux

Это была вся основная информация о правах суперпользователя в Linux. Вы знаете, что дают такие привилегии, как их правильно использовать и управлять пользователями. В качестве рекомендации скажу, что всегда нужно читать текст ошибок, появляющихся в Терминале, если что-то пошло не так. Это позволит вам быстрее решить проблему без траты времени на поиски в Google.

Читайте также: