禁止从 /dev/tty 读取
Posted
技术标签:
【中文标题】禁止从 /dev/tty 读取【英文标题】:Prohibit reading from /dev/tty 【发布时间】:2018-06-02 21:51:42 【问题描述】:sudo
等工具从 /dev/tty 读取密码。
我想避免这种情况。
子进程应该无法读取 /dev/tty。子进程应该立即失败,而不是永远等待输入。
我正在使用 Python 的 subprocess
模块。如果子进程尝试从 /dev/tty 读取,它应该会失败。
记住:工具sudo
只是一个例子。 sudo 的一个花哨的命令行参数并不能解决我的问题。这应该适用于所有 linux 命令行工具。
问题:如何让任何工具一想从 /dev/tty 读取(通过 Python 的 subprocess 模块调用)就失败?
背景:这是一个普通的linux用户进程,不是root。
【问题讨论】:
您的问题是什么?如何从/dev/tty
中删除读取权限,或者什么?
@AndrejsCainikovs 我更新了问题。
也许start_new_session=True
在创建流程时可以满足您的需求?
@mata 谢谢你这个作品!请写start_new_session=True
作为答案,我会赞成并接受它。
在 sudo
的特定情况下,您可能只希望 -n
开关将 sudo 置于非交互模式。
【参考方案1】:
由于 python3.2 Popen
采用参数start_new_session
,这将导致执行的进程在执行子进程之前通过调用setsid()
与当前控制终端分离。
所以你只需要使用start_new_session=True
开始这个过程
【讨论】:
非常感谢。新版subx默认使用这个:pypi.python.org/pypi/subx以上是关于禁止从 /dev/tty 读取的主要内容,如果未能解决你的问题,请参考以下文章
Golang 从标准输入读取,如何检测特殊键(回车、退格...等)