Пользователь в дочернем пространстве имен может редактировать 700 файлов, созданных пользователем в родительском пространстве имен?

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

Я пытаюсь узнать о пространствах имен пользователей. У меня сложилось впечатление, что пользователь в дочернем пространстве имен не должен иметь возможность редактировать файлы с правами 700, созданные пользователем в родительском пространстве имен. Я сделал это предположение, прочитав это предложение: “В частности, процесс может иметь нормальный непривилегированный идентификатор пользователя вне пространства имен пользователя, одновременно имея идентификатор пользователя 0 внутри пространства имен; другими словами, процесс имеет полные привилегии для операций внутри пространства имен пользователя, но является непривилегированным для операций вне пространства имен.” которое было взято из https://man7.org/linux/man-pages/man7/user_namespaces.7.html

Вот эксперимент, который я провел:

research@research:~$ mkdir filetest
research@research:~$ cd filetest/
research@research:~/filetest$ echo 'test' > test
research@research:~/filetest$ chmod 700 test
research@research:~/filetest$ ls -alh
total 12K
drwxrwxr-x 2 research research 4.0K Dec 26 18:42 .
drwxr-x--- 5 research research 4.0K Dec 26 18:42 ..
-rwx------ 1 research research    5 Dec 26 18:42 test
research@research:~/filetest$ unshare -U /bin/bash
nobody@research:~/filetest$ echo 'test2' >> test
nobody@research:~/filetest$ cat test
test
test2
nobody@research:~/filetest$ ls -alh
total 12K
drwxrwxr-x 2 nobody nogroup 4.0K Dec 26 18:42 .
drwxr-x--- 5 nobody nogroup 4.0K Dec 26 18:42 ..
-rwx------ 1 nobody nogroup   11 Dec 26 18:43 test

Почему nobody@research:~/filetest$ echo 'test2' >> test не вызвало ошибки? Я ожидал ошибку, которая помешает пользователю nobody записывать в файл test, потому что файл test имеет права 700.

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

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

Пользовательские пространства имен (user namespaces) в Linux являются мощным инструментом для изоляции и управления правами доступа к системным ресурсам. Ваша экспериментальная установка и поведение файлов с установкой разрешений 700 действительно могут вызывать недоумение, и давайте разберем это более подробно.

Контекст и эксперимент

Как вы правильно заметили, вы создали файл с разрешениями 700 (чтение, запись и выполнение разрешены только владельцу файла). Однако вы столкнулись с ситуацией, когда пользователь nobody, который работает в дочернем пространстве имен, смог записать данные в этот файл, несмотря на ограничения.

Для начала напомню, что разрешения на файл в Unix-системах определяются следующими компонентами:

  1. Владелец: пользователь, который создал файл.
  2. Группа: группа, к которой принадлежит файл.
  3. Другие: все остальные пользователи системы.

Разрешения 700 означают, что только владелец файла имеет право читать, записывать и исполнять файл, в то время как группа и другие пользователи (в данном случае nobody) не имеют никаких прав на этот файл.

Разъяснение поведения

Когда вы использовали команду unshare -U /bin/bash, вы создали новую среду с пространством имен пользователей, которая позволяет изолировать идентификаторы пользователей и группы. После этого пользователь nobody, который в стандартной среде системы обычно является неблагополучным и не имеет прав, становится пользователем с идентификатором 0 (root) внутри нового пространства имен. Это означает, что данный процесс получал root-права в своем собственном пространстве имен, что дает ему полные права на выполнение всех операций, включая запись в файлы.

Вот ключевые моменты, поясняющие вашу ситуацию:

  1. Изоляция прав: Внутри пространства имен пользовательские идентификаторы могут полностью отличаться от внешнего, что и произошло в вашем случае. nobody в дочернем пространстве имен фактически стал "root".

  2. Разрешения в рамках пространства имен: Разрешения на уровне файлов остаются такими, какие они есть в родительском пространстве имен, но права доступа внутри дочернего пространства имен дают пользователям больше возможностей. nobody, став root внутри пространства имен, может игнорировать разрешения на уровне файлов.

  3. Контроль над идентификаторами пользователя: Утилита unshare, которую вы использовали, создает новое пространство имен для идентификаторов пользователя, и это серьёзно меняет правила взаимодействия с файлами.

Заключение

Резюмируя, поведение, которое вы наблюдали, подтверждает концепцию пользовательских пространств имен. Хотя файл test имел разрешения 700, пользователь nobody, работая в дочернем пространстве имен, имел эквивалентные root-привилегии, что позволяло ему менять содержимое файла. Этот аспект усиленной изоляции делает пользовательские пространства имен важным инструментом для повышения безопасности и управления доступом в современных системах.

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

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

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