我们有许多遗留的csh脚本,它们使用"db2连接到“命令连接到我们的数据库。它们不显式地使用"db2连接到用户使用“,因此连接默认为运行脚本的用户。
我们希望将db2连接从运行csh脚本的用户帐户更改为专用的db2帐户(称为"dblegacy")。
我尝试编写一个包装器可执行文件,它将加载/运行为root,然后在执行csh脚本之前将帐户更改为"dblegacy“。唯一的问题是Linux (ld.so)在setuid()帐户更改为"dblegacy“后从加载的所有脚本/文件中删除LD_LIBRARY_PATH环境变量。当然,csh脚本需要共享库。
因此,我需要一种让"db2连接到表“的方式使用或默认使用这个"dblegacy”帐户。
发布于 2011-12-08 17:24:13
如果以dblegacy用户的身份执行脚本(使用su或sudo),则需要确保脚本正确地设置了DB2环境。
对于csh,脚本应该有接近脚本顶部的位置(例如,“以前”和“DB2”命令),这些命令看起来类似于以下内容:
# Initialize DB2 environment
source /home/db2inst1/sqllib/db2cshrc此文件的特定位置可能因定义DB2实例的用户而异。通常,这将存在于用户的.cshrc中,这样可以帮助您找到正确的db2cshrc文件的正确位置。
添加了这一行之后,您应该能够以root用户的身份运行脚本如下:
su - dblegacy -c "/path/to/script.csh"发布于 2011-12-12 19:11:28
这(到目前为止)似乎是我们解决问题的方法.
调用程序:execve(“/cvt/ script /cvtwrap”,argv[],envp[]),其中argv1是目标脚本的完整路径。
卷绕:
#!/bin/csh -fx
alias db2 "db2cvt `which db2`"
source /cvt/scripts/$*然后,每当目标脚本执行db2时,它都会执行db2cvt (chmod +s作为根),它在执行真正的db2之前对dblegacy帐户执行setuid。
https://stackoverflow.com/questions/8424776
复制相似问题