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

Вопрос или проблема

Вывод lsns выглядит по-разному в зависимости от привилегий пользователя, который его запускает. Пользователь ubuntu и пользователь root получают разные результаты:

ubuntu@ubuntu:~$ lsns 
        NS TYPE   NPROCS    PID USER   COMMAND
4026531834 time        6 134628 ubuntu /lib/systemd/systemd --user
4026531835 cgroup      6 134628 ubuntu /lib/systemd/systemd --user
4026531836 pid         6 134628 ubuntu /lib/systemd/systemd --user
4026531837 user        5 134628 ubuntu /lib/systemd/systemd --user
4026531838 uts         6 134628 ubuntu /lib/systemd/systemd --user
4026531839 ipc         6 134628 ubuntu /lib/systemd/systemd --user
4026531840 net         6 134628 ubuntu /lib/systemd/systemd --user
4026531841 mnt         5 134628 ubuntu /lib/systemd/systemd --user
4026532290 user        1 134689 ubuntu /usr/bin/podman
4026532291 mnt         1 134689 ubuntu /usr/bin/podman
ubuntu@ubuntu:~$ 
ubuntu@ubuntu:~$ 
ubuntu@ubuntu:~$ sudo lsns
        NS TYPE   NPROCS    PID USER             COMMAND
4026531834 time      115      1 root             /sbin/init
4026531835 cgroup    115      1 root             /sbin/init
4026531836 pid       112      1 root             /sbin/init
4026531837 user      113      1 root             /sbin/init
4026531838 uts       112      1 root             /sbin/init
4026531839 ipc       115      1 root             /sbin/init
4026531840 net       115      1 root             /sbin/init
4026531841 mnt       101      1 root             /sbin/init
4026531862 mnt         1     25 root             kdevtmpfs
4026532284 mnt         1    414 root             /lib/systemd/systemd-udevd
4026532285 uts         1    414 root             /lib/systemd/systemd-udevd
4026532286 mnt         1    469 systemd-timesync /lib/systemd/systemd-timesyncd
4026532287 uts         1    469 systemd-timesync /lib/systemd/systemd-timesyncd
4026532288 mnt         1    572 systemd-network  /lib/systemd/systemd-networkd
4026532289 mnt         1    608 systemd-resolve  /lib/systemd/systemd-resolved
4026532290 user        1 134689 ubuntu           /usr/bin/podman
4026532291 mnt         1 134689 ubuntu           /usr/bin/podman
4026532292 mnt         1   5369 root             /usr/libexec/upowerd
4026532293 user        1   5369 root             /usr/libexec/upowerd
4026532295 mnt         2 134974 root             unshare --fork --pid --mount-proc /bin/bash
4026532296 pid         2 134975 root             /bin/bash
4026532297 mnt         2 134981 root             unshare --fork --pid --mount-proc /bin/zsh
4026532298 pid         1 134982 root             /bin/zsh
4026532345 uts         1    655 root             /lib/systemd/systemd-logind
4026532346 mnt         1    631 root             /usr/sbin/irqbalance --foreground
4026532347 mnt         1    655 root             /lib/systemd/systemd-logind
4026532348 mnt         1    678 root             /usr/sbin/ModemManager
ubuntu@ubuntu:~$

Кроме того, имя процесса инициализации системы Ubuntu отличается: systemd против /sbin/init. В чем причина этого? Спасибо.

Ответ или решение

Разница вывода команды lsns для разных пользователей в Linux

Команда lsns в Linux используется для отображения информации о пространствах имен (namespaces), которые предоставляет ядро операционной системы. Это полезный инструмент для системных администраторов и разработчиков, позволяющий увидеть, какие процессы находятся в каких пространствах имен. Однако вывод этой команды может существенно отличаться в зависимости от привилегий пользователя, который её запускает. Рассмотрим это подробнее на основе приведенного примера, когда пользователь ubuntu и суперпользователь root получают различные результаты при выполнении команды lsns.

Пример работы lsns

При запуске команды lsns от имени пользователя ubuntu, вывод включает в себя пространства имен, связанные с пользовательским процессом systemd, который работает в режиме пользователя:

ubuntu@ubuntu:~$ lsns 
        NS TYPE   NPROCS    PID USER   COMMAND
4026531834 time        6 134628 ubuntu /lib/systemd/systemd --user
...
4026532290 user        1 134689 ubuntu /usr/bin/podman

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

ubuntu@ubuntu:~$ sudo lsns
        NS TYPE   NPROCS    PID USER             COMMAND
4026531834 time      115      1 root             /sbin/init
...
4026532348 mnt         1    678 root             /usr/sbin/ModemManager

Причины различий в выводе

  1. Привилегии доступа: Пользователь ubuntu имеет ограниченные права и может видеть только те пространства имен, которые принадлежат ему или процессам, которые он запускал. В данном случае он видит только пространства имен systemd, запущенные в режиме пользователя, и podman, который также был инициирован его сессией.

  2. Системные пространства имен: Суперпользователь root имеет полные привилегии, позволяющие ему просматривать все пространства имен на системе, включая системные процессы, такие как /sbin/init (который представляет основное пространство имен инициализации системы) и другие фоновые процессы, которые работают с привилегиями root.

  3. Пользовательские и системные процессы: В выводе lsns для root видны системы инициализации, присваивающие пространства имен, которые обычно не видны для обычных пользователей. Это объясняет разницу в количестве процессов и их владельцах.

Стартовый процесс системы

Что касается разницы в названии процесса инициализации (/lib/systemd/systemd против /sbin/init), это связано с тем, что:

  • systemd является современным менеджером системных процессов и инициализации, который предназначен для замены классического инициализатора SysV. Он управляет процессами и службами в системе, обеспечивает параллельный запуск и конфигурацию.
  • /sbin/init — это устаревшее обозначение для инициализирующего процесса, которое часто используется в системах, где система инициализации еще не была заменена на systemd.

После того как systemd был принят в качестве стандартной системы инициализации во многих дистрибутивах Linux, такие как Ubuntu, его команда запуска может быть показана как /sbin/init, чтобы сохранить совместимость с традиционными инструментами и интерпретациями, использовавшимися ранее.

Заключение

Различия в выводе команды lsns для разных пользователей объясняются важными аспектами безопасности и управления процессами в системах на базе Linux. Суперпользователь root имеет доступ к полному набору процессов и пространств имен, что позволяет управлять системой на более глубоком уровне, тогда как обычные пользователи ограничены в возможностях доступа к критически важной информации и процессам. Это обеспечивает разделение прав и безопасность системы в целом.

Оцените материал
Добавить комментарий

Капча загружается...