Вопрос или проблема
Вывод 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
Причины различий в выводе
-
Привилегии доступа: Пользователь
ubuntu
имеет ограниченные права и может видеть только те пространства имен, которые принадлежат ему или процессам, которые он запускал. В данном случае он видит только пространства именsystemd
, запущенные в режиме пользователя, иpodman
, который также был инициирован его сессией. -
Системные пространства имен: Суперпользователь
root
имеет полные привилегии, позволяющие ему просматривать все пространства имен на системе, включая системные процессы, такие как/sbin/init
(который представляет основное пространство имен инициализации системы) и другие фоновые процессы, которые работают с привилегиямиroot
. -
Пользовательские и системные процессы: В выводе
lsns
дляroot
видны системы инициализации, присваивающие пространства имен, которые обычно не видны для обычных пользователей. Это объясняет разницу в количестве процессов и их владельцах.
Стартовый процесс системы
Что касается разницы в названии процесса инициализации (/lib/systemd/systemd
против /sbin/init
), это связано с тем, что:
systemd
является современным менеджером системных процессов и инициализации, который предназначен для замены классического инициализатора SysV. Он управляет процессами и службами в системе, обеспечивает параллельный запуск и конфигурацию./sbin/init
— это устаревшее обозначение для инициализирующего процесса, которое часто используется в системах, где система инициализации еще не была заменена наsystemd
.
После того как systemd
был принят в качестве стандартной системы инициализации во многих дистрибутивах Linux, такие как Ubuntu, его команда запуска может быть показана как /sbin/init
, чтобы сохранить совместимость с традиционными инструментами и интерпретациями, использовавшимися ранее.
Заключение
Различия в выводе команды lsns
для разных пользователей объясняются важными аспектами безопасности и управления процессами в системах на базе Linux. Суперпользователь root
имеет доступ к полному набору процессов и пространств имен, что позволяет управлять системой на более глубоком уровне, тогда как обычные пользователи ограничены в возможностях доступа к критически важной информации и процессам. Это обеспечивает разделение прав и безопасность системы в целом.