24 -Ошибка входа в iSCSI из-за сбоя авторизации

POSIX определяетgetpwuidкак стандартную функцию C для поиска в пользовательской базе данных идентификатора пользователя, позволяющего преобразовывать идентификатор в имя пользователя. Я скачал исходный код для GNU coreutils и вижу, что эта функция используется в их реализации таких утилит, как idи ls.

В качестве обучающего упражнения я написал эту быструю -и -грязную программу на языке C, чтобы она просто выполняла роль оболочки для этой функции. Имейте в виду, что я не программировал на C со времен колледжа (много лет назад )и я не собираюсь использовать это в производстве, но я решил опубликовать это здесь в качестве доказательства концепции (если кто-то хочет отредактировать, не стесняйтесь):

#include 
#include   /* atoi */
#include 

int main( int argc, char *argv[] ) {
    uid_t uid;
    if ( argc >= 2 ) {
        /* NB: atoi returns 0 (super-user ID) if argument is not a number) */
        uid = atoi(argv[1]);
    }
    /* Ignore any other arguments after the first one. */
    else {
        fprintf(stderr, "One numeric argument must be supplied.\n");
        return 1;
    }

    struct passwd *pwd;
    pwd = getpwuid(uid);
    if (pwd) {
        printf("The login name for %d is: %s\n", uid, pwd->pw_name);
        return 0;
    }
    else {
        fprintf(stderr, "Invalid user ID: %d\n", uid);
        return 1;
    }
}

У меня не было возможности протестировать его с помощью NIS/LDAP, но я заметил, что если в /etc/passwdесть несколько записей для одного и того же пользователя, он игнорирует все, кроме первого.

Пример использования:

$./get_user ""
The login name for 0 is: root

$./get_user 99
Invalid user ID: 99

0
30.11.2021, 04:00
1 ответ

На самом деле я только что сам столкнулся с этой проблемой. Надеюсь, причина вашей ошибки была такой же, как у меня:

Задача:

Я был на 100% уверен, что секреты главы были точными в /etc/iscsi/iscsid.conf, но проверил еще раз, чтобы убедиться, что я не ввел ошибку копирования -n -вставки. Секреты главы были одинаковыми на сервере хранения и клиенте, но, тем не менее, продолжали выдавать ошибку.

Моя конфигурация:

Я использую open-iscsiна хостах Linux для подключения кхранилищу Synologyс доступом к LUN.

Решение:

После долгих раздумий мне пришло в голову уменьшить сложность секретов CHAP :Убрать -специальные символы

  1. В /etc/iscsi/iscsid.confудалите все специальные символы. Скопируйте этот обновленный пароль.

  2. Обновление кэшированных копий пароля в/etc/iscsi/nodes

  3. sudo systemctl restart iscsid.service

  4. Вставьте обновленный пароль в хост хранилища, открывающий LUN в вашей сети.

  5. Теперь попробуйте переподключиться к LUN (с ); теперь все должно подключаться, если проблема связана со специальными символами.

Заключение:

Сначала ошибка казалась отвлекающим маневром, но она была на 100 % верна. Действительно, аутентификация WAS не удалась, но не потому, что секреты CHAP отличались между хостом хранилища и клиентом. Это не удавалось из-за того, что аутентификация прерывалась специальными символами.

Так или иначе,проблема не была сложной, но немного -пустой тратой времени...

0
30.11.2021, 17:59

Теги

Похожие вопросы