Привет! Иногда нужно запустить программу с ограниченными привилегиями и проверить, что она действительно не сможет сделать лишнего. Менять пользователя через sudo -u можно, но это ещё не вся история: у процесса есть capabilities, no_new_privs и другие параметры безопасности.
Для таких экспериментов в Linux есть setpriv. Она позволяет настроить привилегии прямо перед запуском команды.
👨💻 Например, запустим программу с запретом на получение новых привилегий:
setpriv —no-new-privs ./app
После этого процесс и его потомки не смогут получить дополнительные привилегии через execve(), в том числе за счёт setuid-бинарников и файловых capabilities.
⚡️ Можно пойти дальше и убрать все capabilities из bounding set:
sudo setpriv —bounding-set=-all \
—no-new-privs ./app🔎 Ещё один вариант - проверить поведение программы с другим набором идентификаторов пользователя и групп:
sudo setpriv —reuid=1000 —regid=1000 \
—clear-groups ./appЗдесь важно явно указать, что делать с дополнительными группами. Иначе можно случайно оставить процессу доступ, который не планировали давать.
⚙️ Текущие настройки привилегий процесса можно посмотреть через:
grep -E ‘Cap(Inh|Prm|Eff|Bnd|Amb)|NoNewPrivs’ \
/proc/self/statusP.S. setpriv удобна для тестирования ограничений, но сама по себе не создаёт полноценную песочницу. Она не изолирует файловую систему, сеть и системные вызовы.
🤖Бесплатный ChatGPT