好的,我有两个shell脚本,一个服务器和一个客户端,服务器总是以root身份运行,客户端可以作为标准用户运行,以便与服务器通信。
我选择执行此操作的方法是使用包含命名管道(fifos)的世界可访问目录,其中一个是全局可写的(用于启用初始连接请求),其他用户是按用户创建的并且只能由他们写入(允许我的服务器脚本知道谁发送了消息)。
这似乎工作正常,但感觉可能是过度设计或缺少更合适的替代方案。除了在ps
的输出中搜索其名称之外,它还缺少确定服务器当前是否正在运行的任何方法。这有点问题,因为这意味着如果服务器脚本无法从中读取,则写入连接fifo将会挂起。
是否有更好的方法为shell脚本执行此类操作?当然,我知道可以使用实际程序来访问更多功能,但这实际上只是为非root用户提供对root服务的安全访问(即 - 它是其他东西的包装器)。 / p>
答案 0 :(得分:3)
您可以使用Unix domain sockets代替fifos。域套接字可以使用nc -lU /path/to/wherever
创建,并与nc -U /path/to/wherever
连接。这会在文件系统中创建一个持久对象(如fifo,但不同)。服务器应该能够在同一个套接字上维护多个同时连接。
如果您愿意使用C语言(或其他一些真正的#34;编程语言),也可以通过Unix域套接字传递凭据,这与fifos不同。这使得服务器可以对其客户端进行身份验证,而无需依赖文件系统权限或其他间接方式。不幸的是,我不知道在shell脚本中有任何广泛支持的接口。