При устранении неполадок доступа sudo
очень полезно использовать sudo -l
. sudo -l
печатает ваши sudo
привилегии, а sudo -lU user
печатает права этого пользователя sudo
(если у вас есть все привилегии).
$ sudo -l
User muru may run the following commands on laptop:
(ALL) ALL
sudo
выводит строку для каждого совпадающего правила, указывая предоставленную привилегию, но не критерии соответствия.
Например, со следующими тремя правилами в трех разных файлах:
%wheel ALL = (ALL) ALL
muru ALL = (ALL:ALL) ALL
%muru ALL = (ALL) ALL
Результатом может быть:
# sudo -lU muru
User muru may run the following commands on laptop:
(ALL) ALL
(ALL) ALL
(ALL : ALL) ALL
Что вы можете сделать, так это найти правила, которые предоставляют эти привилегии, и проверить, как целевой пользователь может им соответствовать. Каждая строка должна соответствовать правилу, которое sudo
соответствует этому пользователю, поэтому, если есть три строки, должно быть три правила (если только ваша конфигурация sudo
не выглядит странной и читает то же самое файл дважды или что-то в этом роде).
Вы можете сделать это с помощью sed (или других инструментов, таких как awk или perl).
Например
sed -e :loop \
-e 's/^[0-9]\{1\} //' \
-e 's/ [0-9]\{1\}$//' \
-e 's/ [0-9]\{1\} / /g' \
-e 't loop' <input >output
Один из возможных способов с помощью perl:
perl -alne 'print join " ", grep { length > 1 } @F' file