禁止从 /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 从标准输入读取,如何检测特殊键(回车、退格...等)

开发板调试串口

5.2与终端进行对话

问题 HTTP 错误 403:从 Internet 读取时被禁止 [重复]

/dev/tty /dev/pts

TTY体系中设备节点的差别