Почему право собственности на файл имеет значение в пакете RPM или DEB?

Почему право собственности на файл имеет значение в пакете RPM или DEB?

Контекст:

Я пытаюсь преобразовать .debпакет для .rpmиспользованиячужак, я использую эту команду:

$ alien -r foo.deb

но он жалуется так:

> Warning: alien is not running as root!
> Warning: Ownerships of files in the generated packages will probably be wrong.

Я думаю, что все, что alienнужно root, это гарантировать, что у него есть разрешение на создание файлов, принадлежащих , для foo.debвывода , но я в этом не уверен.rootfoo.rpm

Вопросы:

  1. Всегда ли пакетам нужны некоторые rootфайлы, принадлежащие им?
  2. rootЗачем им вообще нужны файлы, принадлежащие кому-либо?
  3. Если я не прав, то alienпочему root?

решение1

Используйте fakeroot. Alien не нужен root для манипуляции некоторыми битами. Однострочное описание на странице руководства fakeroot адекватно резюмирует это:

выполнить команду в среде, подделывающей привилегии root для манипуляции файлами

Итак, fakeroot — это программа, которая убеждает команду в том, что она запущена как root, достаточно хорошо, чтобы права доступа к файлам были установлены как root, где они и должны быть. Для получения дополнительной информации см. man fakeroot.

К сожалению, полученное вами сообщение об ошибке вводит в заблуждение.

Короче говоря, сделайте

fakeroot alien ...

Вот отчет об ошибке, где автор alien, Джоуи Хесс, обсуждает необходимость использования fakeroot. Возможно, не лучшая ссылка. Если найду что-то получше, выложу.

https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=16289

решение2

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

Создайте файл в своем домашнем каталоге и попробуйте сменить его владельца:-

touch test.txt
ls -l test.txt
-rw-rw-r--. 1 gareth gareth 0 Jun 28 21:24 test.txt
chown nobody. test.txt
chown: changing ownership of ‘test.txt’: Operation not permitted

Хотя я являюсь владельцем файла и имею rwразрешения, я не могу изменить владельца.

sudo chown nobody. test.txt
ls -l test.txt
-rw-rw-r--. 1 nobody gareth 0 Jun 28 21:24 test.txt

Но запуск от имени root sudoработает.

Как говорится в предупреждении; владение будет неправильным. Из этого можно предположить, что это alienизменяет владение некоторыми файлами.

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

В системе также есть другие пользователи и группы, но в отличие от 'root' они не одинаковы в разных дистрибутивах. Например, в Fedora (и RedHat и CentOS) Apacheвеб-сервер работает как apacheи файлы данных принадлежат этому пользователю. С другой стороны, я считаю, что Apacheработает как www-dataв системах Debian/Ubuntu и, следовательно, файлы данных принадлежат этому пользователю. Это означает, что alienнеобходимо изменить владельца файлов при конвертации, и для этого, как вы можете видеть в примере выше, необходимо запустить его как 'root'.

решение3

Пакеты Rpm и deb содержат архивы файлов для установки (cpioархивы в случае RPM,смолав случае deb). Эти архивы содержат метаданные о каждом файле, включая его имя, дату изменения, владельца пользователя и группу, а также разрешения. Когда пакет установлен, каждый файл в конечном итоге получает владельца, описанного в архиве (если только скрипт после установки не изменяет его).

Большинство файлов, устанавливаемых пакетами, принадлежат пользователю root, поскольку ни один пользователь не имеет права изменять их.

Alien преобразует пакеты, распаковывая архив и переупаковывая его (а также выполняя другие действия, такие как преобразование скриптов до/после установки). Например, чтобы преобразовать rpm в deb, alien вызывает cpioизвлечение архива во временное местоположение, а затем tarсоздание нового архива. Если распаковка не выполняется с правами root, то все временные файлы будут принадлежать пользователю, который выполняет распаковку, поэтому, когда файлы будут упакованы в новый архив, они в конечном итоге будут принадлежать этому пользователю.

Alien на самом деле не обязательно запускать от имени root, поскольку ему не нужно ничего менять в системе.Fakerootзапускает alien (или любую другую команду) в среде, где эта команда получает фальшивую информацию об операциях файловой системы, делая вид, что операции, которые обычно требуют root (например, изменение владельца файла), были выполнены успешно. Таким образом, распаковка выполняется как root и устанавливает правильное владение файлом (в отношении alienи его подпроцессов), и, таким образом, перепаковка создает предполагаемый архив.

Связанный контент