스크립트 파일이 있습니다파일체커.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
user를 실행 aaa
하고 스크립트를 실행하여 파일을 찾았지만 FileChecker.sh
user를 사용하여 파일을 실행 하면 www
스크립트가 입력 파일을 찾아서 인쇄할 수 없습니다 [ERROR] elif Invalid input to FileChecker.sh
.
다음은 두 사용자의 파일 권한 및 기본 셸에 대한 세부정보입니다. aaa
is /bin/ksh
및 www
it 의 기본 쉘은 입니다 /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