Как видеть все команды, выполняемые текущим пользователем во всех sessions/screen/byobu терминалах?

 $ fixpath /home/user/docus/collection/unix/djakl/jfkdsl/dfjksld/fsdkl
Found /home/user/docus/collection/unix
 $ type fixpath
fixpath is a function
fixpath ()
{
    CURDIR="$PWD";
    DIR="$1";
    E=1;
    while [ $E -eq 1 ]; do
        cd "$DIR" 2> /dev/null && {
            E=0;
            echo Found "$DIR"
        } || {
            DIR="${DIR%/*}";
            DIR="${DIR:-/}"
        };
    done;
    cd "$CURDIR"
}

Автоисправление подобия большинство современных оболочек может сделать себя. По крайней мере, удар и zsh делают.

3
29.08.2013, 21:12
2 ответа

Это - своего рода взлом, но по крайней мере он работает. Это требует, чтобы Вы имели root на том сервере:

Рассмотрение вывода ps aux Я вижу ветвление пользователя sshd, как, например, в этом случае пользователь mst:

$ ps aux | grep ssh
mst      19325  0.0  0.0  76268  1920 ?        S    21:20   0:00 sshd: mst@pts/6

Таким образом, я проверяю дескрипторы файлов этого процесса как это:

$ sudo ls -lha /proc/19325/fd
total 0
dr-x------ 2 root root   0 Aug 30 21:26 .
dr-xr-xr-x 7 mst  users  0 Aug 30 21:25 ..
lrwx------ 1 root root  64 Aug 30 21:26 0 -> /dev/null
lrwx------ 1 root root  64 Aug 30 21:26 1 -> /dev/null
lrwx------ 1 root root  64 Aug 30 21:26 11 -> /dev/ptmx
lrwx------ 1 root root  64 Aug 30 21:26 12 -> /dev/ptmx
lrwx------ 1 root root  64 Aug 30 21:26 2 -> /dev/null
lrwx------ 1 root root  64 Aug 30 21:26 3 -> socket:[138972]
lrwx------ 1 root root  64 Aug 30 21:26 4 -> socket:[138198]
lrwx------ 1 root root  64 Aug 30 21:26 5 -> socket:[138200]
lrwx------ 1 root root  64 Aug 30 21:26 6 -> socket:[138207]
lr-x------ 1 root root  64 Aug 30 21:26 7 -> pipe:[138212]
l-wx------ 1 root root  64 Aug 30 21:26 8 -> pipe:[138212]
lrwx------ 1 root root  64 Aug 30 21:26 9 -> /dev/ptmx

Три из этих ссылок указывают /dev/ptmx, это stdin, stdout и stderr. Так как оболочка пользователя печатает все команды, которые он вводит, и также вывод этих команд, я наблюдаю его stdout при помощи strace и фильтрация для read системные вызовы на fd числе 11 (потому что 11 вторая ссылка на /dev/ptmx).

sudo strace -e read -s 256 -p 19325 2>&1 | grep 'read(11'

И я вижу, что пользователь вводит ls команда:

read(11, "l", 16384)                    = 1
read(11, "s", 16384)                    = 1

Хорошо, вывод не довольно..., но работы

4
27.01.2020, 21:13

Лучший способ состоит в том, чтобы использовать auditd. Можно установить его для входа всех команд, данных определенным пользователем или всех команд, данных всеми пользователями или любым вызовом определенной команды, и т.д.

Страница справочника для auditctl даст Вам некоторые примеры правил, которые можно хотеть. Кроме того, если бы Вы не доверяете другим пользователям root, я советовал бы Вам регистрироваться к отдельному серверу, к которому у других нет доступа.

Я также предположил бы, что лучше не выделить пароль root и не позволить логины ssh как корень. Вместо этого позвольте только логины собственных учетных записей пользователя и позвольте им использовать sudo su стать корнем. Это также позволит auditd отследить, который пользователь сделал что.

3
27.01.2020, 21:13

Теги

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