X系统访问控制与用户环境配置全解析
1. X查询类型
在X系统中,存在三种不同类型的查询方式,分别是直接查询、间接查询和广播查询,每种查询方式都有其独特的工作机制和应用场景。
-
直接查询
:直接查询是指针对特定的客户端主机发起连接请求。运行中的X守护进程(这里的X守护进程可以是xdm或dtlogin)会对该请求进行处理,它可以选择接受或拒绝。若接受请求,对应的X终端将启动登录界面。
-
间接查询
:间接查询允许被寻址的客户端主机上的X守护进程决定如何处理该查询。它可以直接响应X终端的查询,也可以将查询转发给其他客户端主机,或者为X终端的用户提供多个客户端主机供其选择。这些操作都可以通过相应的配置来实现。
-
广播查询
:广播查询会在整个网络中发出通用查询,任何运行X守护进程的客户端主机都可以响应。第一个对查询做出积极响应的客户端主机将与对应的X终端建立连接。
下面通过一个mermaid流程图来展示这三种查询的基本流程:
graph LR
classDef startend fill:#F5EBFF,stroke:#BE8FED,stroke-width:2px
classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px
classDef decision fill:#FFF6CC,stroke:#FFBC52,stroke-width:2px
A([发起查询]):::startend --> B{查询类型}:::decision
B -->|直接查询| C(寻址特定客户端主机):::process
C --> D{X守护进程处理}:::decision
D -->|接受| E(启动登录界面):::process
D -->|拒绝| F(查询结束):::process
B -->|间接查询| G(客户端主机X守护进程处理):::process
G --> H{处理方式}:::decision
H -->|直接响应| I(响应X终端):::process
H -->|转发查询| J(转发给其他主机):::process
H -->|提供选择| K(提供主机选择):::process
B -->|广播查询| L(网络中广播查询):::process
L --> M{客户端主机响应}:::decision
M -->|第一个响应| N(建立连接):::process
2. Xaccess文件
Xaccess文件是X11R5引入的一个特殊文件,用于管理员控制X守护进程对不同类型查询的响应。需要注意的是,该文件与主机访问控制并无关联,它主要控制特定X终端是否有资格获得登录窗口,用户仍需提供用户名和密码才能登录主机。
-
文件配置
:符合条件的X终端会被简单地列在Xaccess文件中。对于未列出或明确被拒绝的X终端,其查询将被X守护进程直接忽略,无法建立X连接。默认情况下,以MIT分发形式的Xaccess文件配置为允许任何X终端进行直接和广播连接。
-
文件示例
:以下是一个CDE配置文件的示例,该文件的所有引用都指向dtlogin守护进程。
$ cat /usr/dt/config/Xaccess
########################################################################
#
# Xaccess
# Common Desktop Environment
#
# ************** DO NOT EDIT THIS FILE **************
#
# /usr/dt/config/Xaccess is a factory−default file and will
# be unconditionally overwritten upon subsequent installation.
# Before making changes to the file, copy it to the configuration
# directory, /etc/dt/config. You must also update the accessFile
# resource in /etc/dt/config/Xconfig.
#
# $XConsortium: Xaccess.src /main/cde1_maint/2 1995/08/30 16:21:28 gtsang $
#
######################################################################
#
# This file contains a list of host names which are allowed or
# denied XDMCP connection access to this machine. When a remote
# display (typically an X−termimal) requests login service, Dtlogin
# will consult this file to determine if service should be granted
# or denied.
#
# # Access control file for XDMCP connections
#
# To control Direct and Broadcast access:
# pattern
#
# To control Indirect queries:
# pattern list of hostnames and/or macros …
#
# To use the chooser:
# pattern CHOOSER BROADCAST
# or
# pattern CHOOSER list of hostnames and/or macros …
#
# To define macros:
# %name list of hosts …
#
# The first form tells dtlogin which displays to respond to itself.
# The second form tells dtlogin to forward indirect queries from hosts
# matching the specified pattern to the indicated list of hosts.
# The third form tells dtlogin to handle indirect queries using the
# chooser; the chooser is directed to send its own queries out via the
# broadcast address and display the results on the terminal.
# The fourth form is similar to the third, except instead of using the
# broadcast address, it sends DirectQuerys to each of the hosts in the list
#
# In all cases, dtlogin uses the first entry which matches the terminal;
# for IndirectQuery messages only entries with right hand sides can
# match, for Direct and Broadcast Query messages, only entries without
# right hand sides can match.
#
# Information regarding the format of entries in this file is
# included at the end of the file.
########################################################################
#
# Entries…
*
# grant service to all remote displays
# The nicest way to run the chooser is to just ask it to broadcast
# requests to the network – that way new hosts show up automatically.
# Sometimes, however, the chooser can't figure out how to broadcast,
# so this may not work in all environments.
* CHOOSER BROADCAST #any indirect host can get a chooser
#
# If you'd prefer to configure the set of hosts each terminal sees,
# then just uncomment these lines (and comment the CHOOSER line above)
# and edit the %hostlist line as appropriate
#
#%hostlist host−a host−b
#* CHOOSER %hostlist #
########################################################################
#
# ENTRY FORMAT
#
# An entry in this file is either a host name or a pattern. A
# pattern may contain one or more meta characters ('*' matches any
# sequence of 0 or more characters, and '?' matches any single
# character) which are compared against the host name of the remote
# device requesting service.
#
# If the entry is a host name, all comparisons are done using
# network addresses, so any name which converts to the correct
# network address may be used. For patterns, only canonical host
# names are used in the comparison, so do not attempt to match
# aliases.
#
# Preceding either a host name or a pattern with a '!' character
# causes hosts which match that entry to be excluded.
#
# When checking access for a particular display host, each entry is
# scanned in turn and the first matching entry determines the
# response.
#
# Blank lines are ignored, '#' is treated as a comment delimiter
# causing the rest of that line to be ignored,
# ex.
# !xtra.lcs.mit.edu # disallow direct/broadcast service for xtra
# bambi.ogi.edu # allow access from this particular display
# *.lcs.mit.edu # allow access from any display in LCS
#
3. 其他访问控制机制
除了Xaccess文件提供的X终端资格检查外,还有其他基于主机和基于用户的访问控制机制。
-
基于主机的访问控制
-
/etc/Xn.hosts文件
:该文件包含允许访问本地X服务器n的主机列表(此文件位于X服务器端)。在大多数情况下,特定系统上只运行一个本地X服务器,因此
/etc/X0.hosts
文件最为重要。该文件不在X11的任何默认配置中,需要系统管理员进行编辑,它列出了X服务器可以与之通信的所有客户端主机。
-
xhost命令
:可以使用xhost客户端程序来交互式地授予或拒绝X服务器的访问权限,即修改
/etc/X0.hosts
文件。但只有在与要更改访问权限的X服务器建立登录会话后才能执行此操作,否则将被拒绝并显示错误消息。
-
基于用户的访问控制
-
MIT - MAGIC - COOKIE - 1
:这是最常见的基于用户的访问控制方法,虽然不是最安全的。当客户端主机和X服务器都配置为使用此方法时,用户使用X守护进程登录时,会在用户主目录下的
.Xauthority
文件中生成一个机器可读代码,即魔法cookie,并将其传输到X服务器。每个客户端程序在连接到X服务器之前必须出示此密码,而客户端获取密码的唯一途径是读取用户主目录下的
.Xauthority
文件。该文件的权限设置为仅用户所有者可读写,这意味着只有同一用户启动的客户端程序才能读取魔法cookie。
-
xauth程序
:在分布式处理环境中,为了将魔法cookie从一个客户端主机传播到另一个客户端主机,可以使用xauth程序。它会提取当前显示的用户授权信息,将其复制到另一台机器,并合并到远程机器上的
$HOME/.Xauthority
文件中。
下面通过一个表格来对比基于主机和基于用户的访问控制机制:
| 访问控制类型 | 涉及文件 | 控制方式 | 优缺点 |
| ---- | ---- | ---- | ---- |
| 基于主机 | /etc/Xn.hosts | 通过系统文件列出允许访问本地X服务器的主机列表,可使用xhost命令修改 | 概念简单,但安全性不足,易被NIS覆盖 |
| 基于用户 |.Xauthority、xauth程序 | 使用魔法cookie进行用户授权,xauth用于传播授权信息 | 安全性相对较高,但依赖UNIX文件权限 |
4. 用户X环境配置
用户X环境对于X11的成功实施至关重要。虽然良好的系统级X设置可能足以实现相对满意的X窗口化,但为了定制单个用户的X环境,还需要关注其他配置文件,这些文件通常位于用户的主目录中,仅对单个X会话产生影响。
4.1 xdm - 基于的用户X环境组件
用户的X会话在成功登录后通过执行Xsession脚本启动,该脚本以用户的凭据执行。
-
Xsession脚本
:Xsession脚本会检查用户主目录中是否存在特定的会话设置脚本
.xsession
,如果存在则执行该脚本;如果不存在,则设置一个合适的系统级默认用户X环境。此外,如果配置出现问题,Xsession还提供了进入故障安全模式的方法,即提供一个单独的xterm窗口用于解决问题。
以下是Xsession脚本的示例:
$ cat /usr/lib/X11/xdm/Xsession
#!/ bin/sh
case $# in
1)
case $1 in
failsafe)
exec xterm −C −fn 9 × 15bold −geometry 80 × 24 + 50 + 50
;;
esac
esac
startup=$HOME/.xsession
resources=$HOME/.Xresources
if [ −f $startup ]; then
if [ −x $startup ]; then
exec $startup
else
exec /bin/sh $startup
fi
else
if [ −f $resources ]; then
xrdb −load $resources
fi
mwm &
xrefresh
exec xterm −fg white −bg black −fn 9 × 15bold −sb −C −geometry 107 × 24 + 25 + 501 −ls
fi
-
用户配置文件
:为了创建个人用户X环境,用户主目录中最多可以设置三个X配置文件,分别是
.xsession、.Xresources和相应的窗口管理器rc文件。-
.xsession文件:这是一个shell脚本,用于启动用户启动环境中的每个应用程序。以下是一个示例:
-
#cat /home/sam/.xsession
#!/ bin/sh
# Add /usr/local/bin to the path for this script:
PATH=$PATH:/usr/loca/bin
export PATH
#
# Set up a pattern for the root window:
xsetroot −bitmap /usr/include/X11/bitmaps/pattern1
#
# Merge in user resources:
xrdb −merge $HOME/.Xresources
#
# Start some applications:
xterm −title FirstWindow −g 75 × 35 + 1 + 1 &
xterm −title SecondWindow −g −1–1 &
- `.Xresources`文件:该文件包含用户特定的资源定义,用于定义用户客户端的偏好,如用户xterm窗口的字体、滚动条等。示例如下:
#cat /home/sam/.Xresources
! Resource definition file.
!
! XTerm definitions:
XTerm*font:−misc−fixed−bold −r−normal−−15–140–75–75−c−90−iso8859–1
XTerm*scrollBar:true
XTerm*saveLines:200
4.2 CDE用户X环境组件
CDE启动用户会话的方式略有不同,但更强大和灵活。CDE同样使用Xsession脚本文件来初始化用户会话,但实际工作由桌面会话管理器完成,该管理器从
.Xsession
脚本中调用。
-
Xsession脚本
:默认文件为
/usr/dt/bin/Xsession
,可以将其复制到
/etc/dt/config/Xsession
并进行系统级用户设置的定制(相应地,还需要修改CDE主配置文件Xconfig中的Xsession条目)。该脚本会执行一系列操作,如源用户的
$HOME/.dtprofile
文件、源
/etc/dt/config/Xsession.d
和
/usr/dt/config/Xsession.d
目录中的现有脚本、启动桌面欢迎客户端
dthello
等。
-
CDE会话管理器dtsession
:dtsession客户端从登录到注销管理用户会话,支持基于用户的多种操作,如初始化会话、默认启动窗口管理器
dtwm
、恢复会话、锁定会话等。它依赖于多个文件,包括
/etc/dt/config/en_US/sys.session
、
/etc/dt/config/en_US/sys.resources
、用户主目录下的
.Xdefault
文件和
/usr/dt/app - defaults/en_US/Dtsession
文件。
以下是一个简单的mermaid流程图,展示CDE用户会话启动的主要流程:
graph LR
classDef startend fill:#F5EBFF,stroke:#BE8FED,stroke-width:2px
classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px
A([用户登录]):::startend --> B(执行Xsession脚本):::process
B --> C(源$HOME/.dtprofile文件):::process
B --> D(源Xsession.d目录脚本):::process
B --> E(启动相关客户端):::process
E --> F(启动dtsession):::process
F --> G(管理用户会话):::process
通过以上对X系统访问控制和用户环境配置的详细介绍,我们可以看到X系统在安全性和用户定制方面提供了丰富的功能和灵活的配置选项。无论是系统管理员还是普通用户,都可以根据自己的需求对X系统进行合理的配置和管理,以实现高效、安全的使用体验。
X系统访问控制与用户环境配置全解析
5. CDE用户X环境的深入解析
前面提到了CDE用户X环境的基本组件,下面我们将进一步深入探讨其各个方面的细节。
-
Xsession脚本详解
:CDE的Xsession脚本虽然看起来较长,但它的逻辑清晰。它首先会对一些环境变量进行初始化,这些环境变量对于用户会话的启动和运行至关重要。例如,它会设置
DISPLAY
、
HOME
、
LANG
等变量,这些变量会影响到后续程序的运行和显示。
-
环境变量设置
:脚本中会根据不同的情况设置环境变量,并且提供了三种修改或添加环境变量的方法,分别是通过Xconfig文件(影响X服务器和所有用户)、Xsession文件(影响所有用户)和
.dtprofile
文件(影响单个用户)。这种分层的设置方式,使得系统管理员和用户都可以根据自己的需求对环境变量进行定制。
-
脚本执行流程
:脚本会依次执行一系列操作,包括源用户的
.dtprofile
文件、源
/etc/dt/config/Xsession.d
和
/usr/dt/config/Xsession.d
目录中的脚本、启动各种客户端程序等。这些操作的顺序和内容都经过精心设计,以确保用户会话能够顺利启动。
-
.dtprofile文件的作用
:
.dtprofile
文件是CDE中用于设置单个用户特定配置的重要文件。它可以与用户的登录脚本文件(如
.profile
或
.login
)共存,并且可以对用户的X环境进行个性化设置。例如,用户可以在该文件中设置自己的环境变量、启动特定的程序等。
-
dtsession客户端的功能与依赖文件
-
功能概述
:dtsession客户端从登录到注销全程管理用户会话,提供了一系列强大的功能。它可以初始化会话、默认启动窗口管理器
dtwm
、恢复会话、锁定会话、启动屏幕保护程序、作为颜色服务器为其他DT客户端服务、保存会话、显示和处理注销对话框以及终止会话等。
-
依赖文件
:dtsession依赖于多个文件,这些文件的作用各不相同。
| 文件名称 | 文件作用 |
| ---- | ---- |
|
/etc/dt/config/en_US/sys.session
| 指定用户初始会话的一组应用程序,优先查找自定义文件 |
|
/etc/dt/config/en_US/sys.resources
| 指定桌面资源,优先查找自定义文件 |
| 用户主目录下的
.Xdefault
文件 | 指定用户特定的资源 |
|
/usr/dt/app - defaults/en_US/Dtsession
| 指定默认的dtsession资源 |
以下是一个mermaid流程图,展示dtsession客户端的工作流程:
graph LR
classDef startend fill:#F5EBFF,stroke:#BE8FED,stroke-width:2px
classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px
A([用户登录]):::startend --> B(启动dtsession):::process
B --> C{执行操作}:::process
C -->|初始化会话| D(初始化用户会话):::process
C -->|启动窗口管理器| E(启动dtwm):::process
C -->|恢复会话| F(恢复默认或当前会话):::process
C -->|锁定会话| G(锁定用户会话):::process
C -->|启动屏幕保护程序| H(启动屏幕保护程序):::process
C -->|保存会话| I(保存默认或当前会话):::process
C -->|处理注销| J(显示和处理注销对话框):::process
C -->|终止会话| K(终止用户会话):::process
6. 用户X环境配置的重要性及实践建议
用户X环境的配置对于X系统的成功实施和用户体验至关重要。下面我们将探讨其重要性,并给出一些实践建议。
-
重要性分析
-
用户体验
:用户对X系统的评价主要基于他们所看到的界面和使用的便捷性。一个良好的用户X环境可以提供舒适的视觉体验和高效的操作方式,从而提高用户的满意度和工作效率。
-
系统适应性
:不同的用户有不同的需求和偏好,通过个性化的用户X环境配置,可以使X系统更好地适应各种用户的需求,提高系统的通用性和灵活性。
-
实践建议
-
管理员方面
-
提供默认环境
:管理员应该创建一个有用的默认用户X环境,通过系统级配置数据来实现。这样可以确保新用户在首次使用X系统时能够获得一个基本的、可用的环境。
-
培训用户
:管理员可以向用户提供关于用户X环境配置的培训,帮助用户了解如何进行个性化设置,提高用户的自主配置能力。
-
用户方面
-
了解基本配置
:用户应该了解一些基本的用户X环境配置知识,如
.xsession
、
.Xresources
等文件的作用和使用方法,以便根据自己的需求进行个性化设置。
-
逐步调整
:用户在进行个性化设置时,应该逐步进行调整,每次只修改一个配置项,并观察其效果。这样可以避免因一次性修改过多配置而导致系统出现问题。
7. 总结
X系统的访问控制和用户环境配置是一个复杂而又重要的领域。通过对X查询类型、Xaccess文件、其他访问控制机制以及用户X环境配置的详细介绍,我们可以看到X系统提供了丰富的功能和灵活的配置选项。
-
访问控制
:基于主机和基于用户的访问控制机制相互补充,为X系统的安全性提供了保障。管理员可以根据实际需求选择合适的访问控制方式,并进行相应的配置。
-
用户环境配置
:无论是xdm - 基于的用户X环境还是CDE用户X环境,都提供了多种配置文件和方法,使用户可以根据自己的需求对X环境进行个性化设置。管理员和用户应该充分利用这些配置选项,提高X系统的使用体验和效率。
通过合理的配置和管理,X系统可以在安全性和用户体验之间取得平衡,为用户提供一个高效、稳定的工作环境。在实际应用中,我们应该不断探索和实践,根据具体情况进行优化和调整,以充分发挥X系统的优势。
超级会员免费看

被折叠的 条评论
为什么被折叠?



