отчеты о правах пользователя на основе извлеченных файлов sudoers group и passwd

Здесь -документы в Bash и dash не поддерживают это. Вы не можете хранить нуль в переменной, они удалены из подстановок команд, вы не можете написать их буквально, и вы не можете использовать ANSI -C кавычки внутри документа здесь -. Ни одна из оболочек не является нулевой -дружественной, и они обычно обрабатываются как (C -ограничители строк )в стиле C ), если кто-то входит.

У вас есть несколько вариантов::использовать реальный файл , использовать zsh, использовать подстановку процесса или использовать стандартный ввод.


Вы можете делать именно то, что хотите, в zsh, который гораздо более -дружественн к нулю.

zsh% null=$(printf '\x00')
zsh% hexdump -C < a${null}b${null}
heredoc> EOT
00000000  61 00 62 00 0a                                    |a.b..|
00000005

Заметьте, однако, что heredocs имеют неявную завершающую новую строку, что может быть нежелательно (это будет дополнительное поле для shufпосле конечного нуля ).


Для Bash вы можете использовать замену процесса почти эквивалентно вашему heredoc в сочетании с printfили echo -eдля создания встроенных нулей:

bash$ hexdump -C < <(
printf 'item 1\x00item\n2\x00'
)
00000000  69 74 65 6d 20 31 00 69  74 65 6d 0a 32 00        |item 1.item.2.|
0000000e

Это не обязательно полностью эквивалентно здешнему -документу, потому что он часто тайно помещается в настоящие файлы оболочкой (, что важно для возможности поиска, среди прочего ).

Поскольку вы, вероятно, хотите подавить завершающие символы новой строки, вы даже не можете использовать heredoc внутри команд -он должен быть printf/ echo -ne, если это безопасно для получения точного -детального контроля над выход.


Вы не можете выполнять подстановку процессов в dash, но в любой оболочке вы можете передать стандартный ввод из подоболочки:

dash$ (
printf 'item 1\x00'
printf 'item\n2\x00'
) | hexdump -C
00000000  69 74 65 6d 20 31 00 69  74 65 6d 0a 32 00        |item 1.item.2.|
0000000e

shufс удовольствием читает из стандартного ввода по умолчанию, так что это должно работать для вашего конкретного варианта использования, насколько я понимаю. Если у вас есть более сложная команда,нахождение на правой -стороне конвейера может привести к некоторым путаницам с областью видимости.


Наконец, вы можете записать свои данные в реальный файл, используя printfи использовать его вместо здесь -документа. Этот вариант был описан в другом ответе . Вам нужно будет убедиться, что вы очистили файл после этого, и, возможно, захотите использоватьmktempили аналогичный, если он доступен, для создания безопасного имени файла, если есть какие-либо проблемы с безопасностью в реальном времени.

0
13.07.2020, 12:26
1 ответ

sudo -l говорит вам, что вам предоставлено. чтобы вы могли запустить это на всех серверах и всех пользователях. Удачи с этим ;-)

но я думаю, вы должны спросить, зачем мне такой отчет? У нас была похожая проблема, и когда мы объединили несколько файлов sudo в один, проблема исчезла

0
18.03.2021, 23:20

Теги

Похожие вопросы