Aquí hay un selector que estoy usando para dispositivos USB -conectados:
DEVPATH=="/devices/*.usb/usb1/1-1/1-1.[1-4]/dvb/dvb[0-9]*.*[0-8]"
Синтаксис sudoers не дает выхода, и я мог бы предложить написать сценарий-оболочку (, скажем, игнорировать все, кроме первого аргумента, и канонизировать его, используяrealpath
)и друзей ), но это было бы все равно бесполезно:
sudo cat /var/log/messages/../../../etc/shadow
Не зная вашего фактического варианта использования, я могу только прокомментировать пример со страницы руководства, и для этого я бы сказал, что фактическое решение — вообще не использовать sudo, а использовать ACL. Используйте ACL, чтобы предоставить пользователю доступ ко всему в каталоге, а файловая система позаботится об ограничении их доступа.
В вашем случае, я думаю, самое близкое, что вы можете получить, это что-то вроде:
%operator ALL = /bin/cat /var/log/messages*, !/bin/cat /var/log/messages*\ *
, который сначала разрешает /bin/cat
только если у него есть какая-либо "строка аргумента", начинающаяся с /var/log/messages
, а затем запрещает ту же самую "строку аргумента", если в любой точке есть пробел.
Это практически запрещает множественные аргументы для cat
, но, будучи основанным на "целой строке", не позволяет sudo cat /var/log/messages /var/log/messages.1
настолько, насколько не позволяет sudo cat /var/log/messages /etc/shadow
. Кроме того, это не позволяет допустимому имени файла иметь пробел, например. гипотетический файл /var/log/messages-with-' '-space
.