Как заблокировать пользователя в программе сценария оболочки?
Допустим, у меня ОС Linux без десктопной среды. После завершения загрузки ПК он сразу покажет пользователю терминал оболочки.
Я планирую написать программу сценария оболочки и заставить ее автоматически запускаться каждый раз после завершения загрузки ПК, так что вместо обычного приглашения оболочки пользователь увидит мою программу сценария оболочки после завершения загрузки ПК.
В программе сценария оболочки я дам пользователю список параметров для настройки чего-либо на моем ПК. И я хочу, чтобы программа сценариев оболочки постоянно работала на этом ПК.
Я хотел бы заблокировать пользователя в программе сценария оболочки, чтобы он не мог перейти к обычному приглашению оболочки и получить доступ к файловой системе. Только администратор с паролем root может перейти к обычному приглашению оболочки и внести изменения в ПК.
Кто-нибудь может дать мне несколько советов, как я могу это сделать?
Благодарю.
4 ответа
Сделайте так, чтобы оболочка входа пользователя autologin была rbash, и сделайте скрипт единственным, что он может запустить. Даже если они выйдут из сценария, они не смогут ничего сделать, кроме выхода из системы или повторного запуска сценария.
getty
это программа, которая обрабатывает терминал Если вы скажете ему, чтобы запустить что-то, кроме оболочки, как
getty -l my-sandbox-program-that-is-not-as-powerful-as-the-shell
у вас гораздо больший контроль над тем, что может делать пользователь.
Добавьте вызов к вашему сценарию в /etc/rc.local
, который запускается после системных служб в /etc/init.d/
все началось и прямо перед отображением приглашения на вход. Сценарий будет работать от имени пользователя root, но без входа в систему, чтобы вы могли точно контролировать, что происходит в этот момент. Пока ваш сценарий не завершится, пользователь не сможет войти в систему и получить доступ к оболочке.
Вы также можете добавить ловушку, чтобы поймать CTRL-C в вашем скрипте bash. таким образом, вы можете заблокировать людей от выхода из него (также стоит ловить CTRL-Z)