linux – Does the root account always have UID/GID 0? – Super User

image Прошивки

Run a sudo command, specifying the password on the same line

sudo does not have an option to specify the password, but you can still do the authentication on the command line, like this:

echo password | sudo -u root --stdin

or just

echo password | sudo -S

referring to the sudo manual page:

-S, --stdin
Write the prompt to the standard error and read the password from the standard input instead of using the terminal device. The password must be followed by a newline character.

and

-u user, --user=user
Run the command as a user other than the default target user (usually root). The user may be either a user name or a numeric user ID (UID) prefixed with the ‘#’ character (e.g. #0 for UID 0). When running commands as a UID, many shells require that the ‘#’ be escaped with a backslash (‘’). Some security policies may restrict UIDs to those listed in the password database. The sudoers policy allows UIDs that are not in the password database as long as the targetpw option is not set. Other security policies may not support this.

But sudo has been under development a long time. Check the version:

-V, --version
Print the sudo version string as well as the version string of the security policy plugin and any I/O plugins. If the invoking user is already root the -V option will display the arguments passed to configure when sudo was built and plugins may display more verbose information such as default options.

The support for long options was added in 2022.

Besides authenticating, you need something for sudo to do, e.g., a command. I often check that it is working by doing just

sudo id

which should show the root user, e.g.,

uid=0(root) gid=0(root) groups=0(root)

Итак…

Если официальный контейнер nginx, ingress-nginx или ваш собственный останавливается или перезапускается с ошибкой:

bind() to 0.0.0.0:80 failed (13: Permission denied)

… это означает, что была попытка слушать порт 80 под непривилегированным (не 0) пользователем, и в наборе текущих разрешений не было CAP_NET_BIND_SERVICE. Для получения этих прав необходимо использовать xattr и установить (с помощью setcap) для файла nginx разрешение, как минимум, cap_net_bind_service ie.

Это файловое разрешение будет объединено с унаследованным набором (заданным вместе с ограничивающим набором из pod SecurityContext/capability/add/NET_BIND_SERVICE), и также размещено в наборе доступных разрешений. В результате получится cap_net_bind_service pie.

Это все работает до тех пор, пока securityContext/allowPrivilegeEscalation установлен в true и storage-драйвер docker/rkt (см. документацию docker) поддерживает xattrs.

Если бы nginx был умен по отношению к полномочиям, то cap_net_bind_service i было бы достаточно. Затем он мог бы использовать libcap для расширения прав от доступного набора до эффективного. Получив в результате cap_net_bind_service pie.

Помимо использования xattr, единственным способом получения cap_net_bind_service в не-root контейнере — это позволить Docker установить внешние разрешения (ambient capabilities). Но по состоянию на апрель 2022, это еще не реализовано.

Особенные случаи и замечания

Конечно, в реальности все не так просто, и есть несколько особых случаев, описанных в man-странице

. Наверное, самыми важными из них являются:

Примеры кода

с использованием libcap для добавления

CAP_NET_BIND_SERVICE

в эффективный набор разрешений. Он требует наличия разрешения

CAP_BIND_SERVICE p

для бинарного файла.

Ссылки (анг.):

Разрешения процессов (process capabilities)

Права обычных пользователей очень ограничены, в то время как права пользователя “root” очень обширны. Хотя процессам, запущенным под «root», часто не требуются все полномочия root.

Для уменьшения полномочий пользователя “root” разрешения POSIX (POSIX capabilities) предоставляют способ ограничить группы привилегированных системных операций, которые разрешено выполнять процессу и его потомками. По сути, они делят все «root»-права на набор отдельных привилегий. Идея capabilities была описана в 1997 году в черновике POSIX 1003.1e.

В Linux каждый процесс (задача) имеет пять 64-битных чисел (наборов), содержащих биты разрешений (до Linux 2.6.25 они были 32-битными), которые можно посмотреть в

/proc/<pid>/status
CapInh: 00000000000004c0
CapPrm: 00000000000004c0
CapEff: 00000000000004c0
CapBnd: 00000000000004c0
CapAmb: 0000000000000000


