Как просмотреть историю команд для пользователей, использующих sudo -i

Сzsh:

  • ${(P)varname}расширяется до значения переменной, имя которой хранится в $varname. Итак, если $varnameсодержит var, ${(P)varname}расширяется до того же, что и $var.
  • ${(e)var}расширяется до содержимого $var, но также выполняет расширение параметров, подстановку команд и арифметическое расширение внутри. Итак, если $varсодержит $othervar, ${(e)var}расширяется до того же, что и $othervar.
  • Вы можете вкладывать операторы раскрытия переменных, чтобы такие вещи, как ${(P)${var:-something}}работали
  • ${:-content}— это один из способов расширить расширение параметра до произвольного текста (здесьcontent)

(подробнее см. в руководстве )

Так что можно было:

_v1=windows
_v2_windows=/mnt/d
printf '%s\n' ${(P)${:-_v2_$_v1}}

Или:

printf '%s\n' ${(e)${:-\$_v2_$_v1}}

Или сделать это в два этапа:

varname=_v2_$_v1
printf '%s\n' ${(P)varname}

Или:

expansions_to_evaluate=\$_v2_$_v1

printf '%s\n' ${(e)expansions_to_evaluate}

Или вы можете использовать стандартный синтаксис POSIX:

eval 'printf "%s\n" "${_v2_'"$_v1"'}"'

Имейте в виду, что если значение $_v1не находится под вашим контролем, все это представляет собой уязвимость, связанную с внедрением произвольных команд, вам необходимо сначала очистить значение.

Также обратите внимание, что zshподдерживает ассоциативные массивы (и задолго до bash), так что вы можете сделать:

typeset -A mnt
mnt=(
  windows /mnt/d
  osx     /Volumes/d
)
os=windows
printf '%s\n' $mnt[$os]

Это было бы намного более разборчиво и не имело бы никаких последствий для безопасности.

1
16.07.2020, 09:48
1 ответ

Сам по себе,sudo -iзапустит оболочку входа целевого пользователя(rootпо умолчанию ). История в этой оболочке будет храниться в соответствии с настройками этой оболочки. Если оболочка входа root— bash, она будет сохранена в $HISTFILE, что по умолчанию ~/.bash_history. Так что ищите .bash_historyв домашнем каталоге root(/root, обычно ). Или проверьте их настройки по умолчанию для входа в систему и файлы rc, чтобы определить, где (если )хранится история.

1
18.03.2021, 23:19

Теги

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