기본 쉘을 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.

다음은 두 사용자의 파일 권한 및 기본 셸에 대한 세부정보입니다. 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

user 로 실행하여 어떻게 작동하게 할 수 있습니까 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

관련 정보