Я пытаюсь добавить запись NOPASSWD для sudotest.sh (или любого скрипта / двоичного файла, требующего sudo) в мой файл / etc / sudoers (redhat), но для того, чтобы он работал, я должен указать полный путь. Следующая запись отлично работает:
%jenkins ALL=(ALL)NOPASSWD:/home/vts_share/test/sudotest.sh
Проблема в том, что сценарий может переместиться в другой каталог. Я попытался предоставить /home/*/sudotest.sh, но у меня не получилось, когда я попытался выполнить sudo ./sudotest.sh, он дал мне, что у вас нет прав root
Примечание: у меня тоже нет разрешения на каталог / bin / sh.
Полный путь является обязательным, в противном случае непривилегированный пользователь может создать новый сценарий с тем же именем в произвольном месте, полностью обойдя безопасность, которую вы пытаетесь реализовать.
HBrujin абсолютно прав: вы не можете этого сделать, и это осознанное дизайнерское решение. Однако это часто можно обойти, осознав, что рассматриваемый скрипт или скрипты часто делают многие из тех же вещей под капотом, и предоставив привилегию sudo
эта штука, а не множество сценариев-оберток.
Например, на одном из моих сайтов меня постоянно заставляли разрешить "еще один"^ n скрипт для доступа sudo к пользователю ccm_root
. Но как только мы поняли, что все эти скрипты запускают одну и ту же привилегированную команду /usr/bin/ccm
под капотом, и что они всегда писались и управлялись небольшой группой разработчиков, которые были де-факто ccm, вместо этого мы смогли предоставить этой команде привилегии sudo и посоветовать людям писать сценарии, которые выполняли бы эту команду sudo, вместо того, чтобы запрашивать привилегии для всего сценария.
Вероятно, это не поможет на сайтах, которые используют sudo
исключительно для контроля безопасности, но для тех, кто использует его для сочетания контроля работоспособности, безопасности и аудита, это может быть полезным предложением.