Чи можна використовувати можливості в скриптах без встановлення капіратора бінарного інтерпретатора?


14

Зараз я використовую cap_net_bind_service MY_USERNAMEв /etc/security/capability.conf.
Тепер мені просто потрібно встановити cap_net_bind_service+iінтерпретатора моєї улюбленої мови сценаріїв, щоб мати можливість додати CAP_NET_BIND_SERVICEдо ефективного набору через libcap [-ng].

Це добре працює, але мені цікаво, чи є спосіб досягти того ж, не встановлюючи жодних обмежень на бінарний перекладач. Хоча це не є великою проблемою (інші облікові записи користувачів не мають кришки, тому вони не можуть використовувати її навіть із бітом, встановленим на бінарному перекладачі), це дещо дратує, оскільки мені доводиться встановлювати прапор кожен раз, коли перекладач оновлено.

Відповіді:


4

Зазвичай можливості успадковуються дітям. Як зазначено в її довідці :

Дитина, створена за допомогою вилки (2), успадковує копії наборів можливостей своїх батьків.

Проблема сценаріїв полягає в тому, що вони не є безпосередньо виконуваними файлами. Ядро проходить список перевірок (код ядра знаходиться за адресою fs / binfmt _ *. C). Один з них - "binfmt_script.c", який перевіряє перший рядок на shebang, а потім викликає реального інтерпретатора (той, що знаходиться в shebang) зі своїм сценарієм як аргумент. Таким чином, викликається стандартний / загальний перекладач і просто читає ваш сценарій як аргумент.

Це означає, що вам доведеться встановити можливість для інтерпретатора, а не для сценарію. Те саме стосується suidбітів та інших спеціальних прапорів.

Тож ви або зробите копію свого перекладача, встановіть потрібні для нього можливості (також переконайтесь, що ніхто не може отримати доступ до нього через chmod / chown) і зателефонуйте цьому скопійованому перекладачеві у ваш шебанг. Ви також можете виконати логіку setcap у своєму сценарії.


Гаразд, не бачив питання, яке було задано 2 роки тому, але ніколи не закрито ... Крім того, здається, що це дублікат unix.stackexchange.com/questions/87348/…
Adrien M.

але лише i(успадковує), отримує минуле exec. І iнічого не робить самостійно, він працює лише у тому випадку, якщо файл має відповідність i, і я маю на увазі e(ефективний) біт (за винятком випадків, коли це встановлює сценарій / виконуваний файл). Це ще складніше, що setuid, це не ефект сценарію.
ctrl-alt-delor

1
Я думав, що ядро ​​читається ядром, а не оболонкою? ( stackoverflow.com/questions/3009192/how-does-the-shebang-work/… )
Філіп

кулінг ти маєш рацію. Це було неправильне тлумачення, яке я зрозумів пізніше. Я зафіксував це підказками, де знаходиться код ядра для виконання сценаріїв.
Адріан М.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.