&#34; su <otheruser>&#34;失败的&#34;标准必须是atty&#34;

时间:2017-11-25 07:26:10

标签: java linux processbuilder su

我研究了这个问题并且所有答案都建议添加visudo: 默认值:user!requiretty

它不起作用!

我有两个Linux机箱(RedHat)。我有一个Java类,它使用ProcessBuilder / Process来执行命令。该类在系统帐户下运行。 在两个方框中,我都运行

su other-user -c 'some-command'

并在Process对象的输入流中提供其他用户的密码。

在一个方框中,命令成功,另一方面我得到上面的错误。 两台机器上的sudoers文件没有针对requiretty的排除项(&#39;默认值requiretty&#39;在两个文件上都设置了)。 我尝试添加排除,如我找到的答案所示。我尝试了运行流程的系统用户和其他用户&#39; ...

不起作用。

还有什么问题?添加requiretty exceptoin后,是否需要重新启动系统?

2 个答案:

答案 0 :(得分:3)

sudoers适用于sudo而非su,因此您应使用sudo

根据su手册:

  

-c, --command COMMAND

     

指定shell将使用其-c调用的命令。

     

执行的命令将没有控制终端。此选项不能用于执行需要控制TTY的交互式程序。

答案 1 :(得分:0)

如果试图避免使用sudo或没有sudo特权,则可以使用TTY生成。

在运行代码之前,只需调用以下代码之一即可,使您看到所提到的错误。

以下是一些您可以使用的代码示例,具体取决于您使用的代码或系统:

python -c 'import pty; pty.spawn("/bin/sh")' 

echo os.system('/bin/bash')

/bin/sh -i

perl —e 'exec "/bin/sh";'

perl: exec "/bin/sh";

ruby: exec "/bin/sh"

lua: os.execute('/bin/sh')

(来自IRB内部)

exec "/bin/sh"

(来自vi内)

:!bash

(来自vi内)

:set shell=/bin/bash:shell

(来自nmap)

!sh

前三个选择是我最常用的选择,我相信他们的结果。 我在进行渗透测试时正在使用它们。