사용자에게 도구가 제공되고 유일한 운영 사용자에게 기본 스크립트 실행이 허용되어야 하는 시나리오를 생각해 보십시오. 이제 도구는 일부 파일을 사용하여 민감한 정보를 저장합니다. 내가 원하는 것은 스크립트가 파일의 데이터에 액세스할 수 있어야 하지만 사용자는 액세스할 수 없어야 한다는 것입니다. 그가 가져야 하는 유일한 액세스 권한은 스크립트를 실행하는 것입니다.
간단한 경우, 도구에 main.sh 파일 2개가 포함되어 있다고 가정해 보겠습니다. 스크립트 사용자는 실행만 할 수 있고 읽을 수도 없고 info_file에 일부 민감한 정보가 포함되어 있으므로 사용자가 아닌 main.sh만 사용해야 합니다. .
이 도구는 다른 컴퓨터의 다른 사용자에게 제공될 수 있습니다. Linux에서 이러한 시나리오를 처리하는 다양한 방법은 무엇입니까?
답변1
SUID를 사용하는 한 가지 방법.
그룹 및 다른 사용자에게만 쉘 스크립트 및 정보 파일에 대한 실행 권한을 부여하십시오.
쉘 스크립트를 호출하는 래퍼 C 프로그램을 작성하십시오.
C 실행 파일에 SUID 비트를 설정합니다. (chmod u+s 파일)
최종 사용자는 C 실행 파일을 호출합니다.
답변2
쉬운 옵션은 보조 파일을 암호화/해독하는 것입니다. 그렇게 하는 방법은 여기에서 살펴봅니다.https://serverfault.com/questions/489140/what-is-a-good-solution-to-encrypt-some-files-in-unix
스크립트 자체가 실제로 컴파일된 코드가 아닌 한, 스크립트를 읽으면 키를 쉽게 검색하고 사용된 암호화 방법을 이해할 수 있으며, 심지어 디컴파일될 수 있으므로 무적은 아닙니다. 컴파일된 언어 코드라면 대부분의 언어에는 암호화/복호화 스크립트를 호출하는 방법이 있고 암호화된 버전을 저장하면 됩니다.
답변3
민감한 정보를 보호하는 유일한 방법은 다음과 같습니다.아니요사용자가 소유하게 하세요어느개인용 컴퓨터나 중앙 서버에서 직접 액세스하세요.
예를 들어:
- 사용하도록 제공되는 실행 전용(즉, 읽기 액세스 없음) 래퍼 스크립트를 작성합니다
sudo
. 이는 루트로 실행할 필요가 없으며 루트가 아닌 전용 사용자로 충분합니다. - 사용자가 자신의 컴퓨터에서 실행할 수 있도록 스크립트 복사본을 제공하지 마십시오. 대신 서버에서(예: 를 통해
ssh servername sudo myscript.sh
) 실행하도록 요청하세요. 서버가 액세스 제어를 유지할 수 있는 유일한 장소이기 때문입니다.