
Я хочу, чтобы приложение Node имело возможность привязываться к портам с небольшим количеством номеров (точнее, к 443, поскольку это сервер http2).
Я делаю это сsudo setcap cap_net_bind_service=+ep /path/to/node
Это, по-видимому, запоминается при загрузке. Я использую nvm, чтобы иметь возможность устанавливать разные версии node, и я только что обновил версию и, конечно, больше не привязываюсь.
Достаточно просто снова добавить эту возможность, но, вероятно, где-то я накапливаю разрешения, которые следует отключить в старых версиях Node.
Но я не могу найти, где в последовательности загрузки это происходит. Может кто-нибудь подскажет, где (у меня Debian).
РЕДАКТИРОВАТЬ
Я думаю, что информация должна храниться в дополнительных атрибутах исполняемого файла. Однако я не могу найти никаких дополнительных атрибутов в файлах, которые я настроил таким образом.
решение1
Возможности хранятся вместе с записью файла в каталоге (точнее, они находятся в файлеиноды, как и другие виды разрешений). Во время загрузки ничего особенного не происходит.
Начиная с GNU coreutils 8.23, ls
команда не знает о возможностях Linux, поэтому вы не найдете в ее выводе ничего, что говорило бы о том, что у программы установлены возможности. Используйте команду getcap
для вывода списка возможностей.
Чтобы удалить все возможности из файла, используйте setcap -r /path/to/file
. Однако вам не нужно ничего очищать — возможности хранятся вместе с файлом, и вам ничего не нужно делать, кроме как удалить файл.
решение2
Смотрите setcap(8)
, возможности установленыдля исполняемого файла. Это работает аналогично (но с большей степенью детализации) SUID или SGID. Нигде в «процессе загрузки» это не обрабатывается; всякий раз, когда файл выполняется как программа, результирующий процесс получает возможности.
Да, сохранение старых версий файла с повышенными привилегиями представляет серьезную угрозу безопасности, лучше удалять старые версии всякий раз, когда устанавливается новая.