[Linux] RDP GUI Connection

본인은 칼리 리눅스를 임의 노트북 내 설치하여 원격으로 연결하여 사용한다. 아직 직접적으로 진단 수행 시 사용해본 적이 없으나, 환경을 구축하여 이후에 사용할 일이 있는 경우 굉장히 유용하게 사용하면 좋을 것 같다는 판단이 들어 설정해두었다.

본인의 개인 네트워크를 구성해두어서 보다 간편하게 구상도가 그려질 수 있었다. 현재 Kali HOST 의 경우 직접 접근이 불가하고 본인의 다른 서버 접근 후 커넥션해야 접근이 가능하다. 때문에 본 서버에 대한 서브 도메인을 설정하여 접근하도록 네트워크를 등록했다. (리버스 프록시 서버 설정)
각설하고 Kali 리눅스의 특징은 여러 툴을 가지고 있다는 것인데, 해당 툴들의 대부분은 CLI 환경이 아닌 GUI 환경에서 사용하는 것이 편하거나 사용이 가능하다는 점이 있기에 ssh
환경을 이용한 연결이 아니라 GUI 환경으로 연결하여 사용하는 방법을 찾아보았다.
서비스는 Remote Desktop Protocol (이하 RDP) 을 윈도우가 아닌 Linux 나 BSD 등에서 사용할 수 있는 XRDP 를 사용할 것이며, 해당 패키지의 설치가 요구된다.
다른 GUI 연결 환경이나 패키지가 존재하나 RDP 가 확실히 연결성이 좋아서 해당 방법을 이용하여 연결하기로 하였다.
sudo apt-get install xrdp

해당 패키지 설치 이후 본 패키지의 설치가 정상적인지 확인해보자
sudo systemctl status xrdp

본인의 경우 패키지가 정상 설치가 완료되었으나 active 되지 않는 것을 확인할 수 있다. 때문에 systemctl
start 명령으로 해당 패키지를 실행하여 연결을 수행하였다.
sudo systemctl start xrdp
여기에서 한 가지 변동 사항이 있는데, 본인의 경우 RDP 로 본인의 데스크탑 환경을 설정해두어 포트 변경이 필요하였다. 때문에 /etc/xrdp/xrdp.ini
파일에 대한 수정을 수행했다.

xrdp 설정 이후 sesman 파일도 설정이 요구된다.
[Global]
ListenAddress=~~127.0.0.1~~ 0.0.0.0
설정이 모두 완료되었다면 원격지에서 해당 서버로 연결을 수행한다.

참고로 해당 연결 전에 꼭 포트포워딩 등의 네트워크 작업을 해주자. 당연히 하지 않으면 연결이 되지 않는다.

또한 본인처럼 리버스 프록시를 사용하고 있는 중이라면 해당 리버스 프록시에서 stream
등의 옵션으로 3350 설정이 요구된다.
- NGINX 리버스 프록시 예시
server {
listen 3390; // Default Port is 3389
proxy_pass [TargetIP]:3390;
}
server {
listen 3350; // XRDP-Sesman Port
proxy_pass [TargetIP]:3350;
}

