Java 程序(class > .jar)作为 Unix shell(代替 sh/bash)?

标签 java bash shell unix exec

我希望将 Java 程序(编译类 > .jar 文件)作为我的 Unix shell 运行。基本上,我不希望涉及 sh 或 bash,因为这样用户就可以退出/暂停我的 Java 程序并访问 unix shell。

这可能吗?

我需要使用 jail/chroot 吗?

是否像编辑/etc/shells 并将 java -jar ... 命令放在那里一样简单?

或者,如果我必须使用 sh/bash,我能否在我的 java/vm 过期或卸载时自动退出 shell(这样就没有人可以将 Java 应用程序转义到 bash/sh shell 本身)?

最佳答案

第一步:创建一个包装器 shell 脚本 /usr/bin/myjavashell:

#!/bin/sh
exec /usr/bin/java -jar /usr/local/whatever/file.jar

第二步:使其可执行:chmod +x/usr/bin/myjavashell

第三步:将/usr/bin/myjavashell添加到/etc/shells

第四步:使用 chsh -s/usr/bin/myjavashell youruser 将其设置为用户的登录 shell。

可选步骤五:在 /etc/ssh/sshd_config 中,禁用任何您不希望用户能够执行的不需要 shell 的附加选项,例如 tcp 转发:

Match User youruser
AllowTcpForwarding False

关于Java 程序(class > .jar)作为 Unix shell(代替 sh/bash)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21563318/

相关文章:

java - 将 Java 抛出异常替换为自定义消息并继续

JAVA不断向线程池提交任务并在没有更多任务执行时关闭线程池?

java - 获取java进程的命令行

git - Cygwin gitk 问题

java - 每次获取 shell 脚本 255 的退出值

linux - Shell 脚本自动回答 Yes No 对话框

Bash 在另一个变量中扩展变量

java - 在应用程序执行期间显示 JVM 的 ThreadStackSize

linux - 匹配模式并通过替换旧值来分配新值

庆典 shell : change multiple file names to add leading zeros