스크립트가 백그라운드에서 실행되어 상위 프로세스 ID를 사용하여 /tmp 디렉터리에 복사본을 생성하면 프로세스가 완료된 후 즉시 복사본이 삭제되지만 이 실행 중에 모든 사용자는 서버에 액세스할 수 있으며 다음 작업을 수행할 수 있습니다. 자격 증명을 봅니다.
내 질문은 /tmp 디렉토리에 복사본을 만들기 위해 이 동작을 어떻게 변경할 수 있습니까? 변경할 수 없는 경우 /tmp 디렉터리의 복사본에 640 권한만 있는지 어떻게 확인할 수 있습니까?
다음은 PID 32702884를 사용하여 백그라운드에서 실행되고 /tmp 디렉터리에 sh32702884.1을 사용하여 복사본을 생성하는 스크립트입니다. 조언해주세요.
oracle@orcl:/users/cmsc/oracle>nohup ./rman_del_obsolete_090616.ksh>rman_del_obsolete_090616.ksh.log &
[1] 32702884
oracle@orcl:/users/cmsc/oracle>ps -ef|grep ksh
oracle 32702884 21627666 0 16:23:16 pts/0 0:00 sh -- ./rman_del_obsolete_090616.ksh
oracle@orcl:/users/cmsc/oracle>cd /tmp
oracle@orcl:/tmp>ls -ltr sh*
-rwxrwxrwx 1 root system 3340 Jan 03 2012 sharch_root.sh
-rwxrwxrwx 1 ctmagent controlm 3340 Jan 03 2012 sharch_ctmagent.sh
-rw-r--r-- 1 oracle cdba 343185 Sep 06 16:23 sh32702884.1
oracle@orcl:/tmp>head sh32702884.1
connect target /
connect catalog xxdfd/sscsxxxx@db1
run{
delete force noprompt backuppiece 'RMAN-ORV1-ARCH-20160718-474184-1';
delete force noprompt backuppiece 'RMAN-ORV1-ARCH-20160718-474180-1';
delete force noprompt backuppiece 'RMAN-ORV1-ARCH-20160718-474179-1';
delete force noprompt backuppiece 'RMAN-ORV1-ARCH-20160718-474183-1';
delete force noprompt backuppiece 'RMAN-ORV1-ARCH-20160717-474066-1';
delete force noprompt backuppiece 'RMAN-ORV1-ARCH-20160717-474063-1';
oracle@orcl:/tmp>
답변1
너할 수 있다umask
예를 들어 스크립트에서 설정하십시오.
umask 037
하지만 그래도 도움이 되지 않으면 /tmp
스크립트가 종료될 때 임시 하위 디렉터리를 삭제하고 권한을 설정할 수 있습니다.저것읽는 것을 방지하기 위해. 대부분의 응용 프로그램에서는 이를 알 수 있습니다 TMPDIR
(이를 수행하도록 스크립트를 수정할 수 있음). AIX에는 이 기능이 없지만 mktemp
(추가 기능 패키지 제외) 쉘 스크립트를 사용하여 이를 수행할 수 있습니다. 예를 들면 다음과 같습니다.
umask 037
mytemp=/tmp/mytemp
mkdir $mytemp || exit 1
trap "cd /tmp;rm -rf $mytemp" EXIT HUP INT QUIT
TMPDIR="$mytemp"
export TMPDIR
$TMPDIR
스크립트가 그렇게 의미하는 경우에만 일관되게 사용 됩니다 /tmp
.
이름 선택은 단지 예일 뿐입니다. 좋은 스크립트는 mktemp
심볼릭 링크 공격으로부터 보호하기 위해 이와 같은 것을 사용합니다.
직접 편집할 수 없는 경우저것스크립트에서는 스크립트를 생성한 프로그램을 눈에 잘 띄지 않는 곳에 래핑하여 비슷한 작업을 수행할 수 있어야 합니다 $TMPDIR
.