Linux切换root需要密码的情况下,在java中执行Linux命令行的两种方式。

引言:

        本小白目前刚参加工作,一个小小的开发被公司派去出差搞项目部署(PS:这不运维干的事儿吗)。正好遇到了项目的一个部署情况,遇到了如下情况:该系统可能会部署在windows或者是Linux系统上。刚开始测试Windows时没有任何的问题,测试Linux时问题就来了,系统中有一个备份达梦数据库的功能点,由于备份时用的sql语句,所以创建备份文件的所有者是达梦所在的普通用户,而系统部署的用户则是另一个用户,这就引发了一个权限的问题,压缩备份文件时提示权限不足。(其实还有其他的功能造成权限不足的情况,而要求是在java代码中解决权限的问题,终端直接切换则就不行了,而在java代码想把密码传给终端是贼麻烦的。本小白脑壳扣烂,最后想了两种解决办法。

正文:

        1.最简单的一种,也是安全的一种。直接在/etc/sudoers文件中,加上当前部署时登录的用户赋予root权限,且使其不需要密码则执行sudo命令(网上很多,自己搜。需要注意的是免密不生效可能是当前用户所在组也有权限,把它给覆盖了)。此时当前用户便可以免密输入需要root权限的命令了。在java代码中直接开个进程来执行脚本即可。

Process process = Runtime.getRuntime().exec("sudo xxx") //执行chmod等需要root权限的命令时,sudo必须加上。

process.waitfor()

        免密不生效解决

                1.查看用户所在组哪个组覆盖其权限,直接删除该组

                2.在sudoers文件中将你写的权限下方的用户所在组的权限全部注释,也可以给其他组也加上免密的命令。

        2.第二种则是直接在java代码中输入Linux的用户密码,此种方法不安全,不是内部使用等慎用!!!。记得关闭流。结束

        

ProcessBuilder pb = new ProcessBuilder("/bin/sh","-c","sudo -S xx ");
//多条命令可以如此如此执行
ProcessBuilder pb = new ProcessBuilder("/bin/sh","-c","sudo -S xx ; 2 ; 3 ; ...");



Process process = pb.start();
outputStream = process.getOutputStream();
outputStream.write("your password\n".getBytes());
outputStream.flush();
process.waitFor();

小白自己研究的东西,希望大佬可以指正一些观点,谢谢!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值