권한을 복사하는 스크립트가 있는데 잘 작동합니다. 흥미로운 내용은 다음과 같습니다.
...
bash commands.sh $PAM_USER "medium" /bin/{ls,rm,bash,nano,mkdir,kill,ln,ps,grep,sed} /usr/bin/{vim,touch,java,python,gcc,awk,make}
...
Commands.sh에는 나열된 모든 권한을 읽고 지정된 디렉터리에 복사하는 루프가 있습니다. 구성 파일에서 권한을 읽기 위해 동일한 작업을 수행하려고 하면 문제가 발생합니다.
내 구성 파일에는 다음이 포함되어 있습니다.
MEDIUM_PERMISSIONS_BIN=/bin/{ls,rm,bash,nano,mkdir,kill,ln,ps,grep,sed}
MEDIUM_PERMISSIONS_USR_BIN=/usr/bin/{vim,touch,java,python,gcc,awk,make}
MEDIUM_ENVIROMENT_LIFESPAN=midnight
MEDIUM_PERSISTENT_HOME=true
참고: 마지막 두 구성은 서로 다르기 때문에 이제 처음 두 줄을 올바르게 읽으려고 합니다.
이전 스크립트에 구성 파일을 추가하고 다음 명령을 실행해 보았습니다.
source /etc/users/config.cfg
...
bash commands.sh $PAM_USER "medium" $MEDIUM_PERMISSIONS_BIN $MEDIUM_PERMISSIONS_USR_BIN
...
문제는 루프가 다음과 같이 읽는다는 것입니다.
loop: /bin/{ls,rm,bash,nano,mkdir,kill,ln,ps,grep,sed}
loop: /usr/bin/{vim,touch,java,python,gcc,awk,make}
이전에는 다음과 같이 자주 읽혔습니다./빈/ls,/bin/rm,/bin/rm따라서 루프는 명령을 찾을 수 있기 때문에 첫 번째 버전에서는 작동하지만 이전에 지정된 출력이 올바르지 않기 때문에 두 번째 버전에서는 작동하지 않습니다.
내가 읽고sed그리고앗명령을 실행했지만 저는 이 기능이 처음이라 작동하게 할 수 없습니다.
첫 번째 버전처럼 직접 가져온 것처럼 구성 파일에서 권한을 어떻게 읽을 수 있나요?
감사해요
편집: Commands.sh 코드:
#!/bin/bash
CHROOT="/users/$2/$1"
if [ ! -d "$CHROOT/home/$1" ]; then
mkdir -p "$CHROOT/home/$1"
fi
for i in $( ldd $* | grep -v dynamic | cut -d " " -f 3 | sed 's/://' | sort | uniq )
do
cp -v --parents $i $CHROOT
done
#ARCH amd64
if [ -f /lib64/ld-linux-x86-64.so.2 ]; then
cp --parents /lib64/ld-linux-x86-64.so.2 /$CHROOT
fi
#ARCH i386
if [ -f /lib/ld-linux.so.2 ]; then
cp --parents /lib/ld-linux.so.2 /$CHROOT
fi
clear
cd
설명: 디버그 에코를 모두 제거했습니다. 코드는 여기에서 찾을 수 있는 코드의 거의 복사본입니다.https://linuxconfig.org/how-to-automatically-chroot-jail-selected-ssh-user-logins
답변1
배열 변수를 정의하려고 하지만 문자열 형식을 사용하고 있습니다.
## This will define a string variable
$ MEDIUM_PERMISSIONS_BIN=/bin/{ls,rm,bash,nano,mkdir,kill,ln,ps,grep,sed}
$ echo $MEDIUM_PERMISSIONS_BIN
/bin/{ls,rm,bash,nano,mkdir,kill,ln,ps,grep,sed}
## The parentheses tell the shell this is an array
$ MEDIUM_PERMISSIONS_BIN=(/bin/{ls,rm,bash,nano,mkdir,kill,ln,ps,grep,sed})
$ echo $MEDIUM_PERMISSIONS_BIN ## the 1st element of the array
/bin/ls
$ echo ${MEDIUM_PERMISSIONS_BIN[@]} ## the entire array
/bin/ls /bin/rm /bin/bash /bin/nano /bin/mkdir /bin/kill /bin/ln /bin/ps /bin/grep /bin/sed
따라서 구성 파일을 다음과 같이 변경하십시오.
MEDIUM_PERMISSIONS_BIN=(/bin/{ls,rm,bash,nano,mkdir,kill,ln,ps,grep,sed})
MEDIUM_PERMISSIONS_USR_BIN=(/usr/bin/{vim,touch,java,python,gcc,awk,make})
MEDIUM_ENVIROMENT_LIFESPAN=midnight
MEDIUM_PERSISTENT_HOME=true
그런 다음 스크립트에서 사용하십시오 "${MEDIUM_PERMISSIONS_BIN[@]}"
.