Linux
無法找到預設 shell 為 bash 的正常文件,但當它是 ksh 時可以工作
我們有腳本文件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 的詳細資訊。
aaa
is/bin/ksh
和 forwww
it 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