Я хочу иметь пользователя в Debian 7.x со следующими ограничениями:

  1. Когда пользователь входит в систему, программа командной строки автоматически запускается в сеансе оболочки пользователя. Затем программа будет анализировать пользовательский ввод навсегда и будет выполнять команды, пока пользователь не введет конкретную команду выхода.
  2. Когда программа завершается, пользователь должен автоматически выйти из системы.
  3. CTRL+C должен либо ничего не делать, либо прервать работу программы и выйти из системы.
  4. Подводя итог, пользователь не должен иметь возможности взаимодействовать с системой каким-либо образом, кроме этой автоматически запускаемой программы. Это должно выполняться независимо от того, как запущен сеанс, будь то SSH или другие средства.

В качестве отправной точки я добавил следующие строки в конец нового пользователя .bashrc (пользовательская оболочка bash):

exec /path/to/myprogram
logout

Как правило, это работает. Однако, если начало сеанса медленное, (не особенно быстрый) пользователь может нажать CTRL-C и получить счастливый запрос на терминале до myprogram . Как я могу избежать этого?

Назначение пользователю ложной оболочки, такой как /usr/sbin/nologin или /bin/false , не будет работать, так как не позволит запустить программу.

1 ответ1

1

Обычные пользователи регистрируются в журнале аутентификации (он же пользователь / пароль) и затем представляются оболочкой. Система ищет, какую оболочку запустить в файле паролей.

Пользователь может изменить ее или его оболочку с помощью команды change shell (chsh), хотя это может быть ограничено списком оболочек, перечисленным в /etc /shells.

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

Результат таков:

  1. Программа запускается. Между ними нет оболочки и нет оболочки для быстрого управления-C
  2. Когда программа завершает работу, происходит то же самое, что и при завершении работы оболочки (например, после выхода или управления d). Пользователь вышел из системы.

Обратите внимание, что это предполагает, что пользователь не может выйти из программы. Что не всегда верно. (например, почтальон почтой, поскольку вяз может убежать в раковину. То же самое для VIM). За исключением этих случаев, у пользователя не будет выбора между входом в систему и использованием одной назначенной программы.

PS: Это также означает отсутствие доступа к passwd. Я надеюсь, что пароль никогда не истекает.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .