当脚本在后台运行并在 /tmp 目录中使用父进程 ID 创建其副本时,当然该副本在进程完成后很快就会被删除,但是在此运行期间任何用户都可以访问服务器,他们可以查看凭据。
我的问题是如何更改此行为,在 /tmp 目录中创建副本?如果无法更改,如何确保 /tmp 目录中的副本只有 640 权限。
下面是在后台运行的脚本,PID为32702884,在/tmp目录中创建了一个带有sh32702884.1的副本,任何用户都可以cat这个文件并查看是否有任何凭据。请指教。
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
(除了作为附加包),但您可以使用 shell 脚本来做到这一点,例如,
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
到不太可见的位置。