我们有脚本文件文件检查器.sh它检查文件是否存在
FileChecker.sh内容:
#!/bin/ksh
FILE=$1
FILE2=$2
if [[ "$FILE" == "" || "$FILE2" == "" ]] ; then
echo "[ERROR] if Invalid input to $0 \n"
elif [[ ! -f $FILE|| ! -f $FILE2 ]] ; then
echo "[ERROR] elif Invalid input to $0 \n"
else
echo "In Else"
fi
我们以用户身份登录aaa
。运行脚本如下:
[aaa@servername cfg]$ ./FileChecker.sh /tmp/lib/my.properties /tmp/lib/my.ear
我们将文件名和位置作为脚本的输入传递,并且权限位于755
输入文件上。我们运行了FileChecker.sh
useraaa
并执行了脚本,它找到了文件,但是当我们FileChecker.sh
使用 user 执行文件www
时,脚本无法找到输入文件并打印[ERROR] elif Invalid input to FileChecker.sh
。
以下是有关两个用户的文件权限和默认 Shell 的详细信息。aaa
is/bin/ksh
和www
it is 的默认 shell /bin/bash
。
[aaa@servername lib]$ cd /tmp/lib
[aaa@servername lib]$ ls -lrt
-rwxr-xr-x 1 aaa aaagroup 175 Apr 16 11:12 my.properties
-rwxr-xr-x 1 aaa aaagroup 14354727 Apr 16 11:12 my.ear
[aaa@servername lib]$ cat /etc/passwd | grep aaa
aaa:x:129822:602:aaa, env.xyz Hostgroup, Id, F, Num:/home/aaa:/bin/ksh
[aaa@servername lib]$ cat /etc/passwd | grep www
www:x:13113:602:www, Hostgroup, Id, F, Num:/home/www:/bin/bash
如何通过以用户身份运行来使其工作www
。
答案1
您所观察到的并不是用户不同登录 shell 的结果。
问题是您的www
用户没有包含目录的执行权限/tmp/lib
(因此无法遍历它以测试其中的文件属性)。
前任。给定
$ namei -l /tmp/lib/my.properties
f: /tmp/lib/my.properties
drwxr-xr-x root root /
drwxrwxrwt root root tmp
drwxrw-r-- steeldriver steeldriver lib
-rwxr-xr-x steeldriver steeldriver my.properties
然后
$ sudo -u testuser ./FileChecker.sh /tmp/lib/my.properties /tmp/lib/my.ear
[ERROR] elif Invalid input to ./FileChecker.sh \n
但
$ chmod o+x /tmp/lib
$ sudo -u testuser ./FileChecker.sh /tmp/lib/my.properties /tmp/lib/my.ear
In Else