ポストユーザー追加スクリプト + Gnome 初期ログイン

ポストユーザー追加スクリプト + Gnome 初期ログイン

:##=username/etc/shadow-maint/useradd-post.d/に作成されたユーザー名を取得し、UIDを取得し、1つを追加して最後に印刷し、/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とにかくスクリプトがまだ失敗する可能性があると思いました。ルートとして実行していますか?

rootがロックされていて、ユーザーにパスワードが設定されていないため、ログインしてログを確認できず、どのログを確認するのかわかりません。 ?

だから私の質問は、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にルートシェルが作成されます。

関連情報