클래식 Xepyr 명령을 실행합니다.
Xephyr -br -ac -noreset -screen 800x600 :1
내가 아는 한,-ac키는 거의 모든 사람이 모니터, 마우스 및 키보드에 액세스할 수 있기 때문에 취약점인 xhost+와 유사합니다.
Xepyr 예제에서 이 문제를 해결하는 방법은 무엇입니까?
고쳐 쓰다: 모스비매우 상세한 답변에 감사드립니다! 사실 "이 없어도교류” 액세스는 누구에게나 열려 있습니다.답변보안 관점에서 저는 xorg와 ssh에 대해 새로운 이해를 갖게 되었습니다. 내 LiveCD/USB의 일반 Xorg 서버는 실제로 -auth를 통해 구현됩니다.
$ pgrep -ai Xorg
551 /usr/lib/xorg/Xorg :0 -seat seat0 -auth /var/run/lightdm/root/:0 -nolisten tcp vt7 -novtswitch
답변1
-auth auth-file
해당 옵션을 사용하지 않으면 Xephyr :1
동일한 호스트의 모든 사용자가 해당 옵션 없이도 이미 연결할 수 있습니다 -ac
. 이 시도:
hinz$ Xephyr :1 &
그런 다음 다른 사용자로서
kunz$ xclock -display :1
이는 다음에도 적용됩니다.어느X 서버뿐만 아니라 Xephyr
일반 서버를 보면 Xorg
해당 옵션이 명시적으로 전달되는 것을 볼 수 있습니다 -auth
.
$ pgrep -ai Xorg 2347장/usr/lib/xorg/Xorg vt2 -displayfd 3-auth /run/users/1000/gdm/Xauthority-배경 없음 -noreset -keeptty -verbose 3
맨페이지 에 따르면 Xserver(1)
(강조):
X 서버는 또한 호스트 기반 액세스 제어 목록을 사용하여 특정 컴퓨터에 있는 클라이언트의 연결을 허용할지 여부를 결정합니다. 다른 인증 메커니즘을 사용하지 않는 경우, 목록에 처음에 포함됨서버를 운영하는 호스트그리고 파일에 나열된 모든 머신
/etc/Xn.hosts
이미 다른 글에서 언급했듯이답변getsockopt(SO_PEERCRED)
, Xwayland와 같은 일부 Xorg 서버는 "로컬 사용자 및 로컬 그룹 서버 해석 액세스 유형"을 통해 누가 Unix 소켓을 열었는지 확인하는 것 이외의 인증 메커니즘을 지원하지 않습니다. Xsecurity(7)
또한 Debian과 같은 일부 배포판도 있습니다.틈새가 있다xhost +si:localuser:$(id -un)
xsession 스크립트를 통한 일반 Xorg 서버. 소켓 fd는 전달될 수 있고 클라이언트는 xscope
.
무엇을 해야할지
다른 사용자가 X 서버에 연결하는 것을 방지하려면 어떤 형태의 인증을 사용해야 합니다.
인증 파일을 생성하고 옵션을 통해 X 서버에 전달한 후 -auth
클라이언트가 서버에 연결할 때 이를 사용하도록 합니다.
# create a MIT-COOKIE authfile
$ xauth -f ~/.xauth-junk add :1 . "$(hexdump -n 16 -e '4/4 "%08x"' /dev/urandom)"
xauth: file /home2/ahq/.xauth-junk does not exist # it will be created
$ Xephyr :1 -auth ~/.xauth-junk &
그런 다음 이를 일반 $XAUTHORITY
파일에 병합합니다( ~/.Xauthority
환경에서 재정의되지 않은 경우).
$ xauth merge - < ~/.xauth-junk
$ xclock -display :1
또는 환경 변수에 명시적으로 전달합니다 XAUTHORITY
.
$ XAUTHORITY=~/.xauth-junk xclock -display :1
가짜 인증 파일을 연결해 보면 -auth
이 옵션이 실제로 작동하는지 확인할 수 있습니다.
$ XAUTHORITY=/dev/null xdpyinfo -display :1 >/dev/null 2>&1 && echo OOPS, anybody can connect!
$