코드가 서명되었는지 확인할 수 있는 셸이 있나요?

코드가 서명되었는지 확인할 수 있는 셸이 있나요?

이번 주에 PowerShell을 가지고 놀다가 스크립트를 실행하려면 스크립트에 서명해야 한다는 것을 발견했습니다. bash 스크립트 실행 방지와 관련하여 Linux에 유사한 보안 기능이 있습니까?

내가 아는 한, 이와 유사한 기능은 특정 키가 필요한 SSH뿐입니다.

답변1

예, 아니오.

Linux 소프트웨어 배포는 Windows 소프트웨어 배포와 약간 다르게 작동합니다. (비임베디드) Linux 세계에서 소프트웨어를 배포하는 주요 방법은 배포판(Ubuntu, Debian, RHEL, Fedora, Arch 등)을 이용하는 것입니다. 약 10년 동안 모든 주요 배포판은 체계적으로 패키지에 서명했습니다.

소프트웨어가 독립적으로 배포되는 경우 소프트웨어 배포 방법을 결정하는 것은 공급업체입니다. 좋은 공급업체는 주요 배포판과 호환되는 패키지 소스를 제공하고(모든 Linux에 통일된 배포 메커니즘은 없습니다. 소프트웨어 배포는 배포판 간의 주요 차별화 포인트 중 하나입니다) 공급업체의 키로 서명됩니다. 타사 공급업체의 서명 기관 역할을 하는 Linux 배포판은 거의 없으며(Canonical은 Ubuntu 파트너와 함께 이 작업을 수행하지만 공급업체는 거의 포함되지 않음), 모든 주요 배포판은 TLS 공개 키 기반 시설이 아닌 PGP 신뢰 네트워크를 사용한다고 생각합니다. 키를 신뢰할지 여부를 결정하는 것은 사용자의 몫입니다.

기본 실행 파일, 데이터 파일 또는 여러 파일로 구성된 패키지에서 단일 스크립트로 구성된 패키지를 정렬하는 특별한 메커니즘은 없습니다. 또한 패키지 확인은 스크립트 실행과 완전히 직교하는 문제이기 때문에 일반적인 스크립트 해석기에는 서명 확인 기능이 내장되어 있지 않습니다.

Windows에서는 소스로 파일에 주석을 달고 "로컬" 대신 "다운로드" 소스로 파일을 실행하려면 사용자 확인이 필요하다고 생각합니다. Linux에는 실제로 유사한 메커니즘이 없습니다. 가장 가까운 것은 실행 권한입니다. 다운로드한 파일에는 실행 권한이 없으므로 사용자가 이를 명시적으로 활성화해야 합니다( chmod +x명령줄 또는 파일 관리자의 이에 상응하는 항목에서).

답변2

사용자의 스크립트 실행 기능을 잠그려는 경우 이 기능을 sudo사용할 수 있습니다 . 실행 전에 확인될 스크립트/실행 파일의 해시를 지정할 수 있습니다 . 따라서 서명과 동일하지는 않지만 최소한 sudoer를 수정하지 않고도 스크립트가 수정되지 않았음을 기본적으로 보장합니다.digest
sudoerssudo

명령 이름 앞에 Digest_Spec이 붙은 경우 지정된 SHA-2 다이제스트를 사용하여 확인할 수 있는 경우에만 명령이 성공적으로 일치합니다. 이는 sudo를 호출하는 사용자에게 명령이나 해당 상위 디렉터리에 대한 쓰기 액세스 권한이 있는 경우 유용할 수 있습니다. 지원되는 다이제스트 형식은 sha224, sha256, sha384 및 sha512입니다. 문자열은 16진수 또는 base64 형식으로 지정할 수 있습니다(base64가 더 간단합니다). openssl, shasum, sha224sum, sha256sum, sha384sum, sha512sum과 같이 16진수 형식으로 SHA-2 다이제스트를 생성할 수 있는 여러 유틸리티가 있습니다.

http://www.sudo.ws/man/1.8.13/sudoers.man.html

답변3

Linux는 디지털 서명을 기반으로 bash 스크립트의 실행을 제한하는 기능을 제공하지 않습니다.

바이너리 실행 파일의 유효성을 검사하는 작업이 있습니다. 바라보다https://lwn.net/Articles/488906/정보를 얻는 중입니다.

답변4

Linux 배포판에는 일반적으로누푸그. 당신이 원하는 것은 인수 스크립트에 대해 분리된 gpg 서명을 확인하고 확인이 성공한 경우에만 스크립트를 계속 실행하는 간단한 bash 래퍼인 것 같습니다.

#!/bin/sh
gpgv2 $1.asc && bash "$@"

관련 정보