#capabilities-vs-suid
Что такое Linux capabilities и чем они лучше SUID?
Что отвечать
Capabilities разбивают root-привилегии на ~40 отдельных битов (`CAP_NET_BIND_SERVICE`, `CAP_SYS_ADMIN`, `CAP_NET_RAW` и т.д.). Бинарю можно выдать только нужный кусок root-прав через `setcap cap_net_bind_service=+ep /path/to/binary` - запускается без SUID, работает как unprivileged user, но с одной конкретной capability. SUID даёт ВСЕ root-права; capabilities дают точечно.
Что хотят услышать
Senior должен: - назвать `CAP_NET_BIND_SERVICE` (bind на порты <1024 без root) как классический пример замены SUID-bit на nginx/apache - сказать что `ping` исторически был SUID, в современном Linux - capability `cap_net_raw+ep` - различить permitted, effective, inheritable наборы (PIE-флаги в `setcap`) - упомянуть `getcap -r /usr/bin 2>/dev/null` для аудита что в системе с capabilities - назвать ambient capabilities (Linux 4.3+) как фикс «как передать cap дочернему процессу без SUID» для runuser-сценариев
Подводные камни
- ✗ Сказать что capabilities полностью заменили SUID - есть legacy бинари, и не все capability покрывают нужные сценарии
- ✗ Не различить permitted и effective - бинарь с permitted, но без effective работает как unprivileged
- ✗ Думать что `setcap` сохраняется при копировании - нет, xattrs теряются через scp без `-p`, и через docker-build
Follow-up
- ? Почему `setcap` теряется при `cp` без флагов?
- ? Что такое ambient capabilities и какую проблему они решают?
- ? Зачем `CAP_SYS_ADMIN` называют «новый root»?
Глубина в базе знаний