Любая команда с установленным -uid или установленным битом gid -. Будет запущен как владелец пользователя или группы. Однако, если они написаны правильно, они не позволят вам сделать то, что вы не должны. sudo
и su
позволяют вам делать что-либо значимое только в том случае, если вы укажете правильный пароль. Большинство других инструментов будут безопасно делать только одну вещь, но не позволят вам повышать привилегии.
Однако, если вы можете записывать в хранилище от имени пользователя root (, удалив носитель и вставив его в другую машину, или загрузившись с другой ОС ), вы можете добавить нужные вам файлы с соответствующими правами доступа. разрешение.
Исполняемые файлы с набором -uid/set -битов gid являются единственным способом повышения привилегий в системах Unix (Современные системы теперь имеют возможности, но они сводятся к тому же вещь ).
Ядро не использует пароли, поэтому для реализации паролей создается исполняемый файл с владельцем root и установленным битом -uid. Этот исполняемый файл проверит пароль, а затем установит пользователя соответствующим образом и запустит оболочку (или что-то в этом роде ).
Предположим, возможности не используются, тогда find / -executable -type f -user root -perm -u+s -print 2>/dev/null
будут перечислены все исполняемые файлы, повышающие разрешения (хотя бы временно ), большинство (, возможно, все )будут бесполезны.
Следуя подсказке от @AB, я использовал libpam
(pam_cap.so
), чтобы добавить возможность CAP_NET_ADMIN
к моему пользователю inheritable
, установленному во время входа в систему (и ssh ), затем добавил ту же возможность к /bin/ip
' наборы inheritable
и permitted
. Теперь я могу включать и выключать сетевые интерфейсы от имени пользователя и не полагаться на sudo
.
Как это сделать описано здесь:https://stackoverflow.com/questions/1956732/is-it-possible-to-configure-linux-capabilities-per-user