以不同的用户

时间:2015-07-14 14:50:27

标签: linux

我们正在进行一些测试,需要以root用户之外的用户身份运行java程序。 这是在CentOS 6.5盒子上。用java 8.脚本调用并执行java程序。我没有运气就在那个剧本上做了以下。

chown user:user script
chmod 06755 script

这仍然以root身份运行该进程。以下是调用java程序并生成进程的脚本部分。什么是以用户而不是root身份运行它的最佳方式。

#SHOWCLASSES="-verbose:class"
SHOWCLASSES=

exec /opt/jdk32/bin/java $SHOWCLASSES -Xms80M -Xmx120M com.integra.linkage.ProgramDirector "$@"

当我尝试使用此修改运行脚本时,我收到以下错误

su -c "exec /opt/jdk32/bin/java $SHOWCLASSES -Xms80M -Xmx120M com.integra.linkage.ProgramDirector "$@"" -s /bin/sh esadmin

ProgramDirector: No operational mode chosen.
Usage: ProgramDirector [-wsdl programname ...]
    -wsdl       - Generate a WSDL file
    programname - The name of one or more program classes

    -mcs        - Connect to MCS and wait for messages.

1 个答案:

答案 0 :(得分:2)

取自how to run script as another user without password

尝试使用:

su -c "Your command right here" -s /bin/sh username

只是更改文件的所有权不会导致它以该用户身份运行,您只是说谁可以运行它(root可以运行所有内容)。您需要以另一个用户身份执行该命令。

为了回应您的更新,让我们看一下为什么它没有提取您传递的参数:

su -c "exec /opt/jdk32/bin/java $SHOWCLASSES -Xms80M -Xmx120M com.integra.linkage.ProgramDirector "$@"" -s /bin/sh esadmin

我要剥去额外的东西,引起你注意这里重要的事情:

su -c "exec ... "$@"" -s /bin/sh esadmin

你有四组未转义的双引号!这肯定会导致一些问题。相反,所以你可以避免转义内部引号,用单引号简单地传递你的命令,然后再试一次:

su -c 'exec /opt/jdk32/bin/java $SHOWCLASSES -Xms80M -Xmx120M com.integra.linkage.ProgramDirector "$@"' -s /bin/sh esadmin