Я работаю над программным обеспечением и настройкой устройства, использующего Linux.
Меня попросили предоставить административный интерфейс, который не требует знания Linux для использования и имеет ограниченные возможности.
Я считаю, что лучший способ справиться с этим - использовать консольный вход (либо через ssh, либо через последовательный порт) для представления меню параметров. Допустим, у меня есть программа под названием admin_menu
который выполняет все мои желаемые задачи.
Итак, я смогу создать такую строку в / etc / password:
admin:x:230:235:Administrative Interface:/home/admin:/local/sbin/admin_menu
Есть ли какие-то особые соображения, о которых мне нужно знать, когда я создаю свой admin_menu
программа? Прямые ответы - это хорошо, но еще лучше - указатели на хорошие документы.
Общие области, по которым мне нужна дополнительная информация:
Вы можете поместить любую программу вместо / bin / sh в запись / etc / profile, будь то сценарий оболочки или исполняемый двоичный файл. Вещь, за которой вы хотите следить, - это экранирование в оболочку - если вы пытались захватить их в программе, вы, вероятно, не хотите, чтобы они получали доступ к командной строке.
Например, если программа оказалась чем-то вроде vi, пользователь мог бы использовать ":! / Bin / sh" и перейти к командной строке. Точно так же при использовании сценария часто вводимые пользователем данные используются в качестве данных в командной строке - это также может быть использовано для получения командной строки. Если бы интерфейс меню предлагал вам файл для печати, который можно было бы использовать в команде «lpr $ input», что произойдет, если введенное имя файла будет «myfile.txt; / bin / sh»?
Есть несколько других способов выхода из командной строки, вам нужно быть очень осторожным при настройке захваченной учетной записи, которая принимает ввод данных пользователем.
Сценарий может работать как оболочка входа в систему. Вам нужно будет добавить / local / sbin / admin_menu в /etc/shells
. В противном случае логины ssh (и, возможно, другие) не будут работать без объяснения причин (если я правильно помню).
Есть некоторые переменные среды, которые будут передаваться от клиента, например размер окна. Некоторые будут установлены при входе в систему. PAM могу установить некоторые из них, но у меня нет примера.
По окончании процесса меню, я думаю, клиент выходит из системы. Я основываю это на наблюдении за тем, что происходит, когда /bin/bash
прекращается.
На вашем месте я бы использовал stdin / stdout для вашего источника ввода и вывода.