Linux

無法找到預設 shell 為 bash 的正常文件,但當它是 ksh 時可以工作

  • April 16, 2019

我們有腳本文件FileChecker.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用使用者執行aaa並執行腳本,它找到了文件,但是當我們FileChecker.sh用使用者執行文件時www,腳本無法找到輸入文件並列印[ERROR] elif Invalid input to FileChecker.sh

以下是有關兩個使用者的文件權限和預設 Shell 的詳細資訊。aaais/bin/ksh和 for wwwit is的預設外殼/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使用者身份執行來使其工作。

您觀察到的不是使用者不同登錄外殼的結果。

問題是您的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

引用自:https://unix.stackexchange.com/questions/512847