응용 프로그램이 응용 프로그램 자체에서만 액세스할 수 있는 파일을 만들 수 있는지 궁금합니다. 문제는 루트 액세스 권한이 없다는 것입니다.
예를 들어, 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
위의 방법을 사용하여 파일에 대한 핸들을 열 수 있습니다.
해당 방법 외에도 ptrace
Linux를 포함한 일부 Unix 변형에는 다음이 있을 수 있습니다.다음을 통해 다른 프로세스에서 열린 파일을 여는 다른 방법/proc
.