我有一个复制权限的脚本,效果很好,这是有趣的一行:
...
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}
以前它常被读作/bin/ls,/bin/rm,/bin/rm等等,因此循环适用于第一个版本,因为它能够找到这些命令,但不能适用于第二个版本,因为先前指定的输出不正确。
我已经读过sed和awk命令,但我对此很陌生,无法让它们工作。
如何从我的配置文件中读取权限,就像我像第一个版本一样直接引入它们?
谢谢
编辑: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[@]}"
.