다른 사용자가 소유한 POSIX 공유 메모리 삭제

다른 사용자가 소유한 POSIX 공유 메모리 삭제

네 개의 공유 메모리 개체를 만드는 프로그램이 있습니다. 메모리 생성 루틴은 생성을 시도하기 전에 호출되며, 프로그램은 shm_unlink()실행이 끝나면 삭제하기 위해 다른 루틴을 호출합니다.shm_unlink()

오늘 개체 2-4(개체 1은 아님)를 다시 만들려고 했을 때 "권한이 거부되었습니다"라는 메시지를 받았습니다. Linux는 fuser이들이 모두 동일한 프로세스에 속해 있음을 보여 주므로 삭제할 수 없습니다.

나는 가서 /dev/shm그것을 했고 ls -l2-4가 내 sudo 사용자가 아닌 루트 사용자가 소유하고 있음을 발견했습니다. 나는 루트로 로그인하는 일이 거의 없기 때문에 루트가 어떻게 그것들을 소유하고 있는지 모르겠습니다. 이 문제를 해결하기 위해 루트로 로그인하여 수동으로 삭제했습니다.

제 질문은: 해당 사용자로 로그인하지 않고 다른 사용자(예: 루트)가 소유한 공유 메모리 개체를 프로그래밍 방식으로 삭제할 수 있는 방법이 있습니까? chownshm 객체를 호출하고 소유자를 변경하는 방법이 있습니까 ?

답변1

루트는 사용자 소유의 공유 메모리(또는 기타 IPC 항목)를 삭제할 수 있습니다. 이를 수행하는 실용적인 방법이 필요하면 루트로 수행하십시오.

그렇지 않으면 프로젝트를 생성할 때 또는 생성한 후에 프로젝트의 권한을 변경해야 할 수도 있습니다. 모든 파일 시스템 항목(파일이 아닌 내용 포함)은 POSIX 권한을 사용하므로 해당 항목을 삭제한 사용자가 해당 항목에 쓸 수 있는지 확인해야 합니다(그리고 해당 항목을 삭제한 동일한 사용자가 해당 항목 위의 디렉터리에 쓸 수 있는지 확인해야 합니다).

이를 보장하는 덜 이상적인 방법은 프로젝트(및 해당 상위 디렉터리)를 누구나 쓸 수 있도록 만드는 것입니다. 물론 이는 큰 보안 허점을 야기하므로 일반적으로 권장되지 않습니다.

실행 중인 프로세스가 루트로 시작되거나 일반 사용자에서 루트로 전환한 경우 생성된 IPC 항목은 루트 사용자가 소유할 수 있습니다. 이를 수행하는 프로세스를 수정할 수 있는 경우 시작 사용자가 아닌 사용자가 삭제할 수 있도록 적절한 그룹 권한을 사용하여 프로젝트를 생성하는 프로세스를 얻을 수 있습니다.

관련 정보