동일한 사용자가 애플리케이션 파일에 액세스하지 못하도록 보호

동일한 사용자가 애플리케이션 파일에 액세스하지 못하도록 보호

응용 프로그램이 응용 프로그램 자체에서만 액세스할 수 있는 파일을 만들 수 있는지 궁금합니다. 문제는 루트 액세스 권한이 없다는 것입니다.

예를 들어, UserA로 응용 프로그램을 실행하는 경우 UserA가 실행하는 다른 응용 프로그램이 이러한 파일에 액세스할 수 없도록 하고 싶습니다.

답변1

파일의 권한을 다음으로 설정하거나 0600응용 프로그램을 실행하는 사용자에 대해 설정하면 umask 077응용 프로그램 사용자 및 만 파일에 액세스할 수 있습니다 root.

답변2

과거에는 제거된 proc(5)시스템에서 프로세스가 파일을 생성하고 열 수 있었으며 unlink(2)유효하고 열린 익명 파일 핸들을 가질 수 있었습니다. 다른 프로세스의 이름을 지정할 수 없으므로 파일 이름을 지정할 수 없습니다. open(2)동일한 사용자(또는 루트)가 실행하는 다른 프로세스도 마찬가지입니다.

그러나 대부분의 Linux 시스템은 /proc마운트되기 때문에 이름이 지정되지 않은 파일에도 이름이 유지 /proc/2757/fd/4되므로 동일한 사용자가 실행하는 다른 프로세스가 해당 이름에 액세스할 수 있습니다.

답변3

나는 현재 뿌리를 포함하지 않고 원하는 것을 달성하는 방법을 생각할 수 없습니다. 따라서 시스템 관리자에게 문의하여 애플리케이션에 대한 두 번째 계정을 얻으십시오.

답변4

권한이 없는 프로세스는 자신은 읽을 수 있지만 해당 사용자로 실행 중인 다른 프로세스는 읽을 수 없는 파일을 생성할 수 없습니다.

증명: 프로세스 A(권한 없음)가 파일을 열고 프로세스 B(동일한 사용자로 실행)도 파일을 열려고 한다고 가정합니다. 프로세스 B는 호출할 수 있습니다.ptrace제어 프로세스 가. ptrace시스템 호출을 통해 프로세스 B는 프로세스 A를 위한 Unix 소켓을 설정하고 이를 통해 열린 파일 설명자를 전달하는 등 프로세스 A 내에서 임의의 코드를 실행할 수 있습니다(파일 설명자 전달은 이름에서 알 수 있듯이 Unix 데이터그램 소켓의 기능이므로 발신자가 다음을 수행할 수 있습니다). 파일 설명자를 수신자에게 보내면 수신자는 동일한 모드에서 동일한 파일을 엽니다.

교수의 의도는 파일을 연 다음 삭제하는 것일 수 있습니다. 삭제된 파일(기술적으로 링크되지 않은 파일)은 일반적인 방법으로 열 수 없습니다. open인수로 전달될 수 있는 이름이 없기 때문에 어떤 프로세스(권한이 있는 프로세스라도)를 통해 시스템 호출을 통해 열 수 없습니다 . 그러나 파일을 연 프로세스는 파일을 계속 사용할 수 있습니다. 파일을 연 마지막 프로세스가 종료될 때만 파일이 실제로 삭제됩니다. 다른 프로세스는 여전히 ptrace위의 방법을 사용하여 파일에 대한 핸들을 열 수 있습니다.

해당 방법 외에도 ptraceLinux를 포함한 일부 Unix 변형에는 다음이 있을 수 있습니다.다음을 통해 다른 프로세스에서 열린 파일을 여는 다른 방법/proc.

관련 정보