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

관련 정보