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

cat /etc/passwd | awk -F: '{print $1}' > ${system}.users.txt
while read username; do
   echo $username
      sudo -u $username bash -c 'export HISTTIMEFORMAT="%F %T "; history' >../log/${username}.hist
      #sudo -u $username bash -c 'export HISTTIMEFORMAT="%F %T "; history'
done < ./${system}.users.txt

Я не получаю вывод истории при запуске:sudo -u anotheruser history

для устранения проблем я попытался:sudo -u anotheruser bash -c 'which history'

Также я запустил:sudo find / -name 'history' -type f

и я не получаю возвращенный исполняемый файл.

Кто-нибудь может сказать мне, почему команда sudo не может быть выполнена другим пользователем?

1 ответ1

1

(1) history - встроенная оболочка; нет исполняемого файла

(2) bash -c делает bash неинтерактивным, а неинтерактивные оболочки не используют историю. Это не очень хорошо документировано, но мне нужны и -i и set -o history чтобы получить историю в оболочке с -c:

bash -ic 'set -o history; history'

(Проверено в 4.1.2(1) в RedHat и 4.3.11(1) в Ubuntu)

(3) временные метки не записываются в файл истории по умолчанию, поэтому, если вы (ранее) не установили / принудительно установили HISTTIMEFORMAT для своих пользователей или они (ранее) не установили его преднамеренно, строки / записи, считанные из файла истории, будут ( все) есть текущее время

(4) sudo изменяет ID пользователя и groupid, но не остальную часть среды, поэтому ваша команда будет искать файл истории пользователя, который ее запускает, а не файл в $username ; добавить -i

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .