사후 사용자 추가 스크립트 + Gnome 초기 로그인

사후 사용자 추가 스크립트 + Gnome 초기 로그인

:##=username/etc/shadow-maint/useradd-post.d/에 생성된 사용자 이름을 가져오고, UID를 가져오고, 하나를 추가하고 끝에 인쇄 /etc/tigervnc/vncserver.users하고 홈 디렉토리에 기본 VNC를 쓰는 스크립트가 있습니다. 비밀번호, 링크 VNC 서비스. 이 스크립트는 터미널을 통해 수동으로 사용자를 추가하고 새 사용자에 대해 VNC를 자동으로 설정할 때 유용합니다.

그러나 kickstart/ansible config push를 통해 초기 사용자 로그인 전에 스크립트를 추가하고 gnome-initial-login이 사용자를 추가하려고 하면 초기 로그인이 중단됩니다. 사용자가 생성되었지만 비밀번호가 설정되지 않았습니다. homedir을 생성하고 메일을 보냅니다.

따라서 useradd 부분이 제대로 작동하는 것 같습니다. 어떤 이유로든 내 포스트 스크립트가 중단된 것 같습니다. 내 초기 생각은 gnome-initial-login 사용자가 adduser 프로그램을 실행하고 있었고 후속 솔루션은 스크립트를 실행하는 사용자를 캡처하기 위해 이와 유사한 것을 사용하는 것이었지만 if [[ "$USER" == "gnome-initial-login" ]]; then exit; fi어쨌든 스크립트가 여전히 실패할 수 있다고 생각했습니다. 루트로 실행 중입니까?

루트가 잠겨 있고 사용자에게 비밀번호가 설정되어 있지 않아 로그인하여 로그를 확인할 수 없고 어느 로그를 확인해야 할지 잘 모르겠으므로 이 문제를 해결하려면 어디로 가야 할지 모르겠습니다. ?

그래서 내 질문은 gnome-initial-login의 컨텍스트에서 실행 중인 useradd 사용자는 누구이며... 문제를 파악하기 위해 어떤 로그를 확인할 수 있습니까?일 것입니다.

대화형으로 실행할 때 무시되는 내용을 놓친 경우를 대비해 문제의 스크립트 사본은 다음과 같습니다. 권한도 755로 설정되어 있습니다.

#!/usr/bin/env bash
    if [[ "${SUBJECT}" == "" || "${USER}" == "gnome-initial-setup" ]]; then exit; fi
{
    username=$SUBJECT
    uid=$(id -u $username)
    home=/home/$username
    display_num="$((${uid:2:2}+1))"
    if [[ ${#display_num} -eq 1 ]]; then
        display_num="0${display_num}"
    fi
    display=":${display_num}"
    printf "${display}=${SUBJECT}\n" >> /etc/tigervnc/vncserver.users
    su $username -c 'printf "password\npassword\n" | vncpasswd'
    systemctl enable vncserver@${display}.service
    systemctl start vncserver@${display}.service
} 2>&1 >> /tmp/log.txt

답변1

Gnome의 @wjt Will Thompson의 도움으로 저는 그것을 알아냈습니다. 저는 기본적으로 SELinux 토끼 굴을 내려가 useradd, bash, su, systemctl 및 vnc를 포함하여 내 스크립트에서 생성된 모든 예외를 허용해야 했습니다. 감사 로그에서 거의 발견되지 않았습니다.

이와 같이:

sudo grep AVC /var/log/audit/audit.log >> problems.txt
cat problems.txt | sudo audit2allow -M custompolicy
sudo semodule -i custompolicy.pp

또한 아직 사용자를 구성하지 않은 경우 systemd.debug_shell커널 라인에 추가하면 vty 9에 루트 셸이 생깁니다.

관련 정보