:##=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にルートシェルが作成されます。