XDG_RUNTIME_DIR의 기본값이 양호합니까?


10

XDG 기본 디렉토리 사양은 사용자 디렉토리에 대한 매우 흥미로운 사양입니다. 또한를 제외하고 좋은 기본값을 제공합니다 XDG_RUNTIME_DIR.

이제 명명 된 파이프를 만들어야하는 소프트웨어를 작성 중입니다. 사용자 별 클라이언트-서버 프레임 워크입니다 (서버용 FIFO 및 클라이언트 당 FIFO가 있음).

XDG_RUNTIME_DIR가 정의되어 있지 않은 경우 현재 사용자 별 하위 디렉토리를 사용하고 /tmp있지만 지정된 조건을 모두 보장하지는 않습니다 (즉, "디렉토리의 수명은 로그인 한 사용자에게 바인드해야합니다…"로 시작하는 단락 ).

/tmp/myserver-$USER충분한은?

편집하다

다른 곳에서 몇 가지 제안을 보았습니다.

  • . (최소한 절대 경로가 아니기 때문에) 만족스럽지 않습니다.
  • 또한 /var/run/user/$USER나쁘지는 않지만 그 디렉토리가 존재하지 않습니다 (적어도 데비안 테스트를 실행하는 상자에는 )

답변:


4

/tmp이미 비슷한 방식으로 많은 프로그램에서 사용되고 있습니다. 내 시스템에서 /tmp/orbit-$USER(Gnome의 ORBit2에서 사용) 및 /tmp/.X11-unix/(Xorg 및 X11) 디렉토리에 많은 파이프, ehm, 소켓이있는 디렉토리를 볼 수 있습니다. 나는 다른 사람들도 있다고 확신하므로 당신이하는 일에 아무런 문제가 없습니다. 악의적 인 프로세스가 세계 쓰기 가능한 위치이므로 악의적 인 프로세스가 해당 위치를 가로 챌 수 있습니다 (쓰기 전에 권한을 확인).

이 디렉토리는 사용자 만 액세스 할 수 $TMPDIR있으므로 pam_mktemp 를 사용하는 사람들 에게도 추천 할 수 있습니다 .


PAM은 올바른 솔루션입니다. 감사합니다! 데비안에서는 libpam-tmpdir이라고합니다
cadrian

5

SystemD는 /run/user/$USER다소 의무적입니다.

http://www.freedesktop.org/software/systemd/man/file-hierarchy.html

권한이없는 쓰기 액세스

권한이없는 프로세스는 일반적으로 대부분의 계층에 대한 쓰기 액세스 권한이 없습니다.

일반 사용자에 대한 예외는 /tmp,, /var/tmp/dev/shm홈 디렉토리 $HOME(보통 아래에 있음 /home) 및 사용자 의 런타임 디렉토리 $XDG_RUNTIME_DIR(아래에 있음 /run/user) 이며 모두 쓸 수 있습니다.

권한이없는 시스템의 경우에만 처리 /tmp, /var/tmp그리고 /dev/shm쓸 수 있습니다. 권한이없는 시스템 프로세스에 /var또는에 쓰기 가능한 개인 디렉토리가 필요한 경우 /run, 데몬 코드에서 권한을 삭제하기 전에 디렉토리 를 작성하거나 부팅 중에 tmpfiles.d (5) 조각을 통해 또는 RuntimeDirectory= 서비스 단위 지시문을 통해 작성하는 것이 좋습니다. 자세한 내용은 systemd.unit (5)를 참조하십시오.


2

고유 ID로 /tmp/service-$USER.id 디렉토리를 작성하십시오. 예를 들어, 쉘에서 :

mktemp -d /tmp/service-"$USER".XXX

1
첫 번째 로그인에서 사용자의 마지막 로그 아웃까지 동일한 디렉토리를 사용해야한다는 요구 사항을 어떻게 보장합니까?
cadrian

흠 ... symlink ~ user / .service / tmp_dir을 만듭니다. 링크 된 디렉토리가 존재하지 않으면 새로 작성
Selivanov Pavel
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.