スクリプトがバックグラウンドで実行され、親プロセス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
。