Из недостатков sudo, которые попытались решить в новом инструментарии, отмечается поставка в форме исполняемого файла с флагом suid root, монолитная архитектура без разделения привилегий (вся функциональность sudo выполняется с правами root); усложнённый, неиерархический и недекларативный формат конфигурации; поддержка плагинов, выполняемых напрямую в привилегированном процессе; раздутая кодовая база с большой поверхностью атаки.
Вместо использования монолитной утилиты sudo в capsudo использован тандем из привилегированного фонового процесса capsudod и непривилегированной утилиты capsudo. Взаимодействия между capsudod и capsudo осуществляется при помощи файла-сокета, а полномочия запуска привилегированных команд определяются правами доступа к данному сокету. Только пользователи, имеющие доступ к сокету, могут выполнять привязанные к сокету привилегированные команды. Недостатком предложенного подхода является необходимость использования отдельного фонового процесса для координации запуска каждой привилегированной операции.
Например, чтобы предоставить какому-то пользователю возможность запуска утилиты reboot с повышенными привилегиями, администратор может создать в домашнем каталоге заданного пользователя сокет «reboot-capability», привязать его к запуску утилиты reboot и на уровне прав доступа разрешить запись в сокет только необходимому пользователю. После этого данный пользователь сможет запустить команду reboot, выполнив «capsudo -s reboot-capability».
# capsudod -s /home/user/reboot-capability reboot & # chown user:user /home/user/reboot-capability # chmod 700 /home/user/reboot-capability запускаем reboot командой: $ capsudo -s /home/user/reboot-capability
Для того чтобы повторить поведение sudo и разрешить выполнение с повышенными привилегиями любых приложений для пользователей, входящих в группу wheel, можно использовать следующие настройки:
# mkdir -p /run/cap # capsudod -s /run/cap/sudo-capability & # chgrp wheel /run/cap/sudo-capability # chmod 770 /run/cap/sudo-capability $ capsudo -s /run/cap/sudo-capability
Пример настроек для привилегированного запуска команды /usr/sbin/mount /dev/sdb1:
# capsudod -s /run/user/mountd/cap/mount-dev-sdb1 -- /usr/sbin/mount /dev/sdb1 ... установка прав доступа к сокету /run/user/mountd/cap/mount-dev-sdb1 монтирование /dev/sdb1 в /media/usb непривилегированным пользователем $ capsudo -s /run/user/mountd/cap/mount-dev-sdb1 -- /media/usb
Источник: http://www.opennet.ru/opennews/art.shtml?num=64420
