Вопрос или проблема
Я пытаюсь узнать о пространствах имен пользователей. У меня сложилось впечатление, что пользователь в дочернем пространстве имен не должен иметь возможность редактировать файлы с правами 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-системах определяются следующими компонентами:
- Владелец: пользователь, который создал файл.
- Группа: группа, к которой принадлежит файл.
- Другие: все остальные пользователи системы.
Разрешения 700 означают, что только владелец файла имеет право читать, записывать и исполнять файл, в то время как группа и другие пользователи (в данном случае nobody
) не имеют никаких прав на этот файл.
Разъяснение поведения
Когда вы использовали команду unshare -U /bin/bash
, вы создали новую среду с пространством имен пользователей, которая позволяет изолировать идентификаторы пользователей и группы. После этого пользователь nobody
, который в стандартной среде системы обычно является неблагополучным и не имеет прав, становится пользователем с идентификатором 0 (root) внутри нового пространства имен. Это означает, что данный процесс получал root-права в своем собственном пространстве имен, что дает ему полные права на выполнение всех операций, включая запись в файлы.
Вот ключевые моменты, поясняющие вашу ситуацию:
-
Изоляция прав: Внутри пространства имен пользовательские идентификаторы могут полностью отличаться от внешнего, что и произошло в вашем случае.
nobody
в дочернем пространстве имен фактически стал "root". -
Разрешения в рамках пространства имен: Разрешения на уровне файлов остаются такими, какие они есть в родительском пространстве имен, но права доступа внутри дочернего пространства имен дают пользователям больше возможностей.
nobody
, став root внутри пространства имен, может игнорировать разрешения на уровне файлов. -
Контроль над идентификаторами пользователя: Утилита
unshare
, которую вы использовали, создает новое пространство имен для идентификаторов пользователя, и это серьёзно меняет правила взаимодействия с файлами.
Заключение
Резюмируя, поведение, которое вы наблюдали, подтверждает концепцию пользовательских пространств имен. Хотя файл test
имел разрешения 700, пользователь nobody
, работая в дочернем пространстве имен, имел эквивалентные root-привилегии, что позволяло ему менять содержимое файла. Этот аспект усиленной изоляции делает пользовательские пространства имен важным инструментом для повышения безопасности и управления доступом в современных системах.
Мы рекомендуем всегда учитывать, в каком пространстве имен вы находитесь, и какие права у вас есть внутри него, чтобы избежать недоразумений с правами доступа и манипуляциями с файлами.