linux - X11 授权如何工作? (麻省理工学院魔法 cookies )

标签 linux unix cookies authorization solaris

我对解释 X11 授权的确切工作原理,尤其是 MIT Magic Cookies 的深入答案很感兴趣。

我知道它实际上做的是禁止除登录用户以外的任何人访问,还有一些控制机制可以控制客户端应用程序是否可以连接到 X 显示服务器。

我还发现有五种标准的访问控制机制,它们可以分为三大类:

  1. 基于主机的访问
  2. 基于 cookie 的访问
  3. 基于用户的访问

但从现在开始,我并不真正理解它们的工作方式以及它们究竟使用什么方式来进行授权。

最佳答案

嗯,首先在机器上有一个文件 ~/.Xauthority。 请注意(通常在具有 GUI 的机器上)此文件的错误权限,可能导致登录屏幕循环...(我花了几个小时才明白)。

正如您提到的,有 5 种机制:

  1. 主机访问:服务器有主机访问列表(如果此列表中存在网络地址,则允许连接)。该列表使用 xhost 命令进行管理。注意:这不允许同时有多个连接。我对这种方法了解不多,因为我并没有真正使用过它。但是你可以看到 man Xserver GRANTING ACCESS 部分 :)

  2. MIT-magic-cookie-1:生成 128 位 key (“cookie”),将其存储在 ~/.Xauthority(或 XAUTHORITY envvar 指向的位置)中。客户端将其发送到服务器 plain!服务器检查它是否有这个“cookie”的副本,如果有,则允许连接。 key 由 DMX 生成。

  3. XDM-authorization-1:同样,~/.Xauthority 中存储了一个 key 。该 key 由两部分组成 - 56 位 DES 加密 key 和用作身份验证器的 64 位随机数据​​。 当您连接到服务器时,客户端生成 192 位数据:ctime 结合 48 位标识符(对于 tcp/ip:ip 地址+端口,对于本地连接,它是 PID 和 32 位唯一 ID)。 DES key 用于加密数据,然后将其发送到服务器。服务器通过解密用户来验证用户,然后验证 64 位身份验证器和其他数据。

  4. sun-des-1:它使用非对称加密,服务器有一个公钥,他用它来解密传入的请求。它还使用“主机列表”。这需要在网络中添加一些额外的机制,我又没有这样的网络,所以我不太了解这种机制。

  5. 服务器解释:它可以通过多种方式实现...但一般来说,客户端会向服务器发送 2 个字符串。第二个字符串是用户条目(例如用户名),第一个字符串是条目类型(例如localuser)。

注意:第二、第三和第四种机制将 key 存储在 ~/.Xauthority 中,因此任何有权访问此文件的人都可以假装是“您”连接到服务器。

xauth 命令可以解析 Xauthority 文件并提取有趣的值。

$ xauth 
Using authority file /home/ME/.Xauthority
xauth> list        
ME/unix:10  MIT-MAGIC-COOKIE-1  5e443c146376d0bdadfd712bfe7654be
ME/unix:0  MIT-MAGIC-COOKIE-1  c48ddba801384dce3aaaa9d442931ea12
xauth> info
Authority file:       /home/ME/.Xauthority
File new:             no
File locked:          no
Number of entries:    2
Changes honored:      yes
Changes made:         no
Current input:        (stdin):2
xauth> 
  • 数据已更改....

关于linux - X11 授权如何工作? (麻省理工学院魔法 cookies ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37157097/

相关文章:

c++ - UDP 服务器发送回复失败,sendto 返回 -1,errno 为 22

linux - Docker:无法运行存储在已安装卷中的 shell 脚本

linux - 如何在mysql中使用myisam引擎优化包含10亿行、固定行格式的表?

Linux/Unix Socket自连接

javascript - 不同页面上的相同 cookie(cookie 路径)

Ruby:在 Ubuntu 上安装 rmagick

python - 启动时出现 Django runserver 错误

sockets - 从UDP套接字读取整个消息

javascript - 用于切换链接的 Cookie

javascript - 将 cookie 设置为表单条目的值