禁止从/dev/tty读取

3

sudo这样的工具从/dev/tty读取密码。

我想避免这种情况。

子进程不应该能够读取/dev/tty。子进程应立即失败,而不是永远等待输入。

我正在使用Python的subprocess模块。如果子进程尝试从/dev/tty读取,则应该失败。

请记住:工具sudo仅为示例。一个花哨的命令行参数不能解决我的问题。这应该适用于所有Linux命令行工具。

问题:如何使任何工具在想要从/dev/tty读取时立即失败(通过Python的subprocess模块调用)?

背景:这是一个普通的Linux用户进程,不是root。


1
你的问题是什么?是如何从/dev/tty中移除读取权限,还是其他问题? - Andrejs Cainikovs
3
创建进程时添加start_new_session=True参数,或许可以满足你的需求?具体信息请参考Python官方文档 - mata
@mata谢谢,这个可行!请将start_new_session=True写成答案,我会点赞并接受它。 - guettli
1
在特定的情况下,“sudo”命令可能只需要使用“-n”选项,以将sudo设置为非交互模式。 - Daniel Pryden
@DanielPryden 记住:sudo 工具只是一个例子。一个花哨的命令行参数并不能解决我的问题。这应该适用于所有 Linux 命令行工具。 - guettli
显示剩余3条评论
1个回答

5
自Python3.2起,Popen接受一个名为start_new_session的参数,调用setsid()后执行子进程,使得被执行的进程从当前控制终端分离出来。
因此,您只需要使用start_new_session=True启动该进程即可。

非常感谢。subx的新版本默认使用此链接:https://pypi.python.org/pypi/subx/ - guettli

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接