我们正在进行一些测试,需要以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.
答案 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