Назад | Перейти на главную страницу

Как я могу записать файл в subuid без sudo

В принципе, что здесь происходит и чего я не понимаю?

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

administrator@host:/home/administrator$ cat /etc/subuid
root:100000:65536
administrator:165536:65536
administrator:1000000:9000001

administrator@host:/home/administrator$ cat /etc/subgid
root:100000:65536
administrator:165536:65536
administrator:1000000:9000001

Попытка chown этого файла терпит неудачу, несмотря на то, что этот subuid является частью распределения.

administrator@host:/home/administrator$ ls -lhat
...
-rw-rw-r-- 1 administrator administrator  229 Aug  2 13:00 file
drwxrwxr-x 7 administrator administrator 4.0K Aug  2 13:00 ..

administrator@host:/home/administrator$ chown 1500000:1500000 file
chown: changing ownership of 'file': Operation not permitted

administrator@host:/home/administrator$ stat file
  File: file
  Size: 229             Blocks: 8          IO Block: 4096   regular file
Device: 802h/2050d      Inode: 658357      Links: 1
Access: (0664/-rw-rw-r--)  Uid: ( 1000/administrator)   Gid: ( 1004/administrator)
Access: 2018-08-02 13:00:36.529197108 +0000
Modify: 2018-08-02 13:00:36.529197108 +0000
Change: 2018-08-02 13:00:36.529197108 +0000
 Birth: -
administrator@host:/home/administrator$

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

administrator@host:~$ touch file
administrator@host:~$ chown 1500000:1500000 file
chown: changing ownership of 'file': Operation not permitted

administrator@host:~$ sudo chown 1500000:1500000 file    
administrator@host:~$ rm file
rm: remove write-protected regular empty file 'testfile.txt'?
administrator@host:~$

Может ли кто-нибудь объяснить внутреннюю работу, которая здесь происходит? Я, наверное, где-то неправильно понял что-то базовое. Я не могу пометить это как subuid, потому что недостаточно репутации, поэтому я буду использовать uid.

Спасибо!

Subuids не предназначены для работы так, как вы ожидаете от них. Они предназначены для сопоставления UID в пространстве имен пользователя с различными UID вне этого пространства имен, что удобно (и фактически было разработано) для контейнеров.

Однако процесс по-прежнему может иметь только один набор UID (пространство имен пользователя), и пользователям не разрешается менять владельца файлов по очевидным причинам безопасности. Что касается самого процесса, не имеет значения, является ли пользователь кем-то другим вне пространства имен.

Вот почему chown команда не работает: неважно, если вы мог есть другой UID, если пространство имен было другим, в этот момент у вас нет этого UID, и, следовательно, вы не можете изменить владельца каких-либо файлов (поскольку вы не являетесь пользователем root).

Что касается того, почему вы можете удалить файл: на самом деле он не имеет ничего общего с subuid, вместо этого все зависит от того, владеете ли вы каталогом, в котором находится файл. Поскольку удаление файла изменяет каталог, а не сам файл, если вы можете записать каталог, вы можете удалить из него любые файлы (кроме «липких» каталогов).

Есть программа lxc-usernsexec что приходит вместе с lxc. Это позволяет вам переназначать идентификаторы пользователей с помощью карт. /etc/subuid и /etc/subgid.

В частности, вы можете сделать следующее.

  1. lxc-usernsexec -- touch /tmp/test
  2. ls -l /tmp/test покажет, что файл владелец: группа такая же, как первая пара subuid: subgid на вашей карте.
  3. rm /tmp/test должен выдать ошибку, поскольку в настоящее время у вас нет нужного uid / gid.
  4. lxc-usernsexec -- rm /tmp/test следует удалить файл.

Надеюсь это поможет! Вышеупомянутое, вероятно, требует настройки различных вещей для непривилегированного использования контейнера LXC. В частности, я думаю /proc/sys/kernel/unprivileged_userns_clone должно быть 1.

Ваша проблема не связана с subuid.

В соответствии с https://superuser.com/questions/697608/chown-operation-not-permitted

Непривилегированные пользователи (не root) не могут передавать файлы другим пользователям. Чтобы использовать chown, пользователь должен иметь привилегии целевого пользователя. Другими словами, только root может передать файл другому пользователю.