Хоча це питання було задано особою, яка бажає записати власні сеанси, альтернативним випадком використання може бути системний адміністратор, який хоче відстежувати, що роблять різні користувачі.
Я побоююся, що біг 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
Я не знаю жодного легкого рішення для цього. Можливості можуть бути:
- Реєстрація всіх мережевих даних (і розв’язування їх пізніше).
- Реєстрація всіх системних викликів.
Така річ може бути можливою з аудитом .
Але все ж таки...
Навряд чи реєстрація сеансів користувача забезпечує будь-яку реальну безпеку для адміністраторів. За замовчуванням користувач може маніпулювати лише власними файлами та не може завдати шкоди системі. Якщо зловмисному користувачеві вдалося збільшити привілеї, він міг відключити ведення журналу та видалити журнали (якщо адміністратор не налаштував журнали зберігатись на окремій машині, лише в додатку).
Адміністратори, які автоматично реєструють сеанси користувача, повинні, ймовірно, повідомляти користувачів, що це робиться . У деяких юрисдикціях ця форма збору даних може порушувати закони про дані чи конфіденційність . І принаймні, було б шанобливо, щоб користувачі донесли їх до відома.
Більш імовірно, що адміністратору буде цікаво реєструвати сеанси sudo
користувачів. Можливо, це можна вирішити в іншій відповіді, або в іншому питанні.
exec
на початку рядка. він повинен запуститиscript -f
в той же PID оболонки.