저는 CentOS 7.3을 사용하고 있습니다.
아래 시나리오에서 Kerberos TGT 손실을 방지하려면 어떻게 해야 합니까?
나는 로그아웃 시 Kerberos 티켓을 파기하지 않는 것이 보안에 미치는 영향을 이해하고 있으며 이에 대해 더 깊이 파고들 것입니다. 하지만 저는 아래에 제시하는 가장 간단한 예부터 시작하고 싶습니다.
[email protected]$ klist
klist: Credentials cache keyring 'persistent:25536700022:krb_ccache_h3j7qk7' not found
[email protected]$ kinit
Password for [email protected]:
[email protected]$ klist
Ticket cache: KEYRING:persistent:25536700022:krb_ccache_h3j7qk7
Default principal: [email protected]
Valid starting Expires Service principal
08/03/2018 17:06:45 08/04/2018 17:06:41 krbtgt/[email protected]
[email protected]$ ssh -K host
Last login: Fri Aug 3 17:06:21 2018 from 10.250.57.186
[email protected]$ klist
Ticket cache: KEYRING:persistent:25536700022:krb_ccache_h3j7qk7
Default principal: [email protected]
Valid starting Expires Service principal
08/03/2018 17:06:54 08/04/2018 17:06:41 krbtgt/[email protected]
[email protected]$ exit
logout
Connection to host closed.
[email protected]$ klist
klist: Credentials cache keyring 'persistent:25536700022:krb_ccache_h3j7qk7' not found
[email protected]$
업데이트 #1
다음과 같이 SSH 서버 구성을 업데이트하면 제시된 문제가 해결됩니다.
GSSAPICleanupCredentials no
그러나 이를 무조건적으로 수행하는 것은 보안에 부정적인 영향을 미치기 때문에 바람직하지 않습니다. 작업을 마친 후 만료되지 않은 티켓을 기계에 그대로 놔두는 것은 위험합니다.
사용 사례에 대한 자세한 내용
원격 호스트에서 명령을 실행하기 위해 SSH를 사용하고 있습니다. 원격 호스트에서 실행되는 명령은 SSH를 사용하여 또 다른 호스트에서 원격 명령을 실행할 수 있습니다. 이는 모두 스크립트로 작성/자동화되어 있으므로 비밀번호를 묻는 메시지가 표시되는 것을 허용할 수 없습니다. 이것이 내가 사용한 이유이다SSH -K. 그만큼-케이플래그는 Kerberos TGT를 SSH를 사용하는 호스트로 전달하므로 암호를 입력하지 않고도 해당 호스트에서 다른 호스트로 SSH를 연결할 수 있습니다.
특정 사용 사례에서는 명령을 실행하기 위해 SSH를 사용하는 "원격" 호스트 중 하나가 이미 있는 호스트인 경우가 있습니다. 위에 표시된 구성 변경 없이 "remote" 명령 실행이 완료되고 SSH 세션이 종료된 후 Kerberos 티켓이 삭제됩니다.우리가 지금 타고 있는 기계에서! 그런 다음 모든 호스트에 대해 비밀번호 없는 방식으로 SSH를 수행하는 기능을 상실했습니다.
사용 사례에 대한 안전한 솔루션 검색
무조건적인 보안 영향을 피하기 위해~ 아니다로그아웃 시 Kerberos 티켓을 파기하는 방법에 대해 좀 더 자세히 알아보고 싶습니다.
다음 중 하나를 수행할 수 있는 방법이 있습니까?
- SSH를 사용하려는 머신에 아직 Kerberos TGT가 없는 경우에만 Kerberos TGT를 전달하세요.
- 종료할 때만 Kerberos 티켓을 파기하십시오.마지막쉘 세션
내가 고려하지 않은 다른 가능성이 있습니까?
답변1
결국 .bash_profile에 다음을 넣었습니다.
cleanup()
{
SHELL_COUNT=$(ps -elf | grep bash | grep $(whoami) | grep -v grep | wc -l)
if [[ "$SHELL_COUNT" -eq 2 ]]; then
kdestroy -q
fi
}
trap '
cleanup
' 0