Управление пользователями
Еще в «Терминале» есть возможность добавления новых или удаления старых пользователей, редактирования или просмотра информации о них и т.д.
- whoami – называет имя пользователя, активированного на данный момент.
- useradd – открывает нового пользователя, при этом после введения можно указать конкретное имя.
- userdel – удаляет конкретного пользователя и связанные с ним данные.
- usermod – меняет параметры учетной записи пользователя, в том числе перемещает папку или даже назначает дату блокировки профиля.
- passwd – меняет пароли для учетных записей, используется в комбинации с конкретными командами.
КОМАНДА tcpdump В СИСТЕМАХ LINUX
Команда tcpdump предназначена для захвата и отображения информации о пакетах.
Перед началом захвата пакетов утилитой tcpdump сначала нужно посмотреть список доступных интерфейсов от root:
Если нужно захватить трафик на eth0, то следует использовать опцию -i eth0
Захват трафика определённого хоста
Вы можете отфильтровать трафик, исходящий от определенного хоста. Например, чтобы найти трафик, идущий от и до хоста 8.8.8.8, используйте команду:
Для приходящего трафика от 8.8.8.8 используйте:
Для исходящего трафика на 8.8.8.8 используйте:
Захват трафика подсети
Вы также можете захватывать трафик в определенную сеть и из нее, используя следующую команду:
или же:
Можно отфильтровать по источнику или месту назначения.
Поступающий трафик:
Исходящий трафик:
Захват трафика по портам
Захватить только трафик DNS-порта 53:
Для конкретного хоста:
Чтобы захватить только HTTPS-трафик:
Чтобы захватить все порты, кроме 80 и 25:
Как добавить алиас в сетевой интерфейс?
The ifconfig utility allows you to configure additional network interfaces using the alias feature. To add the alias network interface of eth0, use the following command. Please note that the alias network address is in the same subnet mask. For example, if your eth0 network ip address is 172.16.25.125, then the alias ip address must be 172.16.25.127.
Утилита ifconfig позволяет настраивать дополнительные сетевые интерфейсы с помощью функции alias. Чтобы добавить alias сетевого интерфейса eth0, используйте следующую команду
Обратите внимание, что сетевой адрес псевдонима находится в той же маске подсети. Например, если ip-адрес сети eth0 — 172.16.25.125, то ip-адрес псевдонима должен быть 172.16.25.127
~]# ifconfig eth0:0 172.16.25.127
Затем проверьте только что созданный alias сетевого интерфейса, используя команду «ifconfig eth0:0«.
~]# ifconfig eth0:0 eth0:0 Link encap:Ethernet HWaddr 00:01:6C:99:14:68 inet addr:172.16.25.123 Bcast:172.16.25.63 Mask:255.255.255.240 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 Interrupt:17
Как использовать команду ip
Утилита является частью пакета iproute2, который установлен во всех современных дистрибутивах Linux.
Синтаксис команды следующий:
OBJECT — это тип объекта, которым вы хотите управлять. Наиболее часто используемые объекты (или подкоманды):
- ( ) — отображение и изменение сетевых интерфейсов.
- ( ) — отображение и изменение IP-адресов.
- ( ) — отображение и изменение таблицы маршрутизации.
- ( ) — Отображение и управление соседними объектами (таблица ARP).
Объект может быть написан в полной или сокращенной (краткой) форме. Чтобы отобразить список команд и аргументов для каждого объекта, введите .
При настройке сетевых интерфейсов вы должны выполнять команды как root или пользователь с привилегиями sudo . В противном случае команда .
Конфигурации, установленные с помощью команды , не являются постоянными. После перезапуска системы все изменения теряются. Чтобы сделать изменения постоянными, вам необходимо отредактировать файлы конфигурации конкретного дистрибутива или добавить команды в сценарий запуска.
Команда id
Команда id используется для получения информации по текущему пользователю. В следующем примере, я попытался установить анализатор сетевого трафика Wireshark, на что система отреагировала сообщением, что я не могу выполнить данную команду, т.к. не имею прав суперпользователя (root)
После этого, чтобы проверить своего пользователя и группу, я выполнил команду и обратил внимание, что работал под учетной записью обычного пользователя diego в группе diego:
Для исправления ситуации необходимо произвести вход под учетной записью привилегированного пользователя (root) или прибегнуть к помощи команды .
Команда curl
Команда curl позволяет взаимодействовать с внешними ресурсами посредством URL-адресов. Часто данная команда применяется для определения того, может ли ваше приложение связаться с другой службой, например, с базой данных, или для проверки работоспособности вашей службы.
Представьте, что у нас есть база данных MongoDB, которая не может связаться с внешним приложением, выдавая при этом сообщение об ошибке HTTP 500:
Параметр выводит информацию о заголовке HTTP-запроса, а параметр отвечает за тихий (silent) режим, при котором опускается тело HTTP-ответа от сервера. В то же время, проверка подключения к базе данных с локального хоста проходит успешно:
Так в чем же может быть проблема? Для начала необходимо проверить, можем ли мы с хоста, на котором установлено наше приложение, достучаться до других ресурсов, кроме базы данных:
Вроде всё в порядке. Теперь попробуем связаться с базой данных. Т.к. для подключения к базе данных наше приложение использует имя хоста базы данных, то сначала попробуем выполнить следующую команду:
Вывод команды означает, что заданный URL-адрес недоступен или хост не имеет соответствующим образом настроенного DNS-сервера, который можно использовать для сопоставления имени и IP-адреса.
Управление пакетным менеджером
В «Терминале» операционной системы Linux есть довольно интересная функция – инсталляция приложений и процессов из предустановленных пакетов. В некоторых системах они могут отличаться, поэтому я укажу примеры для самых востребованных версий.
Debian, Ubuntu, Linux Mint – apt
- sudo apt install имя_пакета – устанавливает необходимый пакет.
- sudo apt-add-repository адрес_ресурса – добавляет сторонний ресурс для скачивания программ оттуда.
- sudo apt update – обновляет информацию об установленных пакетах программ.
- sudo apt upgrade – обновляет все содержащиеся пакеты до самых свежих версий.
- sudo apt remove имя_пакета – удаляет выбранный пакет данных.
- sudo apt purge имя_пакета – деинсталлирует определенный пакет со всеми зависимостями, если есть необходимость освободить место на диске.
- sudo apt autoremove – удаляет все ненужные связи, безымянные пакеты и прочие временные файлы.
Red Hat, Fedora, CentOS – dnf
- sudo dnf install имя_пакета – устанавливает необходимый пакет.
- sudo dnf config-manager —add-repo адрес_репозитория – добавляет сторонний ресурс для скачивания оттуда программ.
- sudo dnf upgrade – обновляет существующие пакеты до самых свежих.
- sudo dnf remove имя_пакет – удаляет ненужный пакет.
- sudo dnf autoremove – удаляет все ненужные зависимости.
Arch Linux, Manjaro – pacman
- sudo pacman -S имя_пакета – устанавливает пакет процессов или приложений.
- sudo yaourt -S имя_пакета – устанавливает пакет из ресурса AUR, если его нет на главном ресурсе.
- sudo pacman -Sy – обновляет информацию о пакетах.
- sudo pacman -Syu – обновляет все пакеты до новейших версий.
- sudo pacman -R имя_пакета – удаляет ненужные комплекты приложений и процессов.
- sudo pacman -Rs имя_пакета – деинсталлирует ненужный пакет со всеми зависимостями.
Отображение и изменение IP-адресов
При работе с объектом команды принимают следующий вид:
Наиболее часто используемые КОМАНДЫ объекта : , и .
Отображение информации обо всех IP-адресах
Чтобы отобразить список всех сетевых интерфейсов и связанный с ними IP-адрес, введите следующую команду:
Результат будет выглядеть примерно так:
Вы получите тот же результат, если наберете опустить команду и наберете: .
Если вы хотите отображать только IP-адреса или , используйте или .
Отображение информации об одном сетевом интерфейсе
Чтобы получить информацию о конкретном сетевом интерфейсе, используйте за которым следует имя устройства. Например, чтобы запросить , вы должны ввести:
Назначьте IP-адреса интерфейсу
Чтобы назначить IP-адрес интерфейсу, используйте следующий синтаксис:
Где — это имя интерфейса, а — это IP-адрес, который вы хотите назначить интерфейсу.
Чтобы добавить адрес с сетевой маской 24 к устройству , вы должны ввести:
В случае успеха команда не покажет никаких результатов. Если интерфейс не существует, вы получите сообщение « .
Назначьте несколько IP-адресов одному интерфейсу
С помощью вы можете назначить несколько адресов одному интерфейсу. Например:
Чтобы подтвердить, что IP-адреса назначены, введите или :
Удалить / удалить IP-адрес из интерфейса
Синтаксис для удаления IP-адреса из интерфейса следующий:
IFNAME — это имя интерфейса, а ADDRESS — это IP-адрес, который вы хотите удалить из интерфейса.
Чтобы удалить адрес с устройства eth0, введите:
Работа с текстом
Парочка полезных команд для взаимодействия с любыми видами текстов на сервере через SSH.
cat — показывает текст из выбранного файла. В качестве аргумента передаем этой утилите текстовый документ, и cat выведет в консоль его содержимое. Синтаксис:
cat путь до файла, содержимое которого надо осмотреть
Чтобы взглянуть на содержимое файла timeweb.txt, который лежит на рабочем столе, напишем в терминал:
cat ~/Desktop/timeweb.txt
head — это «голова». Она работает по схожему с cat принципу. Отображает текст из файлов, где он имеется. Разница заключается в количестве отображаемого контента. Пользователь сам выбирает, сколько строчек текста вывести на экран, поставив аргумент -n. Команда head -n 4 ~/Documents/timeweb.txt покажет только первые четыре строки документа timeweb.txt из папки Documents.
tail — это «хвост». Работает, как head, но с противоположной стороны. Команда tail -n 8 ~/Documents/timeweb.txt покажет только первые восемь строк документа timeweb.txt из папки Documents.
touch — одна из множества команд для SSH, которую используют не по назначению. У нее весьма специфичная задача по изменению времени последнего открытия отдельных элементов файловой системы. Но ее быстро перепрофилировали чуть ли не в стандартный метод создания файлов. touch ~/Desktop/timeweb.html создаст HTML-документ с именем Timeweb на рабочем столе.
vi — используя с дополнительными аргументами, можно создавать новые текстовые файлы. Например vi /путь до директории, где нужно создать новый текстовый файл/. Или же редактировать уже существующие. Чтобы изменить содержимое какого-нибудь файла в домашней папке, надо ввести: vi /home/имя учетной записи/kakoy-to-tekstoviy-file.txt. Альтернативой vi может служить nano. Более современный и лояльный к новичкам редактор. К сожалению, может отсутствовать в системе по умолчанию и требовать установки.
wc путь до файла — показывает количество символов, количество строк и слов в выбранном текстовом документе.
grep — ищет конкретный кусочек текста в большом документе или распечатке из консоли. Чтобы дать понять, как он работает, покажу пример. Буду искать слово «немного» в файле timeweb.txt, лежащем у меня на рабочем столе. Сделаю это одной командой cat ~/Desktop/timeweb.txt | grep немного. Перед grep я использовал cat, чтобы вывести содержимое документа в консоль, а потом отфильтровать.
diff — сравнивает два файла и наглядно показывает строки, в которых обнаружились различия. Синтаксис: diff название первого файла название второго файла. Это может выглядеть так:
diff timeweb-1.html timeweb-2.html
Netstat
Netstat – это мощная утилита, которая может выводить сетевые соединения, таблицы маршрутизации, статистику интерфейсов, маскарадить соединения и т.д.
Мы будем использовать его для достижения целей этого руководства.
Установка Netstat
В системах на основе Debian и Debian, таких как Ubuntu, используйте apt.
В системах на базе Red Hat Enterprise Linux и Red Hat используйте yum,
В системах на основе Arch используйте pacman.
Просмотр сетевых процессов
Во-первых, давайте рассмотрим процессы.
Для этого введите следующую команду:
В этой команде t отображает TCP-соединения, u отображает UDP-соединения, l показывает только прослушивающие сокеты, p показывает программу, к которой принадлежит соединение, e показывает расширенную информацию, а n представляет адреса, пользователей и порты в числовом виде.
При рассмотрении модели клиент-сервер, на которой основано большинство сетевого программного обеспечения, процессы можно рассматривать как программное обеспечение, работающее в «серверном» режиме
У каждого процесса вы можете увидеть используемый протокол, локальный адрес и порт, который он слушает, пользователя, под которым он работает, и имя PID/программы.
Здесь следует отметить одно важное отличие.
Для подключений tcp4/udp4 (просто перечисленных как tcp и udp), где локальный адрес указан как 0.0.0.0, процесс прослушивает соединения с любого компьютера, который может подключиться к нему по сети, тогда как когда он указан как 127.0 .0.1 он только прослушивает соединения на локальном хосте (машине, на которой он запущен или сам) и не может быть подключен к другим компьютерам в сети. Такое же различие справедливо для tcp6/udp6 при сравнении локального адреса : : (обращенного к сети) и ::1 (только localhost).
Теперь давайте посмотрим на все текущие сетевые подключения.
Для этого введите следующую команду, которая похожа на предыдущую, за исключением того, что мы используем -a для просмотра всех сокетов вместо -l, чтобы просто просмотреть прослушивающие сокеты.
Эта команда не только показывает нам, какое программное обеспечение прослушивает соединения в качестве «серверов», но также показывает нам установленные в настоящее время соединения с этим программным обеспечением и любые установленные сетевые соединения, которые мы используем с использованием программного обеспечения, выступающего в качестве «клиента», такого как веб-браузер.
Просмотр установленных подключений
Вы можете оказаться в ситуации, когда хотите просмотреть только соединения с типом ESTABLISHED.
ss
Команда netstat долгое время была фаворитом у системных администраторов, однако недавно ее заменила команда ss, которая может похвастаться тем, что работает быстрее, проще и удобочитаемее, чем netstat.
Давайте посмотрим, как выполнить те же действия, что и выше, с помощью ss.
Ss также имеет параметр -e для просмотра расширенной информации, но этот параметр был опущен в приведенных ниже примерах, поскольку он дает дополнительную информацию, которая может привести к менее читаемому выводу.
Просмотр процессов
Для просмотра всех процессов введите следующее:
В этой команде t отображает TCP-соединения, l показывает только прослушивающие сокеты, u отображает UDP-соединения, n представляет адреса, пользователей и порты в числовом виде, а p показывает программу, к которой принадлежит соединение.
Просмотреть все сетевые подключения
Чтобы просмотреть все сетевые соединения, введите следующее, где a заменяет l и показывает все сетевые сокеты, а не только слушающие.
Просмотр установленных подключений
Если -a или -l не включены, то ss покажет только установленные соединения.
Для просмотра только установленных соединений введите следующее.
lsof
На случай, если вам не хватило netstat и ss, мы представляем lsof. Lsof используется для вывода списка открытых файлов.
GNU/Linux унаследовал принцип проектирования UNIX, согласно которому все является файлом; это включает в себя и сетевые подключения.
В результате lsof можно использовать для просмотра сетевой активности аналогично вышеупомянутым командам.
top — мониторинг активности процессов
Команда top отображает процессы Linux. Она позволяет представить работающую систему в реальном времени, то есть в момент фактической активности процесса. По умолчанию она отображает наиболее ресурсоемкие задачи, выполняемые на сервере, и обновляет их список каждые пять секунд.
Часто используемые горячие клавиши с лучшими инструментами мониторинга Linux
Ниже приведен список полезных горячих клавиш:
Горячая клавиша | Применение |
t | Отображает, включена или выключена опция представления сводных данных |
m | Отображает, включена или выключена опция представления информации о памяти |
A | Сортирует задачи по активности потребления различных системных ресурсов. Полезно для быстрой идентификации задач, требующих высокой производительности в системе. |
f | Вход в интерактивный экран конфигурации для команды top. Полезно для настройки top под конкретную задачу. |
o | Позволяет выбрать способ упорядочивания информации для команды top. |
r | Выполняет команду renice. |
k | Выполняет команду kill. |
z | Включает или выключает цвет/моно |
Получение статистики для различных сетевых протоколов
Команда netstat позволяет видеть статистические данные по использованию всех доступных в системе протоколов. Для этого нужно использовать ключ -s:
$ netstat -s Ip: 671349985 total packets received 0 forwarded 345 incoming packets discarded 667912993 incoming packets delivered 589623972 requests sent out 60 dropped because of missing route 203 fragments dropped after timeout Icmp: 242023 ICMP messages received 912 input ICMP message failed. ICMP input histogram: destination unreachable: 72120 timeout in transit: 573 echo requests: 17135 echo replies: 152195 66049 ICMP messages sent 0 ICMP messages failed ICMP output histogram: destination unreachable: 48914 echo replies: 17135 Tcp: 4442780 active connections openings 1023086 passive connection openings 50399 failed connection attempts 0 connection resets received 44 connections established 666674854 segments received 585111784 segments send out 107368 segments retransmited 86 bad segments received. 3047240 resets sent Udp: 4395827 packets received 31586 packets to unknown port received. 0 packet receive errors 4289260 packets sent
Как видно, выводимая статистика отображается с разбивкой по разделам для каждого протокола. Здесь содержатся очень полезные сведения для анализа и поиска неполадок в работе сети.
Также для команды netstat есть ещё один полезный ключ, позволяющий выводить обновлённые данные с интервалом в одну секунду. Этот ключ работает не в каждой связке с другими опциями. Однако, отслеживание интерфейсов в режиме реального времени с этим ключом очень удобно, например команда netstat -i -a -c будет выводить статистику по использованию всех интерфейсов в системе, в том числе и отключенных (ключ -a) автоматически каждую секунду — ключ -c.
Информацию о таблице маршрутизации позволяет получить ключ -r:
$ netstat -r -n Таблица маршрутизации ядра протокола IP Destination Gateway Genmask Flags MSS Window irtt Iface 192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eno1 192.168.2.0 0.0.0.0 255.255.255.0 U 0 0 0 eno0 127.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 lo
Все рассмотренные ключи предоставляют исчерпывающие возможности для получения информации об использовании сети в подавляющем большинстве случаев. Однако, команда netstat располагает кроме рассмотренных, куда более внушительным арсеналом опций, ознакомиться с которыми можно с помощью команды man netstat.
Команды для управления сетью
В стандартный функционал «Терминала» входит и просмотр данных по параметрам сети, скорости и качестве передачи данных.
- ip – команда для работы с сетью, благодаря наличию множества опций она многофункциональна. К примеру, добавив функцию address show, можно посмотреть информацию о сетевых адресах, а с route управлять маршрутизацией.
- ping – помогает определить качество подключения к сети или наличие его как такового.
- nethogs – выводит данные о количестве израсходованного трафика.
- traceroute – команда, аналогичная ping, но дополнительно дающая информацию о полном маршруте передачи пакетов, скорости доставки на каждом узле и так далее.
- mtr – мощная утилита для диагностики сети, совмещающая функционал команд ping и traceroute.
Команда tar
Команда tar позволяет заархивировать несколько файлов в один архив.
В качестве примера, давайте создадим каталог ravesli_docs, и поместим в него три файла: a.txt, b.txt и c.txt:
Теперь с помощью команды создадим архив ravesli.tar, содержащий все файлы из каталога ravesli_docs:
Просмотрев с помощью команды содержимое текущего каталога можно заметить каталог ravesli_docs и вновь созданный нами архив ravesli.tar:
Для распаковки архива применяется команда :
Также вы можете задействовать gzip-сжатие для архива (для этого необходимо добавить параметр ):
Для распаковки сжатого архива применяется связка параметров и :
Настройка сетевого интерфейса Linux
1. Синтаксис и опции ethtool
Синтаксис ethtool довольно простой, утилите достаточно передать опции и имя сетевого интерфейса, с которым вы хотите работать:
$ ethtool опции интерфейс параметры
Вот основные опции утилиты, которые мы будем использовать в этой статье:
- —version — выводит версию утилиты;
- -g, —show-ring — позволяет посмотреть информацию о буфере RX и TX пакетов;
- -G, —set-ring — позволяет установить размер буфера RX и TX пакетов, работает только для беспроводного интерфейса;
- -i, —driver — выводит имя используемого драйвера;
- -P, —show-permaddr — выводит постоянный MAC адрес устройства;
- -r, —negotiate — выполняет повторное согласование скорости передачи данных, если включено автоматическое согласование;
- -S, —statistics — выводит статистику;
- -s, —change — позволяет менять настройки сетевого интерфейса;
- -k, —show-offload — позволяет посмотреть какие технологии offload включены;
- —reset — позволяет сбросить настройки различных компонентов сетевой карты, для сброса всех настроек используйте значение параметра all;
Это далеко не все опции программы, все вы можете посмотреть выполнив такую команду в терминале, если программа установлена:
2. Установка ethtool
Обычно, утилита не поставляется по умолчанию вместе с дистрибутивом, но она есть в официальных репозиториях. Для установки утилиты в Ubuntu или Debian выполните:
Для установки ethtool linux в Fedora, CentOS или REHL выполните:
А для OpenSUSE команда будет выглядеть вот так:
3. Информация про сетевые интерфейсы
Сначала надо посмотреть список сетевых интерфейсов в системе. Для этого выполните такую команду:
В данном примере, я использовал фильтр egrep чтобы отсеять все интерфейсы, созданные контейнерами Docker, вам этого делать не обязательно. Здесь enp24s0 — это сетевой интерфейс Ethernet, который мы и будем использовать дальше. Выполнив утилиту ethtool без опций можно посмотреть текущие настройки сетевого интерфейса:
Обратите внимание на пункт Supported link modes, здесь перечислены поддерживаемые скорости передачи данных и режимы дуплекса для них. Скорость измеряется в мегабитах и обычно доступны значения 10, 100 и 1000
Режим дуплекса, выводимый в параметре Duplex отвечает за приём и передачу данных. При значении full сетевая карта может одновременно принимать и отправлять данные, а режиме half только принимать или отправлять данные. Текущая скорость передачи данных выводится немного ниже параметра Duplex.
Ещё есть параметр Advertised auto negotiation. Он отвечает за то будет ли скорость передачи данных и режим дуплекса настраиваться автоматически в зависимости от возможностей обоих соединённых устройств. По умолчанию этот параметр включён и рекомендуется его таким и оставить.
4. Изменение настроек интерфейса
Менять все эти настройки и многие другие можно с помощью опции -s. Например чтобы отключить автоматическое согласование параметров работы выполните:
Затем можно вручную установить скорость передачи данных:
А режим дуплекса в half:
Всё это можно объединить в одну команду:
После изменения скорости передачи данных надо снова поднять сетевой интерфейс:
Теперь при просмотре настроек сетевой карты вы увидите новые значения:
Чтобы посмотреть используемый драйвер используйте опцию -i:
6. Статистика интерфейса
Посмотреть статистику по переданных и полученных данных можно с помощью опции -S:
Сбросить эту статистику можно только выгрузив драйвер ядра, который используется для сетевой карты. Для этого сначала отключите сетевой интерфейс:
Затем выгрузите модуль ядра с драйвером:
Верните драйвер обратно и запустите устройство:
После этого статистика будет сброшена:
7. Управление светодиодом
Если в вашем компьютере установлено несколько сетевых карт и вам надо определить какой их них принадлежит то или иное имя в системе, можно использовать опцию -p. Ей надо передать количество секунд на протяжении которых светодиод на разъёме должен гореть:
Таким образом вы можете подсветить интерфейс ethtool.
8. Сохранение настроек
Все выполненные с помощью ethtool настройки актуальны только до перезагрузки. Чтобы их сохранить после перезагрузки надо создать скрипт, выполняющий нужные команды после старта системы или же использовать возможности network-scripts. Например в Ubuntu или Debian можно добавить команду, которая выполняет нужные настройки в файл /etc/network/if-pre-up.d/ethtool. Например:
Для CentOS следует добавить параметр ETHTOOL_OPTS в файл настройки сетевого интерфейса, Например: