profile.d 스크립트에 필요한 자격 증명을 안전하게 저장하는 방법은 무엇입니까?

profile.d 스크립트에 필요한 자격 증명을 안전하게 저장하는 방법은 무엇입니까?

부인 성명:

Ubuntu 20.04를 사용하고 있지만 내 문제가 특정 Linux 배포판과 관련된 것 같지 않습니다. 오랫동안 인터넷을 검색하여 다른 유사한 질문과 답변을 많이 찾았지만 내 특정 문제와 관련된 구체적인 내용은 없습니다.

내가 하고 싶은 것:

사용자가 로그인할 때(ssh 또는 콘솔을 통해) 실행하려는 스크립트가 있습니다. 그래서 실행하려면 자격 증명이 필요한 스크립트(예: 컬을 통한 REST 호출용 토큰)를 /etc/profile.d에 넣어야 한다고 생각합니다. 필수 자격 증명은 모든 사용자에게 동일하며 사용자별로 다르지 않습니다. 사용자가 자격 증명을 보는 것을 원하지 않습니다.

내 문제는 다음과 같습니다

/etc/profile.d의 스크립트는 로그인한 사용자 계정으로 실행 중인 것으로 보입니다. 자격 증명을 환경 변수에 저장하면 사용자가 이를 볼 수 있습니다. 자격 증명을 파일에 저장하는 경우 사용자는 파일을 읽을 수 있어야 합니다. 그렇지 않으면 스크립트가 해당 파일을 읽을 수 없습니다. 데이터베이스에 자격 증명을 저장하는 경우 데이터베이스에 액세스하고 원래 문제에 직면하기 위해 다른 암호를 사용하려면 자격 증명이 필요합니다.

내가 생각해낸 것:

루트로만 읽을 수 있는 자격 증명 파일에 액세스하여 sudo를 통해 루트로 간접적으로 스크립트를 실행했습니다.

/etc/profile.d/run-my-script.sh include 스크립트를 추가했습니다 sudo my-script.sh $USER. ( 처음에 누가 로그인했는지 $USER알아야 함 ) 그런 다음 (소유자 루트)을 만들고 내 자격 증명을 파일에 저장했습니다 (또한 chmod 600, 소유자). 뿌리).m̀y-script.shchmod 600 my-script.sh.credentials

my-script.sh파일에서 자격 증명을 읽고 실행 read TOKEN < /etc/profile.d/.credentials이 끝나면 실행했습니다 unset TOKEN.

마지막으로 visudo를 통해 추가했습니다.

ALL     ALL=(ALL) NOPASSWD: /etc/profile.d/other-script.sh

내 질문:

내 "솔루션"은 효과가 있지만 일반적인 문제일 가능성이 큰 문제에 대해서는 투박한 느낌이 듭니다. 동일한 효과를 얻는 더 쉬운 방법이 있습니까? 제가 취약점을 놓쳤나요? 내 솔루션이 예상치 못한 방식으로 자격 증명을 노출했나요?

감사해요.

관련 정보