
ユーザーが管理者であることを確認し、その場合は、ホストログインオプションを提供または開始するすべてのユーザーに対してログインスクリプトを実行したいと思います。systemd-nspawnデフォルトコンテナ - この方法では、問題を解決するためにホストに直接ログインすることを積極的に選択する管理者でない限り、すべてのユーザーがコンテナから起動されます。
#! /bin/bash
# Break on error (log out)
set -e
# Prevent breakout from script
set -o ignoreeof
trap "" 1 2 3 6 9 15 17 18 19 20 21 22 23 24 26 27
# Trap exit conditions
trap "echo -e '\n\nDropping to CLI\n'" EXIT
# Suppress cursor
tput civis
# Get list of groups to which user belongs
groupList=$(id -G)
# Remove user's primary group from head of list
groupList=${groupList#* }
for i in $groupList ; do
if [[ $i -gt 0 ]] && [[ $i -lt 1000 ]] ; then : # Ignore non-root GIDs lower than 1,000
else
case $i in
0|1000|2000|30000) # If user is an (root|org|domain|host) administrator
echo -e '\n'
while true; do # Offer bare metal login
echo -en "Administer Host Machine [y/N] ? \r"
read -s -n 1 yesno
case $yesno in
[Yy]* ) # Exit to host system
tput cnorm # Restore cursor
exit
;;
[Nn]* ) # Pass control to guest machine login
tput cnorm # Resore cursor
exec '/usr/local/sbin/scripts/system/defaultLogin'
;;
esac
done
;;
*) # Otherwise, pass control to guest machine login
exec '/usr/local/sbin/scripts/system/defaultLogin'
;;
esac
fi
done
ただし、いくら努力してもユーザーが自動的にログアウトするのを防ぐ方法はありません。
set -e
鎮圧と罠を試みましたEXIT
。
次の内容を含むスクリプトを取得するために条件をにexit
置き換えようとしました。[Yy]
. '/usr/local/sbin/scripts/system/return-error'
#! /bin/bash
return 1
...強制的にset -e
停止し、CLIに移動します。
/etc/profile.d
スクリプトを別の場所から別の場所に移動し、ユーザーの場所からスクリプトをインポートすることは重要ではありません。.bashrc
したがって、個々のユーザーには機能しません。
大丈夫です。除外したすべての項目を削除すると、exec
自動ログアウトも発生します。
これを行う方法はありますか?それともこれが失われた原因ですか?
可能であれば、ファイルを維持する必要はありません.bashrc
。管理上の面倒に加えて、ユーザーがファイルを編集して問題を引き起こしたり、所有権を変更したりする必要があるため、ファイルを調整することはできません。独自の構成です(これも良くありません)。したがって、システム全体のソリューションはより良いオプションです。
よろしくお願いします。
答え1
問題は、source
スクリプトを実際にインポートしないでください。スクリプトの目的は、実行中のシェルを変更することではありません。
スクリプトをに設定することもできます/etc/passwd
。に追加する必要があるかもしれません/etc/shells
。
または、直接呼び出すのではなく、スクリプトを/etc/profile.d
呼び出すラッパーを配置します。
[login-script-wrapper.sh]
#! /bin/sh
/path/to/your/script