Эти числа (здесь показаны в шестнадцатеричной системе счисления) представляют собой битовые карты, в которых представлены наборы разрешений. Вот их полные имена:

  • Inheritable (наследуемые) — разрешения, которые могут наследовать потомки
  • Permitted (доступные) — разрешения, которые могут использоваться задачей
  • Effective (текущие, эффективные) — текущие действующие разрешения
  • Bounding (ограничивающий набор) — до Linux 2.6.25 ограничивающий набор был общесистемным атрибутом, общим для всех потоков, предназначенным для описания набора, за пределы которого разрешения расширяться не могут. В настоящее время это набор для каждой задачи и является лишь частью логики execve, подробности далее.
  • Ambient (наружные, начиная с Linux 4.3) — добавлены, чтобы легче предоставлять разрешения не-root пользователю, без использования setuid или файловых разрешений (подробности позже).

Если задача запрашивает выполнение привилегированной операции (например, привязку к портам < 1024), то ядро ​​проверяет действующий ограничивающий набор на наличие

. Если он установлен, то операция продолжается. В противном случае операция отклоняется с EPERM (операция не разрешена). Эти

CAP_

-определены в исходном коде ядра и нумеруются последовательно, поэтому

CAP_NET_BIND_SERVICE

, равный 10, означает бит 1 << 10 = 0x400 (это шестнадцатеричная цифра “4” в моем предыдущем примере).

Полный человекочитаемый список полномочий, определенных на данный момент, можно найти в актуальной man-странице capabilities(7) (приведенный здесь список только для справки).

Кроме того, есть библиотека libcap для упрощения управления и проверки полномочий. В дополнение к API библиотеки в пакет входит утилита capsh, которая, помимо прочего, позволяет показать свои полномочия.

# capsh --print
Current: = cap_setgid,cap_setuid,cap_net_bind_service eip
Bounding set = cap_setgid,cap_setuid,cap_net_bind_service
Ambient set =
Securebits: 00/0x0/1'b0
 secure-noroot: no (unlocked)
 secure-no-suid-fixup: no (unlocked)
 secure-keep-caps: no (unlocked)
 secure-no-ambient-raise: no (unlocked)
uid=0(root)
gid=0(root)
groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel),11(floppy),20(dialout),26(tape),27(video)

Здесь есть несколько запутанных моментов:

Разрешения файлов (file capabilities)

Иногда пользователю с ограниченным набором прав необходимо запустить файл, который требует больше полномочий. Ранее это достигалось установкой бита setuid (

chmod s ./executable

) в бинарном файле. Такой файл, если он принадлежит root, будет иметь полные права root при выполнении любым пользователем.

Но этот механизм предоставляет слишком много привилегий файлу, поэтому POSIX-разрешения реализовали концепцию, называемую “файловые разрешения”. Они хранятся в виде расширенного атрибута файла, называемого “security.capability”, поэтому вам нужна файловая система с поддержкой расширенных атрибутов (ext*, XFS, Raiserfs, Brtfs, overlay2, …). Для изменения этого атрибута необходимо разрешение CAP_SETFCAP (в доступном наборе разрешений процесса).

$ getfattr -m - -d `which ping`
# file: usr/bin/ping
security.capability=0sAQAAAgAgAAAAAAAAAAAAAAAAAAA=

$ getcap `which ping`  
/usr/bin/ping = cap_net_raw ep

Чем грозит физический доступ к системе — реальные заметки ubuntu & mikrotik

В данной заметке я покашу, как имея физический доступ к системе Ubuntu 12.04.4 Desktop/Server amd64 решить поставленную перед собой задачу: «получение административного доступа». Конечно же не все так порой бывает гладко, как описано ниже. Существует множество средств защиты:

Система находится под замком (нельзя взять просто так и перезагрузить систему)

BIOS — под паролем

Перезагрузку заменять, если все-таки каким-либо образом Вы это сделали.

Ниже те действия которым я руководствуюсь когда необходимо решить задачу: «получение административного доступа»

Перезагружаем систему, когда появится загрузочное меню Grub

Нажимаем клавишу «e» для входа в режим редактирования.

Ниже представлен скриншот в режиме редактирования.

Получение доступа к системе с полными правами

Переходим на строку: (см. скриншот выше, чтобы понимать что имеется ввиду)

linux /boot/vmlinuz-3.2.0-23-generic root=UUID=<уникальный_идентификатор> ro и изменяем ro на rw init=/bin/bash и нажимаем клавишу F10 для загрузки с измененными параметрами

После загрузки система встретит нас строкой вида:

символ # говорит, что система загружена с правами администартора

root@(none):/#

Далее находясь в консоли, можно пойти по трем шагам:

Создать нового пользователя и добавить его в группу в которой состоит суперпользовательroot ( cat /etc/passwd | grep root, в Ubuntu 12.04 Desktop/Server это группа 0)

root@(none):/# adduser kik —gid 0

root@(none):/# passwd kik

Enter new UNIX password: 712mbddr@

Retype new UNIN password: 712mbddr@

Добавить вашу имеющуюся учетную запись в группу в которой состоит суперпользователь root

root@(none):/# adduser <ваша_учетная_запись> —gid 0

Сбросить пароль на учетную запись суперпользователя root

root@(none):/# passwd root

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

Авторизуемся в системе под учетной запись kik и видим:

$ (данный символ говорит, что в системе мы в пользовательcком режиме) набираем команду id чтобы отобразить текущий uid пользователя и состоянии групп в которых данных пользователь присутствует:

$ id

uid=1001(kik) gid=0(root) groups=0(root)

как видно то что и требовалось.

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

Определить свой uid, узнать, к каким группам относится ваше регистрационное имя, объяснить вывод команд id, groups. — киберпедия

Для определения нужных данных, воспользуемся командами id и groups без параметров:

g1u18@linux ~$ id

uid=1017(g1u18) gid=100(users) groups=100(users)

g1u18@linux ~$ groups

users

g1u18@linux ~$

linux - Does the root account always have UID/GID 0? - Super User

При помощи первой команды мы получили значения UID (1017), GID (100) и основную группу пользователя – users. С помощью команды groups мы получили список всех групп, к которым принадлежит пользователь g1u18. Это, опять же, только группа users.

Определить список групп, в которые входит пользователь root.

Проделываем те же операции для пользователя root, для чего исполним команды id и groups с параметром root:

g1u18@linux ~$ id root

uid=0(root) gid=0(root) groups=0(root)

g1u18@linux ~$ groups root

root : root

g1u18@linux ~$

linux - Does the root account always have UID/GID 0? - Super User

Так же определим UID (0), GID (0) и основную группу (root). Пользователь root так же входит только в одну группу.

12. Узнать, какими правами доступа обладают вновь создаваемые файлы и каталоги (т. е. создать новый файл и новый каталог, и просмотреть для них права доступа).

Выведем список файлов в домашнем каталоге с показыанными правами доступа:

g1u18@linux ~$ ls -l

total 0

drwx—— 5 g1u18 users 120 Jan 30 2008 Maildir/

Создадим новый каталог:

linux - Does the root account always have UID/GID 0? - Super User

g1u18@linux ~$ mkdirtest

Ифайл:

g1u18@linux ~$ touchfl

Снова посмотрим список файлов с правами доступа:

g1u18@linux ~$ ls -l

total 4

drwx—— 5 g1u18 users 120 Jan 30 2008 Maildir/

-rw——- 1 g1u18 users 0 Feb 7 17:01 fl

drwx—— 2 g1u18 users 48 Feb 7 17:01 test/

g1u18@linux ~$

linux - Does the root account always have UID/GID 0? - Super User

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

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

Права доступа можно определить в числовой форме путем суммированиявосьмеричных значений отдельных битов прав доступа:

400 – владелец имеет право на чтение;

200 – владелец имеет право на запись;

100 – владелец имеет право на выполнение;

040 – группа имеет право на чтение;

020 – группа имеет право на запись;

010 – группа имеет право на выполнение;

004 – остальные имеют право на чтение;

002 – остальные имеют право на запись;

001 – остальные имеют право на выполнение.

Маска прав доступа определяет, какие права должны быть удалены из полного набора прав, т. е. маска прав доступа является обратным значением прав доступа по умолчанию. Для того, что бы сбросить права для всех пользователей, кроме создателя, нужно использовать маску 077. Проверим это на практике:

g1u18@linux ~$ umask 077

g1u18@linux ~$ mkdirtest

g1u18@linux ~$ ls -l

total 4

drwx—— 2 g1u18 users 48 Feb 10 08:25 test/

linux - Does the root account always have UID/GID 0? - Super User

Действительно, только создатель папки обладает всеми правами. Пользователи группы и все остальные пользователи никакими правами по отношению к папке не обладают.

Оцените статью
Huawei Devices
Добавить комментарий