debianlinux

Debian12のxrdpでroot以外でログインできなくなるのを解消した話

最近、管理しているマシンをDebian12に上げたところ、xrdpが何故かrootユーザ以外でログインできないという問題に直面した。一応解消できたので、備忘録的に顛末を書いておく。(こういうのって忘れるので)

現象

root以外のユーザでxrdpにログインできない。

問題分析

知っての通りxrdp周りは色々な仕掛けの上に成り立っていて、デバッグするのが(問題を切り分けるのが)とても面倒である。仕方がないのでとりあえずxrdp-sesman.logを見ると以下のようになっていた。

[20240325-04:47:39] [DEBUG] Waiting for X server to start on display 11
[20240325-04:47:39] [DEBUG] Did not find a running X server at /tmp/.X11-unix/X11
[20240325-04:47:39] [DEBUG] Waiting for X server to start on display 11
[20240325-04:47:39] [DEBUG] Did not find a running X server at /tmp/.X11-unix/X11
[20240325-04:47:39] [INFO ] Starting X server on display 11: /usr/lib/xorg/Xorg :11 -auth .Xauthority -config xrdp/xorg.conf -noreset -nolisten tcp -logv
erbose 6 -logfile .xorgxrdp.%s.log
[20240325-04:47:39] [DEBUG] Calling exec (executable: /usr/lib/xorg/Xorg, arguments: /usr/lib/xorg/Xorg :11 -auth .Xauthority -config xrdp/xorg.conf -nor
eset -nolisten tcp -logverbose 6 -logfile .xorgxrdp.%s.log)
[20240325-04:47:39] [DEBUG] Did not find a running X server at /tmp/.X11-lock
[20240325-04:47:39] [DEBUG] Did not find a running X server at /tmp/.X11-lock
[20240325-04:47:40] [INFO ] Found X server running at /tmp/.X11-unix/X11
[20240325-04:47:40] [INFO ] Found X server running at /tmp/.X11-unix/X11
[20240325-04:47:40] [INFO ] Found X server running at /tmp/.X11-unix/X11
[20240325-04:47:40] [INFO ] Session started successfully for user nyacom on display 11
[20240325-04:47:40] [INFO ] Starting the xrdp channel server for display 11
[20240325-04:47:40] [DEBUG] The user session on display 11 did not request a specific window manager
[20240325-04:47:40] [INFO ] Session in progress on display 11, waiting until the window manager (pid 15178) exits to end the session
[20240325-04:47:40] [DEBUG] waiting for pid 15178 to exit
[20240325-04:47:40] [DEBUG] Calling exec (executable: /usr/sbin/xrdp-chansrv, arguments: /usr/sbin/xrdp-chansrv)
[20240325-04:47:40] [INFO ] Starting the default window manager on display 11: /etc/xrdp/startwm.sh
[20240325-04:47:40] [DEBUG] Calling exec (executable: /etc/xrdp/startwm.sh, arguments: /etc/xrdp/startwm.sh )
[20240325-04:47:40] [WARN ] Window manager (pid 15178, display 11) exited with non-zero exit code 2 and signal 0. This could indicate a window manager co
nfig problem
[20240325-04:47:40] [WARN ] Window manager (pid 15178, display 11) exited quickly (0 secs). This could indicate a window manager config problem
[20240325-04:47:40] [INFO ] Calling auth_stop_session and auth_end from pid 15177
[20240325-04:47:40] [INFO ] Terminating X server (pid 15179) on display 11
[20240325-04:47:40] [INFO ] Terminating the xrdp channel server (pid 15187) on display 11
[20240325-04:47:40] [DEBUG] waiting for pid 15179 to exit
[20240325-04:47:41] [INFO ] X server on display 11 (pid 15179) returned exit code 0 and signal number 0
[20240325-04:47:41] [DEBUG] waiting for pid 15187 to exit
[20240325-04:47:41] [INFO ] xrdp channel server for display 11 (pid 15187) exit code 0 and signal number 0
[20240325-04:47:41] [INFO ] cleanup_sockets:
[20240325-04:47:41] [DEBUG] cleanup_sockets: deleting /run/xrdp/sockdir/xrdp_chansrv_audio_out_socket_11
[20240325-04:47:41] [DEBUG] cleanup_sockets: deleting /run/xrdp/sockdir/xrdp_chansrv_audio_in_socket_11
[20240325-04:47:41] [DEBUG] cleanup_sockets: deleting /run/xrdp/sockdir/xrdpapi_11
[20240325-04:47:41] [DEBUG] receiving SIGCHLD
[20240325-04:47:41] [INFO ] Process 15177 has exited
[20240325-04:47:41] [INFO ] ++ terminated session:  username nyacom, display :11.0, session_pid 15177, ip xxx.xxx.xx.xx:37620 - socket: 12

これを見ると、要するにWindowManager(WM)が起動できなくて死んでるらしい・・・。

xrdpのWMの起動は、/etc/xrdp/startwm.shを実行することで行われるが、基本的には/etc/X11/XSession(これもシェルスクリプト)を叩くことで、x-session-manager(のエイリアス)を起動するというものである。

本当にWMが起動しそこねているのかを確認するため、試しにssh越しに/etc/X11/XSessionを実行すると、ちゃんとローカルのX11にWindowManagerが飛んでくる・・・。このため多分WMが死んでるわけではないっぽい・・・。

あと、XSessionを実行すると ~/.xsession-errors にログが吐かれる・・・のだが、なんかxrdp越しにWM起動すると今回はそもそも~/.xsession-errorsが生成されない。
ちょっと悩んだ末にたどり着いたのは、/etc/xrdp/startwm.shってちゃんと動いてるのか?と。

そこで、/etc/xrdp/startwm.sh をそのまま実行してみる・・・。

%: /etc/xrdp/startwm.sh
/etc/xrdp/startwm.sh: 11: /etc/bash.bashrc: shopt: not found
/etc/xrdp/startwm.sh: 57: /etc/bash.bashrc: Syntax error: "}" unexpected (expecting "fi")

あー・・・なんか失敗しとるやん。

多分、これってbashじゃないからだな・・・ということでstartwm.shを見ると

#!/bin/sh
# xrdp X session start script (c) 2015, 2017, 2021 mirabilos
# published under The MirOS Licence

# Rely on /etc/pam.d/xrdp-sesman using pam_env to load both
# /etc/environment and /etc/default/locale to initialise the
# locale and the user environment properly.

if test -r /etc/profile; then
        . /etc/profile
fi

if test -r ~/.profile; then
        . ~/.profile
fi

test -x /etc/X11/Xsession && exec /etc/X11/Xsession
exec /bin/sh /etc/X11/Xsession
exec /etc/X11/Xsession

あー、これshで実行するのか・・・ ということで、/bin/shを/bin/bashに書き換えたところ、一般ユーザでも無事にxrdpでログインできるようになりましたとさ。

釈然としないのは、Debian12になってshってなんか変わったんだっけ・・・。

Leave a Reply

Your email address will not be published. Required fields are marked *