사용자가 관리자인지 확인하고 그렇다면 호스트 로그인 옵션을 제공하거나 시작하는 모든 사용자에 대해 로그인 스크립트를 실행하고 싶습니다.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