无法使用默认 shell 作为 bash 找到常规文件,但在使用 ksh 时可以正常工作

无法使用默认 shell 作为 bash 找到常规文件,但在使用 ksh 时可以正常工作

我们有脚本文件文件检查器.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.shuseraaa并执行了脚本,它找到了文件,但是当我们FileChecker.sh使用 user 执行文件www时,脚本无法找到输入文件并打印[ERROR] elif Invalid input to FileChecker.sh

以下是有关两个用户的文件权限和默认 Shell 的详细信息。aaais/bin/kshwwwit 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

相关内容