выполнение команды истории от имени другого пользователя

671
rupert160

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

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

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

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

Также я побежал: sudo find / -name 'history' -type f

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

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

0

1 ответ на вопрос

1
dave_thompson_085

(1) history is a shell builtin; there is no executable

(2) bash -c makes bash noninteractive, and noninteractive shells don't use history. This is not very well documented, but I need both -i and set -o history to get history into a shell with -c:

bash -ic 'set -o history; history' 

(Tested in 4.1.2(1) on RedHat and 4.3.11(1) on Ubuntu)

(3) timestamps aren't written to the history file by default, so unless you've (previously) set/forced HISTTIMEFORMAT for your users or they have (previously) deliberately set it, lines/entries read from the history file will (all) have the current time

(4) sudo changes the userid and groupid but not the rest of the environment, so your command will look for the history file of the user running it, not the one in $username; add -i

(5) It might be easier to just read $5/.bash_history -- at least for userids that run bash and have a home directory, which system userids mostly won't

Второй пользователь не получал метку времени своей истории, пока я не выполнил 'set -o history'. Я заметил, что данные закодированы над командой в моем файле .bash_history без выдачи 'set -o history', поэтому для моего пользователя в ubuntu 14.04, похоже, он автоматически настраивается с историей с метками времени (но, как вы говорите, мне нужен HISTTIMEFORMAT для показать метку времени). Различия между дистрибутивами возможно? rupert160 7 лет назад 0
@ rupert160 HISTIMEFORMAT требуется либо для отображения временных отметок, либо для их записи в файл. `set -o history` по крайней мере для меня требуется, чтобы заставить неинтерактивную оболочку _read_ файл; без этого у него нет прошлой истории для отображения с отметками времени или без них. dave_thompson_085 7 лет назад 1