当脚本在 AIX 上后台运行时,它会在 bg 运行时在 /tmp 目录中创建副本,如何更改此行为?

当脚本在 AIX 上后台运行时,它会在 bg 运行时在 /tmp 目录中创建副本,如何更改此行为?

当脚本在后台运行并在 /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到不太可见的位置。

相关内容