【发布时间】:2011-08-23 17:06:18
【问题描述】:
我正在编写管理 nginx(域、重写等)、svn 和其他服务的面板。为此,我正在编写可在 root 上运行的后端(更改 nginx 配置、重新加载它们、更改用户密码等)和客户端(控制台客户端和 Web 应用程序)。
应用程序在 unix 套接字上工作,我为它制定了非常简单的协议:
\0\0\0\0user\0key\0module\0command\0data\0
嗯,这很简单。客户端发送命令和数据到后端,狐狸前:
\0\0\0\0morsik\0\0nginx\0add_domain\0www.domain.tld something\0
问题是,如何验证那个用户真的是 morsik?对于 Web 界面,我不必这样做 - 网页有它自己的授权,因此我可以发送一些密钥,该密钥适用于每个没人知道的用户。 问题是如果有人可以访问 ssh。然后他可以编写简单的客户端来欺骗用户名,然后他可以更改其他用户配置。
那么,我怎样才能对用户进行正确的授权呢?
【问题讨论】:
-
您可能想先学习 Bruce Schneier 的《应用密码学》一书。您可能必须使用具有相同密钥的 HMAC。
-
HMAC 看起来很有趣,但是如果密钥是公开的,那么仍然存在欺骗数据的可能性。因为这是python脚本,所以必须是公开的……还是有其他方式来存储key?
-
我想我知道该怎么做。它将是为用户使用私钥的系统。用户将拥有 .serveradmin.key 和自己的 400 chmod 密钥,因此其他用户不会阅读。此外,服务器将包含 users.db 文件,其中包含有效的密钥和用户(当然是 root:root 400)。在 www 上,它可以存储在 DB(MySQL、PostgreSQL 等)中。我会在它起作用时发布结果。
标签: python security sockets authorization