Хотя этот вопрос был задан человеком, желающим записать свои собственные сеансы, альтернативным вариантом использования может быть системный администратор, который хочет отслеживать действия различных пользователей.
Я боюсь, что работа script
внутри всей системы bashrc
может не подойти в случае, когда пользователи машины не хотят делать записи своих сеансов.
Пользователи, которые хотят оставаться инкогнито, могут обойти регистрацию, попросив sshd открыть другую оболочку (например zsh
) или запустить, bash --rcfile ___
чтобы предотвратить /etc/bash.bashrc
загрузку.
Альтернативный подход
Это руководство с 2008 года ( в архиве ) использует другой метод , чтобы силы script
для запуска , когда пользователь входит в систему с SSH, который требует , чтобы пользователи войти с / закрытым ключом общественности.
Это делается путем добавления сценария в .ssh/authorized_keys
файл пользователя перед ключом:
command="/usr/local/sbin/log-session" ssh-dss AAAAB3NzaC1kc3MAAAEBAMKr1HxJz.....
Затем log-session
( заархивированный ) сценарий решает, нужно ли запускать /usr/bin/script
для регистрации сеанса этого пользователя.
exec script -a -f -q -c "$SSH_ORIGINAL_COMMAND" $LOGFILE
Чтобы пользователь не мог удалить добавленную команду, администратор должен принять на себя ответственность за authorized_keys
файл пользователя .
chown root:root ~user/.ssh/authorized_keys
К сожалению, это означает, что пользователь не сможет самостоятельно добавлять какие-либо дополнительные ключи или, что более важно, отзывать существующий ключ, если он скомпрометирован, что далеко от идеала.
Предостережения
Обычно конфигурация sshd по умолчанию позволяет пользователям выполнять SFTP через свою регистрацию ssh. Это позволяет пользователям редактировать файлы без регистрации изменений. Если администратор не хочет, чтобы пользователи могли это делать, он должен включить ведение журнала для SFTP или отключить службу. Хотя даже в этом случае пользователи могут вносить невидимые изменения в файлы, запустив что-то вроде этого в своем терминале:
curl "http://users.own.server/server/new_data" > existing_file
Можно отслеживать подобные изменения, используя файловую систему «копировать при записи», которая записывает всю историю файлов.
Но подобный трюк позволит пользователю выполнять команды без их регистрации:
curl "http://users.own.server/server/secret_commands_824" | sh
Я не знаю каких-либо простых решений для этого. Возможности могут быть:
- Регистрация всех сетевых данных (и распутывание их позже).
- Регистрация всех системных вызовов.
Подобные вещи могут быть возможны с помощью audd .
Но все таки...
Маловероятно, что регистрация пользовательских сеансов обеспечивает какую-либо реальную безопасность для администраторов. По умолчанию пользователь может манипулировать только своими файлами и не может нанести вред системе. Если злоумышленнику удалось повысить привилегии, он мог бы отключить ведение журнала и удалить журналы (если администратор не настроил журналы для хранения на отдельном компьютере только в режиме добавления).
Администраторы, которые автоматически регистрируют сеансы пользователей, вероятно, должны информировать пользователей о том, что это делается . В некоторых юрисдикциях такая форма сбора данных может нарушать законы о данных или конфиденциальности . И, по крайней мере, было бы уважительно для пользователей, чтобы они знали.
Более вероятно, что администратор будет заинтересован в регистрации сеансов sudo
пользователей. Возможно, это может быть решено в другом ответе или даже в другом вопросе.
exec
в начале строки. он должен начинатьсяscript -f
в той же оболочке PID.