응용 프로그램을 통해 파일을 읽기 전용으로 허용

응용 프로그램을 통해 파일을 읽기 전용으로 허용

비밀이 포함된 파일과 파일을 읽고 라이센스와 같은 것을 생성하는 생성기 응용 프로그램이 있습니다.
이 Linux 컴퓨터의 사용자는 애플리케이션을 사용할 수 있습니다.
애플리케이션은 비밀 파일을 읽기 때문에 이러한 사용자는 파일에 대한 읽기 권한이 있어야 합니다.

이러한 사용자에 대한 읽기 권한을 제거하고 해당 사용자가 응용 프로그램을 실행할 때 응용 프로그램이 응용 프로그램을 통해서만 파일을 읽도록 하는 방법이 있습니까?

나는 응용 프로그램을 실행하는 사람이 파일을 통해서만 파일을 읽을 수 있기를 원합니다. 그 뿐만 아니라 cat그것이 무엇인지 지켜보십시오.

  • 해결 방법을 봤습니다
chmod 400 secret_file
chmod 110 generator
chmod u+s generator

이런 방식으로 같은 그룹의 사용자는 generator실행할 수는 있지만 generator읽을 수는 없습니다 secret_file.
하지만 generator나에게는 그것이 있기 setuid때문에 generator읽을 수 있다 secret_file.
이것은 좋은 솔루션이지만 사용자 이름을 포함하고 싶고 generator이 솔루션을 사용하면 항상 소유자 이름을 얻을 수 있습니다.
이것이 c/cpp 애플리케이션에서 사용자 이름을 얻는 방법입니다.

#include <pwd.h>

uid_t uid = geteuid();
struct passwd *pw = getpwuid(uid);
std::string user_name = pw->pw_name;

이 문제를 해결할 다른 방법이 있나요? 도울
수 있니 apparmor? (내가 이해할 수없는)

후속 질문 - 특정 스크립트에 의해서만 파일을 실행 가능하게 만드는 방법이 있습니까? generator쉘에서 실행하고 싶지 않다는 뜻입니다 . 나는 직선 주자가 실패하고 직선 주자가 성공하기를 원하기 때문에 generator.sh호출되는 다른 스크립트에서만 실행 되기를 원합니다 .generatorgenerator.shgeneratorgenerator.sh

답변1

사용getuid()바꾸다 geteuid().

~에서execve()매뉴얼 페이지:

set-user-ID 비트가 경로 이름으로 참조되는 프로그램 파일에 설정된 경우유효한 사용자 ID호출 프로세스의 이름은 프로그램 파일 소유자의 이름으로 변경됩니다.

반환된 "실제" 사용자 ID는 getuid()변경되지 않습니다. 즉, 프로세스를 시작한 사용자의 UID입니다.


또 다른 한가지:

쉘에서 생성기를 실행하고 싶지 않습니다. 나는 Generator.sh에서 더 많은 작업을 수행하기 때문에 Generator를 호출하는 다른 스크립트 Generator.sh에서만 실행되기를 원합니다.

setuid 스크립트를 가질 수 없기 때문에 더욱 어렵습니다. 그러나 스크립트만 실행하는 setuid 래퍼가 있을 수 있으며, 그런 다음 최종 바이너리를 실행할 수 있습니다. 또는 sudo를 사용하여 스크립트를 실행하세요. 그러나 쉘이 setuid를 좋아하지 않는다는 문제가 발생할 수 있습니다.setuid 비트는 bash에 영향을 미치지 않는 것 같습니다.그리고쉘 스크립트에 setuid 설정 허용.

또한 참고하시기 바랍니다셸을 포함하면 추가적인 보안 문제가 발생할 수 있으며, 다른 setuid 프로그램과 마찬가지로 실행 환경이 깨끗한지 확인해야 합니다. 여기에는 환경 변수와 파일 설명자가 포함되지만 다른 상속 가능한 기능도 포함될 수 있습니다. sudo를 사용하는 한 가지 이유는 최소한 그러한 문제를 처리하려고 시도하기 때문입니다.

또 다른 더 나은 방법이는 권한 있는 프로세스를 네트워크 서비스로 구현하고 사용자가 간단한 멍청한 클라이언트 프로그램만 실행할 수 있도록 합니다.

관련 정보