Это как делать с аутентификацией.
Я начну с некоторых понятий о билетах и токенах и о том, как их использует система аутентификации Kerberos и AFS. К концу ответ на мой вопрос будет ясен, мне не разрешено писать в файл просто потому, что мой токен AFS был удален при выходе из системы. Тем не менее, решение моей проблемы заключалось в том, чтобы включить в сценарий matlab несколько строк, которые определяют, существует ли токен или нет, если он не создается. Как это было сделано, точно завершает ответ.
Аутентификация
Предоставление распределенной файловой системы, доступной в любом месте, подразумевает надежную систему безопасности. Вот почему AFS имеет строгую систему аутентификации, интегрированную с системой аутентификации Kerberos.
Аутентификация в AFS решается с помощью токена. Токены предоставляют пользователям доступ к данным в течение их жизненного цикла. Во многих случаях обработка токенов проходит гладко, не требуя вмешательства пользователя. Однако пользователь может в любой момент перечислить токены, выпущенные от его имени, с помощью tokens
username@machine00 ~ $ tokens
Tokens held by the Cache Manager:
User's (AFS ID xxxxx) tokens for afs@your.system.domain [Expires Mar 20 05:10]
--End of list--
Токены AFS получены из идентификационного билета Kerberos. Аналогично токенам билеты Kerberos также идентифицируют пользователя. При использовании системы аутентификации Kerberos пользователю выдается KDC (Центр распространения ключей) начальный билет, называемый билетом на выдачу билетов. Этот первый билет однозначно идентифицирует пользователя и позволяет ему получить специальные билеты, необходимые для дополнительных услуг, таких как токены AFS. Фактически, вы можете напрямую использовать билет Kerberos для службы AFS, имеющей идентификационный токен AFS.
В большинстве случаев билет на выдачу билетов Kerberos автоматически получается при входе пользователя в систему. То же самое происходит с начальным токеном AFS. Как и токены, обработка билетов Kerberos в большинстве случаев невидима для пользователя, но вы можете перечислить выданные билеты, используя klist
username@machine00 ~ $ klist
Credentials cache: FILE:/tmp/krb5cc_V16088
Principal: username@KERBEROS.REALM.DOMAIN
Issued Expires Principal
Mar 19 19:10:11 Mar 20 05:10:11 krbtgt/KERBEROS.REALM.DOMAIN@KERBEROS.REALM.DOMAIN
Mar 19 19:10:11 Mar 20 05:10:11 afs/your.system.domain@KERBEROS.REALM.DOMAIN
username@machine00 ~ $
Кэш учетных данных - это местоположение файла, в котором находятся билеты. Принципал - это идентификатор пользователя, который в основном является результатом комбинации имени пользователя и домена области Kerberos. Обратите внимание, что область Kerberos обычно указывается в верхнем регистре и чувствительна к регистру. Далее у нас есть список выпущенных билетов, с соответствующими датами выдачи и сроком действия. В этом случае первый билет (krtbg
) соответствует билету на выдачу билетов в области KERBEROS.REALM.DOMAIN
а второй - токену AFS в ячейке your.system.domain
(имя которого обычно совпадает с именем домен, в котором это можно найти). Другие билеты Kerberos могут появиться в списке в случае, если они были запрошены.
Обновление токена
По истечении срока действия токена AFS доступ к учетной записи AFS становится невозможным. Признаки того, что такое событие имеет место, варьируются от ОС к ОС, однако в Unix/Linux вы обычно получаете сообщение об отказе в доступе при попытке доступа к вашим файлам:
username@machine00 ~ $ ls
ls: .: Permission denied
Когда токен истекает, вам нужно его обновить. Самый простой способ сделать это - выйти из системы и войти снова, поскольку в большинстве случаев обновление токена происходит автоматически при входе в систему. Но оказывается, что иногда выход из системы невозможен, особенно если вы запускаете что-то, что не хотите выходить, что имеет место.
Альтернативное решение для обновления билета используется kinit
и aklog
в последовательности. Первая из этих команд (kinit
), для которой требуется ваш пароль, позволяет выполнить повторную проверку подлинности пользователя и возобновить выдачу билетов. Затем команда aklog
позволяет получить токен AFS из билета Kerberos. Обратите внимание, что kinit
пытается получить билет для основного субъекта и области по умолчанию. Если они не определены или если пользователь использует другое имя пользователя во время запроса билета, kinit
следует использовать как kinit <principal>@<realm>
, например:
username@machine00 ~ $ kinit username@KERBEROS.REALM.DOMAIN
username@KERBEROS.REALM.DOMAIN's Password:
username@machine00 ~ $
Противоположностью aklog
является unlog
, который удаляет токен AFS. Соответственно, kdestroy
удаляет файл заявок , удаляя все билеты Kerberos.
Как это спасло день и помогло мне полюбить своих друзей и семью
Как было сказано в начале, знание об этих концепциях помогло мне лучше понять, что происходит с моим сеансом Matlab. После выхода из системы моего токена AFS больше не было, и у моих запущенных процессов больше не было разрешения на запись в мой том afs. Поскольку на данный момент меня интересует только то, чтобы мой скрипт Matlab продолжал чтение и запись файлов даже после выхода из системы, я осторожно включил тест на токен AFS перед любым доступом к тому AFS.
ticket_status = unix('klist -s');
if ticket_status ~= 0,
unix 'kinit username@KERBEROS.REALM.DOMAIN <<< "password"';
unix aklog
end
Как я уже сказал, это относится к сценарию matlab, и я разместил его перед любыми командами save
или load
. Код использует команду matlab unix
для запуска своих аргументов в оболочке Unix и возврата результатов. Команда Unix klist -s
запускает klist
но возвращает статус завершения . Мы проверяем состояние выхода для учетных данных и запрашиваем новые в случае, если они не существуют или истек срок их действия.