Linux(Bash):終了条件またはExecコマンドでログインスクリプトを使用できますか?

Linux(Bash):終了条件またはExecコマンドでログインスクリプトを使用できますか?

ユーザーが管理者であることを確認し、その場合は、ホストログインオプションを提供または開始するすべてのユーザーに対してログインスクリプトを実行したいと思います。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

おすすめ記事