デフォルトのシェルをbashとして使用して通常のファイルを見つけることはできませんが、kshを使用すると正常に動作します。

デフォルトのシェルを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.shuserを実行しaaaてスクリプトを実行してファイルを見つけましたが、FileChecker.shuserを使用してファイルを実行すると、wwwスクリプトは入力ファイルを見つけて印刷できません[ERROR] elif Invalid input to FileChecker.sh

以下は、2人のユーザーのファイル権限とデフォルトシェルの詳細です。aaais/bin/kshwwwitのデフォルトのシェルはです/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

あなたが観察したのは、ユーザーが別のログインシェルを持っているという結果ではありません。

問題は、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

おすすめ記事