저는 nohup을 사용하여 matlab을 시작하고 특정 파일을 읽고 쓰는 데 필요한 스크립트를 실행합니다.
nohup matlab -nojvm -nodisplay -r 'MyScript'&
로그인되어 있는 동안에는 원활하게 실행되지만 로그아웃했다가 다시 로그인하자마자 내 matlab 프로세스가 더 이상 실행되지 않는 것을 볼 수 있습니다. nohup.out 파일을 확인한 후 다음 오류 메시지를 발견했습니다.
Unable to write file $HOME/matlab/my_mat_file.mat: permission denied
로그아웃하자마자 MATLAB 프로세스 소유자가 변경되어 더 이상 내 파일에 액세스할 수 없는 것 같습니다. 파일 권한을 변경하지 않고(예: 모든 사람에게 쓰기 권한을 부여하여) 이 오류가 발생하지 않도록 하려면 어떻게 해야 합니까?
이 오류 메시지는 GNU 화면을 사용하는 동안에도 나타납니다. ls -al $HOME
로그아웃하기 전에 GNU 화면 세션 내에서 실행하면
나는 GNU 화면 세션을 분리하고 로그아웃했다가 로그인한 다음 화면 세션에 다시 연결하여 내부 화면에 액세스했던 파일에 대한 액세스 권한을 잃었다는 사실을 발견했습니다. 의 출력은 ls -al $HOME
지금입니다
흥미롭지 않나요?
답변1
인증과 관련이 있습니다.
티켓과 토큰에 대한 몇 가지 개념과 Kerberos 인증 시스템 및 AFS가 이를 사용하는 방법부터 시작하겠습니다. 결국 내 질문에 대한 대답은 명확해질 것입니다. 로그아웃 시 AFS 토큰이 제거되었기 때문에 파일에 쓸 수 없습니다. 즉, 내 문제에 대한 해결책은 토큰이 존재하는지 여부를 결정하는 몇 줄을 matlab 스크립트에 포함시키는 것이었습니다. 이것이 정확히 어떻게 수행되었는지에 대한 답변이 끝났습니다.
입증
어디에서나 액세스할 수 있는 분산 파일 시스템을 제공한다는 것은 강력한 보안 시스템을 의미합니다. 이것이 바로 AFS가 Kerberos 인증 시스템과 통합된 강력한 인증 시스템을 보유하고 있는 이유입니다.
AFS의 인증은 토큰을 통해 해결됩니다. 토큰은 사용자에게 수명 동안 데이터에 대한 액세스 권한을 부여합니다. 대부분의 경우 토큰 처리는 원활하므로 사용자 개입이 필요하지 않습니다. 그러나 사용자는 언제든지 다음을 사용하여 자신의 이름으로 발행된 토큰을 나열할 수 있습니다.tokens
username@machine00 ~ $ tokens
Tokens held by the Cache Manager:
User's (AFS ID xxxxx) tokens for [email protected] [Expires Mar 20 05:10]
--End of list--
AFS 토큰은 Kerberos 식별자 티켓에서 얻습니다. 토큰과 마찬가지로 Kerberos 티켓도 사용자를 식별합니다. Kerberos 인증 시스템을 사용하는 동안 사용자는 KDC(키 배포 센터)에서 티켓 부여 티켓이라는 초기 티켓을 발급받습니다. 이 첫 번째 티켓은 사용자를 고유하게 식별하고 AFS 토큰과 같은 추가 서비스에 필요한 특정 티켓을 얻을 수 있도록 합니다. 실제로 AFS 서비스에 대한 Kerberos 티켓을 직접 사용할 수 있으며 AFS 식별 토큰이 있습니다.
대부분의 경우 Kerberos의 티켓 부여 티켓은 사용자 로그인 중에 자동으로 획득됩니다. AFS 초기 토큰에서도 동일한 일이 발생합니다. 토큰과 마찬가지로 Kerberos 티켓 처리는 대부분의 경우 사용자에게 보이지 않지만 다음을 사용하여 발행된 티켓을 나열할 수 있습니다.klist
username@machine00 ~ $ klist
Credentials cache: FILE:/tmp/krb5cc_V16088
Principal: [email protected]
Issued Expires Principal
Mar 19 19:10:11 Mar 20 05:10:11 krbtgt/[email protected]
Mar 19 19:10:11 Mar 20 05:10:11 afs/[email protected]
username@machine00 ~ $
자격 증명 캐시는 티켓이 발견된 파일의 위치입니다. 주체는 사용자 ID이며 기본적으로 사용자 이름과 Kerberos 영역 도메인의 조합으로 생성됩니다. Kerberos 영역은 일반적으로 대문자로 지정되며 대소문자를 구분합니다. 다음은 발행된 티켓 목록과 해당 발행 날짜 및 만료 날짜입니다. 이 경우 첫 번째 티켓( krtbg
)은 영역의 티켓 부여 티켓에 해당 KERBEROS.REALM.DOMAIN
하고 두 번째 티켓은 afs 셀 your.system.domain
(일반적으로 찾을 수 있는 도메인과 동일한 이름을 가짐)의 AFS 토큰에 해당합니다. 다른 Kerberos 티켓이 요청된 경우 목록에 표시될 수 있습니다.
토큰 갱신
AFS 토큰이 만료되면 AFS 계정에 더 이상 액세스할 수 없습니다. 이러한 이벤트가 발생한 증상은 OS마다 다르지만 Unix/Linux에서는 일반적으로 파일에 액세스하려고 할 때 권한 거부 메시지가 표시됩니다.
username@machine00 ~ $ ls
ls: .: Permission denied
토큰이 만료되면 갱신해야 합니다. 가장 쉬운 방법은 로그아웃했다가 다시 로그인하는 것입니다. 대부분의 경우 토큰 갱신은 로그인 시 자동으로 발생하기 때문입니다. 그러나 때로는 로그아웃이 옵션이 아닌 것으로 밝혀졌습니다. 특히 종료하고 싶지 않은 작업을 실행 중인 경우에는 더욱 그렇습니다.
티켓 갱신을 위한 대체 솔루션은 kinit
및 를 aklog
순서대로 사용하는 것입니다. 비밀번호가 필요한 첫 번째 명령( kinit
)을 사용하면 사용자 재인증 및 티켓 부여 티켓 갱신이 가능합니다. 다음으로, aklog
명령을 사용하면 Kerberos 티켓에서 AFS 토큰을 얻을 수 있습니다. kinit
기본 주체 및 영역에 대한 티켓을 얻으려고 시도합니다 . 이것이 정의되지 않았거나 사용자가 티켓 요청 시 다른 사용자 이름을 사용하는 경우 다음과 kinit
같이 사용해야 합니다 .kinit <principal>@<realm>
username@machine00 ~ $ kinit [email protected]
[email protected]'s Password:
username@machine00 ~ $
AFS 토큰을 삭제하는 aklog
is 의 반대 입니다. unlog
이에 따라 kdestroy
티켓 파일을 제거하고 모든 Kerberos 티켓을 삭제합니다.
이것이 어떻게 하루를 절약하고 친구와 가족을 사랑하는 데 도움이 되었는지
처음에 말했듯이 이 개념을 아는 것은 내 MATLAB 세션에서 무슨 일이 일어나고 있는지 더 잘 이해하는 데 도움이 되었습니다. 로그아웃 후 내 AFS 토큰은 더 이상 존재하지 않으며 실행 중인 프로세스에는 더 이상 내 afs 볼륨에 쓸 수 있는 권한이 없습니다. 현재로서는 로그아웃 후에도 MATLAB 스크립트가 계속해서 파일을 읽고 쓰는 것을 보장하는 데 관심이 있으므로 AFS 볼륨에 액세스하기 전에 AFS 토큰에 대한 테스트를 포함하도록 주의했습니다.
ticket_status = unix('klist -s');
if ticket_status ~= 0,
unix 'kinit [email protected] <<< "password"';
unix aklog
end
save
내가 말했듯이 이것은 matlab 스크립트로 들어가고 어떤 또는 load
matlab 명령 바로 앞에 배치했습니다 . 이 코드는 matlab 명령을 사용하여 unix
Unix 셸에서 인수를 실행하고 결과를 반환합니다. Unix 명령은 자동으로 klist -s
실행되지만 klist
종료 상태를 반환합니다. 자격 증명의 종료 상태를 테스트하고 자격 증명이 존재하지 않거나 만료된 경우 새 자격 증명을 요청합니다.