Error Confirm
만일 XRDP 설치 이후 정상적인 XRDP 가 수행되지 않는다면 클라이언트 단인 원격지에서 로그인 수행 시 확인되는 에러 창이나 서버 내에서 확인되는 에러를 확인해야한다.
서버 내 에러 확인 코드:
journalctl -u xrdp -f
Server Error:
Unable to locate executable '/usr/sbin/xrdp': No such file or directory
Failed at step EXEC spawning /usr/sbin/xrdp: No such file or directory
해당 에러의 경우 /usr/sbin/xrdp
위치가 잘못되었기 때문인데, 이때 xrdp 파일의 위치를 확인해야한다. 칼리의 경우 따로 커스텀화되어 저장되어있거나 설정되어있기 때문이다.
- 실행 파일 경로 확인 및 수정
XRDP 바이너리 실제 위치 확인 후 시스템 서비스 파일 경로 조정:
whereis xrdp | grep bin
작성된 경로 /usr/sbin/xrdp
가 아닌 다른 경로로 확인되었다면 XRDP 의 설정에 작성된 경로를 확인된 경로로 바꿔주거나, 해당 경로 내 링크를 만들어주면된다.
sudo ln -s $(which xrdp) /usr/sbin/xrdp
Client Error:
Error connecting to sesman on sesman.socket
본인의 경우, XRDP 를 apt
를 이용하여 설치하였다가 정상 연결이 되지 않아 github
를 이용하여 연결을 시도하였다.
****- git 을 이용한 XRDP 설치
git clone https://github.com/neutrinolabs/xrdp.git
cd xrdp
./bootstrap
./configure --prefix=/usr
make
sudo make install
때문에 해당 오류는 XRDP v0.10.x 이상에서 Unix 도메인 소켓 방식으로 도입되었음에도 반영되지 않아 확인된 에러다.
xrdp --version | grep -i "xrdp"
본 에러에 대한 해결 방법의 단계는 다음과 같다.
구성파일 수정
/etc/xrdp/sesman.ini
파일 수정
[SessionManager] ListenAddress=sesman.socket
/etc/xrdp/xrdp.ini
파일 수정
[globals]
sesman_socket=sesman.socket
systemd 서비스 파일 조정
/usr/lib/systemd/system/xrdp-sesman.server
파일 수정
[Unit]
Requires=xrdp-sesman.socket
[Socket]
ListenStream=/run/xrdp/sesman.socket
- 방화벽 및 소켓 권한 확인
sudo chmod 770 /run/xrdp/sesman.socket
sudo systemctl restart xrdp xrdp-sesman
만일 sesman.socket
파일이 서버에 존재하지 않는 경우 (xrdp-sesman.service 파일은 있으나 xrdp-sesman.socket
파일이 존재하지 않는경우)
lib/systemd/system/xrdp-sesman.socket
파일 생성 (수동 socket 파일 생성)
[Unit] Description=XRDP Session Manager Socket [Socket] ListenStream=/run/xrdp/sesman.socket SocketMode=0660 [Install] WantedBy=sockets.target
[Unit]
Description=XRDP Session Manager Socket
[Socket]
ListenStream=/run/xrdp/sesman.socket
SocketMode=0660
[Install]
WantedBy=sockets.target
- 런타임 디렉토리 권한 설정
- 본인의 경우, XRDP 시스템 계정이 존재하지 않아 진행하지 않았고, chmod 로 권한만 설정하였다.
sudo mkdir -p /run/xrdp
sudo chown xrdp:xrdp /run/xrdp
sudo chmod 0755 /run/xrdp
- 서비스 파일 검증 (/lib/systemd/system/xrdp-sesman.service 파일 확인)
[Unit]
Requires=xrdp-sesman.socket
[Service]
ExecStart=/usr/sbin/xrdp-sesman
- systemd 재구성
sudo systemctl daemon-reload
sudo systemctl enable --now xrdp-sesman.socket
Server Error:
xrdp-sesman.service: Unable to locate executable '/usr/sbin/xrdp-sesman': No such file or directory
xrdp-sesman.service: Failed at step EXEC spawning /usr/sbin/xrdp-sesman: No such file or directory
xrdp-sesman 파일 위치가 잘못되어 도출되는 에러다. 본 에러는 다음 순서로 확인이 가능하다.
- 실행 파일 실제 위치 확인
# xrdp-sesman 바이너리 검색
whereis xrdp-sesman | grep bin
확인 후, 해당 위치에서 확인된 디렉토리 정보로 systemd 서비스 파일 수정 (실제 경로로)하여 해결할 수 있다.
/lib/systemd/system/xrdp.service
,/lib/systemd/system/sxrdp-sesman.service
파일 수정
# xrdp-sesman.service
[Service]
ExecStart=/usr/local/sbin/xrdp-sesman # 기존 /usr/sbin/xrdp-sesman → /usr/local/sbin/xrdp-sesman
ExecStop=/usr/local/sbin/xrdp-sesman --kill
# xrdp.service
[Service] ExecStart=/usr/local/sbin/xrdp
# 기존 /usr/sbin/xrdp → /usr/local/sbin/xrdp
ExecStop=/usr/local/sbin/xrdp --kill
- 수정 사항 적용
sudo systemctl daemon-reload sudo systemctl restart xrdp xrdp-sesman
Client Error:
login was successful - creating session
sending create session request to session manager. Please~~ it...
Can't create session for user [User Name ] - Session failed immediately.
Server Error:
[INFO ] Received request from xrdp to create a session for user [ User Name ]
pam_unix(xrdp-sesman:session): session opened for user User Name by User Name
gkr-pam: unlocked login keyring
[INFO ] sesman: Session on display :10 has finished.
본 에러의 경우, PAM 모듈이 누락되어 발생한 문제로 패키지에 대한 재설치가 요구된다.
pam_lastlog.so
파일 재설치
sudo apt install --reinstall libpam-modules
- GNNOME 키링 데몬 구성 수정
/etc/pam.d/xrdp-sesman
파일 내 내용 추가 (세션 섹션 하단 라인 추가)
session optional pam_gnome_keyring.so auto_start
- XRDP 데스크톱 환경 설정
/etc/xrdp/startwm.sh
파일 수정 (추가)
#!/bin/sh
unset DBUS_SESSION_BUS_ADDRESS exec /usr/bin/xfce4-session # 사용 중인 DE에 맞게 변경
- 사용자 그룹 재확인
sudo usermod -aG ssl-cert,tsusers kai_ht
- 시스템 로그 확인/분석 (선택)
journalctl -u xrdp -u xrdp-sesman --since "10 minutes ago" | grep -iE 'error|fail'
이후 xrdp 서비스를 재시작해주면 정상 접근이 가능하다.
sudo systemctl restart xrdp xrdp-sesman
'Tools > Kali' 카테고리의 다른 글
Kali WSL install in USB Storage (0) | 2025.03.28 |
---|---|
Fix Kali Pacakge Signature in Kali-WSL (0) | 2025.03.07 |
Kali Linux Connect to GUI (0) | 2024.01.16 |
Kali Linux Hangul Setting (0) | 2024.01.12 |