- Rocky 8.10에서 설정하기 위해 만든 shell file
- xrdp 설정을 했는데 지속적으로 원격접속이 안되어 새롭게 설정
#!/bin/tcsh
# 요구: Rocky Linux 8.10, root로 실행
# 기능
# 1) xrdp 설치 및 Xorg 세션 강제, 방화벽/SELinux 설정
# 2) 기본 쉘 tcsh로 지정 및 /etc/skel 준비
# 3) admin의 tcsh 환경을 복제하되 exit/logout/exec 제거
# 4) 특정 그룹으로 user1..user4 생성
# 5) 모든 새 사용자에 xrdp용 ~/.Xclients 생성
# 변수
set new_users = ( user1 user2 user3 user4 )
set target_group = group_name
set admin_home = /home/admin
set skel_dir = /etc/skel
set default_shell = /bin/tcsh
# 0) 안전장치
if (`id -u` != 0) then
echo "root로 실행 필요함"
exit 1
endif
# 1) xrdp 설치 및 기동
dnf -y install xrdp xorgxrdp
systemctl enable --now xrdp
setsebool -P xrdp_can_connect_xserver on
# 방화벽 허용
if ( -x /usr/bin/firewall-cmd ) then
firewall-cmd --permanent --add-service=rdp
firewall-cmd --permanent --add-service=ssh
firewall-cmd --reload
endif
# 2) XRDP가 Xorg 데스크탑을 띄우도록 startwm.sh 정리
if ( -f /etc/xrdp/startwm.sh ) then
cp -a /etc/xrdp/startwm.sh /etc/xrdp/startwm.sh.bak
# Xsession 경로 사용 주석 처리
sed -ri 's|^(test -r .*Xsession)|#\1|; s|^(\. .*Xsession)|#\1|' /etc/xrdp/startwm.sh
# 중복 삽입 방지 후 GNOME Xorg 고정
grep -q 'gnome-session' /etc/xrdp/startwm.sh || \
printf '%s\n' \
'export GNOME_SHELL_SESSION_MODE=classic' \
'export XDG_SESSION_TYPE=x11' \
'exec /usr/bin/gnome-session' >> /etc/xrdp/startwm.sh
systemctl restart xrdp
endif
# 3) Wayland 비활성화로 GDM이 Xorg 보장
mkdir -p /etc/gdm
if ( ! -f /etc/gdm/custom.conf ) then
printf '%s\n' '[daemon]' 'WaylandEnable=false' > /etc/gdm/custom.conf
else
grep -q '^WaylandEnable=false' /etc/gdm/custom.conf || \
sed -i '/^\[daemon\]/a WaylandEnable=false' /etc/gdm/custom.conf
endif
systemctl try-restart gdm
# 4) 기본 쉘 tcsh로 시스템 기본값 설정
useradd -D -s ${default_shell}
# 5) /etc/skel 준비
# admin의 tcsh 설정 복제하되 xrdp 종료 유발 라인 제거
mkdir -p ${skel_dir}
foreach f ( .tcshrc .cshrc .login )
if ( -f ${admin_home}/$f ) then
egrep -v '^(exit|logout|exec )' ${admin_home}/$f > ${skel_dir}/$f
chown root:root ${skel_dir}/$f
chmod 0644 ${skel_dir}/$f
endif
end
# XRDP용 Xclients 생성
printf '%s\n' 'gnome-session' > ${skel_dir}/.Xclients
chmod 0755 ${skel_dir}/.Xclients
# 기본 디렉터리
mkdir -p ${skel_dir}/.cache ${skel_dir}/.local
chmod 0755 ${skel_dir}/.cache ${skel_dir}/.local
# 6) 기존 user1 제거
if ( `id -u user1 >& /dev/null; echo $?` == 0 ) then
# 세션이 있으면 종료 후 삭제 권장
pkill -KILL -u user1 >& /dev/null
userdel -r user1
endif
# 7) 그룹 확인
if ( `getent group ${target_group} >& /dev/null; echo $?` != 0 ) then
echo "그룹 ${target_group} 없음, 생성함"
groupadd ${target_group}
endif
# 8) 사용자 생성 루프
foreach u ( $new_users )
if ( `id -u $u >& /dev/null; echo $?` == 0 ) then
echo "$u 이미 존재함, 건너뜀"
continue
endif
useradd -m -g ${target_group} -s ${default_shell} $u
# admin 환경파일을 추가 복제하고 안전 정리
foreach f ( .tcshrc .cshrc .login )
if ( -f ${admin_home}/$f ) then
egrep -v '^(exit|logout|exec )' ${admin_home}/$f > /home/$u/$f
chown $u:${target_group} /home/$u/$f
chmod 0644 /home/$u/$f
endif
end
# XRDP용 Xclients 보장
if ( ! -f /home/$u/.Xclients ) then
printf '%s\n' 'gnome-session' > /home/$u/.Xclients
chown $u:${target_group} /home/$u/.Xclients
chmod 0755 /home/$u/.Xclients
endif
# 홈 기본 디렉터리
mkdir -p /home/$u/.cache /home/$u/.local
chown -R $u:${target_group} /home/$u/.cache /home/$u/.local
chmod 0755 /home/$u/.cache /home/$u/.local
# 최초 로그인용 비밀번호는 수동 설정 필요
passwd -l $u
end
echo "구성 완료, 각 사용자 비밀번호는 'passwd <계정>'로 설정할 것"