USB к последовательным устройствам как серия Prolific или FTDI не следует ни за какой официальной спецификацией. Вместо этого они используют две объемных конечных точки (один для вывода, один для входа) с определенными определенными для поставщика управляющими сообщениями, используемыми для конфигурирования вещей как baudrate. Таким образом это не слишком много удивления если что-то как дженерик usbserial
драйвер испытывает затруднения при установке baudrates или выполнении других задач конфигурации на микросхеме FTDI. Поскольку Вы заметили, с помощью ftdi_sio
будет работать намного лучше.
Даже 10.04 должен загружаться ftdi_sio
по умолчанию, как ftdi_sio
был hardcoded для обработки 4003:6001 (FT232) устройства для почти, пока Ubuntu существовала. Мое предположение - то, что Вы загружали два драйвера, которые были оба зарегистрированы для обработки 4003:6001 - один дизайном, одним должным к параметрам модуля. При изменении ядра или даже фаза луны могла означать, что каждый, оказывается, загружается перед другим - и если usbserial
загружается сначала, Вы не сможете установить baudrate. Необходимо удалить руководство usbserial
конфигурация, и позволила ftdi_sio
обработайте устройство. Это будет работать и над 10,04 и над 12.04.
Метод 1: Мне не нравится просто, потому что за 2 секунды размышления об этом те комментарии чрезвычайно корректны. Вы создаете поверхность, которая выставляет Ваш /etc/shadow
файлу, годно ли это для использования или нет, я просто, не нравится это имеющее необходимость сделать это.
Метод 2: также плохо. Кодирование паролей в файле является просто немым. Передача их через канал кажется одинаково опасной.
Метод 3: вероятно, путь, которым я пошел бы, и я не думаю, что необходимо было бы записать собственное решение с нуля. За несколько минут поиска с помощью Google я нашел эту реализацию, что кто-то соединил использование libpam API.
c реализация
выборка реализации C - pam.c
#include <security/pam_appl.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct pam_response *reply;
int null_conv(int num_msg, const struct pam_message **msg, struct pam_response **resp, void *appdata_ptr) {
*resp = reply;
return PAM_SUCCESS;
}
static struct pam_conv conv = { null_conv, NULL };
int main(int argc, char *argv[]) {
int retval;
char *user, *pass;
if(argc == 3) {
user = argv[1];
pass = strdup(argv[2]);
} else {
fprintf(stderr, "Usage: login [username] [password]\n");
exit(1);
}
return authenticate("system-auth", user, pass);
}
int authenticate(char *service, char *user, char *pass) {
pam_handle_t *pamh = NULL;
int retval = pam_start(service, user, &conv, &pamh);
if (retval == PAM_SUCCESS) {
reply = (struct pam_response *)malloc(sizeof(struct pam_response));
reply[0].resp = pass;
reply[0].resp_retcode = 0;
retval = pam_authenticate(pamh, 0);
if (retval == PAM_SUCCESS)
fprintf(stdout, "Authenticated\n");
else
fprintf(stdout, "Not Authenticated\n");
pam_end(pamh, PAM_SUCCESS);
return ( retval == PAM_SUCCESS ? 0:1 );
}
return ( retval == PAM_SUCCESS ? 0:1 );
}
управляйте для компиляции его
$ gcc -g -lpam -o chkpasswd pam.c
пример выполняется
$ ./chkpasswd myusername mypassword
Я предположил бы, что с небольшим усилием этот подход мог быть адаптирован для удовлетворения потребностям с Ордой.
PHP implmentation
Как другая альтернатива этому подходу Вы могли потенциально самокрутка в PHP. Я нашел эту библиотеку PAM по веб-сайту PECL, который похож на то, что Вы хотели бы.
Я также смотрел бы на то, как проект Moodle делает это. Это обсуждено здесь.
Рассмотрение цели PAM, я ожидал бы, что API-интерфейс был разработан так, чтобы никакой доступ для понижения объектов уровня, такой как /etc/shadow
, должен был бы требоваться так, чтобы пользователи API могли использовать его. Это обсуждено немного на хинду Wiki в этой названной статье: PAM, раздел: Как PAM работает.
отрывок из того, Как PAM работает
Таким образом, когда пользователь хочет аутентифицировать себя против, скажем, веб-приложения, затем это веб-приложение называет PAM (передающий идентификатор пользователя и возможно пароль или проблему) и проверяет, что PAM возвращается, чтобы видеть, аутентифицируется ли пользователь и предоставленный доступ к приложению. Это - задача PAMs underlyingly для наблюдения, где пройти проверку подлинности против (такие как центральная база данных или сервер LDAP).
Сила PAM состоит в том, что все могут создать модули PAM для интеграции с любым поддерживающим PAM сервисом или приложением. Если компания выпускает новый сервис для аутентификации, все, что она должна сделать, обеспечивают модуль PAM, который взаимодействует с его сервисом, и затем все программное обеспечение, которое использует PAM, может сразу работать с этим сервисом: никакая потребность восстановить или улучшить те программные продукты.
Метод 4: Также хорошая альтернатива. Должна быть хорошая доступность к библиотекам и такому для совершения вызовов, необходимых для доступа к чему-то как LDAP по проводу, чтобы сделать аутентификацию для Вас. Сервер LDAP мог также быть установкой в той же системе как установка Орды, настроив его для просто использования Орды.
Это получило бы Вас доступ к аутентификации базовой системы, потенциально, путем "обертывания" его в сервис LDAP для Орды для потребления.
/bin/su -c /bin/true $user < $(echo $pass)
. Иметь это в виду, я не уверен, если № 3 лучше, чем № 2. И относительно реализации PHP: Разве это не означало бы (снова), что веб-серверу нужен доступ к теневому файлу? – xwst 15.12.2013, 00:42su
команда будет делать затем. Разве это не передает пароль вsu
управляйте при казни для пользователя$user
? Относительно Вашего Q относительно доступа к тени. Нет я не верю так, так как Вы будете получать доступ к тени косвенно через API PAM, который является, как это предназначено, чтобы быть. Я полагаю, что этот API обеспечивает защищенные методы для выполнения запросов аутентификации w/o имеющий необходимость дать полный доступ для чтения-записи к фактическому теневому файлу. – slm♦ 15.12.2013, 05:08su ...
и передача пароля к нему путем записи его в соответствующий канал. Исправьте меня, если я неправ, но даже если я использую API PAM, это - все еще просто библиотека, не демон. Таким образом, для процесса, использующего этот API, будут нужны права считать теневой файл!? – xwst 15.12.2013, 17:38