[ 上一页 ] [ 目录 ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ 15 ] [ A ] [ 下一页 ]

Debian 参考手册
第 9 章 - Debian系统微调


本章讲述了基本的基于文本界面的系统配置方法。在学习本章前请先阅读Debian系统安装提示, 第 3 章.

如是你很关心安全方面的信息,强烈推荐你阅读Securing Debian Manual,它位于harden-doc软件包。


9.1 系统初始化提示

参阅init程序, 第 2.4.1 节了解有关Debian init脚本的基础知识。


9.1.1 自定义init脚本

Debian使用sys-V init脚本系统。尽管/etc/init.d/*下所有的init脚本均被登记为conffile,系统管理员可以自由地修改它们,但编辑/etc/default/*下的文件却是创建自定义init脚本的更好的方法。

例如,/etc/init.d/rcS可用来定制motdsulogin等为默认启动。


9.1.2 自定义系统日志

可通过/etc/syslog.conf配置系统日志记录方式。如果想为日志文件上色可安装colorize软件包。参阅syslogd(8)syslog.conf(5)


9.1.3 硬件存取优化

有一部分硬件优化的配置工作Debian留给了系统管理员来掌握。

使用noatime选项挂载文件系统可有效提高文件的读取速度。参阅fstab(5)mount(8)

通过proc文件系统,Linux内核可直接调节某些硬件参数。参阅通过proc文件系统调整内核, 第 7.3 节

Debian中有许多专门的硬件配置工具包。它们中有不少是针对笔记本电脑的。这儿有一些有趣的软件包:

在此,ACPI是一种比APM更新式的电源管理系统。

某些软件包需要专门的内核模块。它们已经包含在许多最新的内核源码中。如果遇以问题,则需要手动打上最新的内核补丁。


9.2 访问权限控制


9.2.1 通过PAM和login实现访问权限管理

PAM(Pluggable Authentication Modules 可嵌入认证模块)提供了登录管理。

     /etc/pam.d/*             # PAM管理文件
     /etc/pam.d/login         # PAM登录管理文件
     /etc/security/*          # PAM模块参数
     /etc/securetty           # 管理通过控制台进行的root登录(login)
     /etc/login.defs          # 管理登录行为(login)

如果想在控制台终端不用密码直接登录系统,可按下面的方法修改/etc/pam.d/login文件的内容,风险自负。

     #auth       required   pam_unix.so nullok
     auth       required   pam_permit.so

该方法亦可用于xdmgdm,实现无密码X控制台。

相反,如果你希望强化密码政策,可安装cracklib2并按下面的方法修改/etc/pam.d/passwd

     password required       pam_cracklib.so retry=3 minlen=6 difok=3

使用一次性登录密码激活帐户也很有用,要实现该功能,在passwd命令后加上-e参数,参阅passwd(1)

要设置系统最大进程数,可在Bash shell中设定ulimit -u 1000或设置PAM的/etc/security/limits.conf文件。其它参数如core等的设置方法与之类似。PATH的初始值可在/etc/login.defs中先于shell启动脚本设置。

PAM的文档位于libpam-doc软件包内。其中《The Linux-PAM System Administrator's Guide 》一文涵盖了PAM配置、可用模块等内容,文档中还包含《The Linux-PAM Application Developers' Guide》和《The Linux-PAM Module Writers' Guide》。


9.2.2 “为什么GNU su命令不支持wheel group”

这是Richard M. Stallman的一句名言,位于旧版info su页面末尾。别担心:在Debian中,当前版本的su使用PAM,因此你可以用/etc/pam.d/su下的pam_wheel.so来限制任何用户组使用su的能力。下面的操作将在Debian系统中赋予adm用户等同于BSD wheel用户组的权限,而且该组成员不需要密码就能使用su命令。

     # anti-RMS configuration in /etc/pam.d/su
     auth       required   pam_wheel.so group=adm
     
     # Wheel members to be able to su without a password
     auth       sufficient pam_wheel.so trust group=adm

9.2.3 各种用户组的含义

一些有趣的用户组:

完整列表参阅Securing Debian Manual的“FAQ”章节,亦见于Woody中的harden-doc软件包。新的base-passwd (>3.4.6)软件包亦包含了权威列表:/usr/share/doc/base-passwd/users-and-groups.html


9.2.4 sudo –一个安全的工作环境

使用sudo最主要的目的是保护自己少做蠢事,我认为使用系统时使用sudo比使用root帐号更好。YMMV

安装sudo然后编辑/etc/sudoers中有关选项激活它。还可在/usr/share/doc/sudo/OPTIONS中查看sudo的用户组特性。

样例中的配置,设定“staff”用户组成员可通过sudo执行任何root权限的命令而“src”用户组成员只可执行规定的一部分root权限的命令。

使用sudo的好处在于只需一个普通用户密码登录,并且所有的活动都受到监控。用它为低级别的系统管理员赋权是个好主意。例如:

     $ sudo chown -R myself:mygrp .

当然,如果你知道root密码(绝大部分在家安装系统的用户都会知道),就可以在普通用户下执行任何root命令:

     $ su -c "shutdown -h now"
     Password:

(我想我该严格限制admin帐号的sudo特权,但对于家中的服务器,就不用考虑那么多了。)

想了解其它允许普通用户执行root权限命令的程序,可以看看super软件包。


9.2.5 daemon程序的访问权限控制

对于Internet超级服务器inetd会在系统启动时通过/etc/rc2.d/S20inetd(for RUNLEVEL=2)加载,S20inetd是一个指向/etc/init.d/inetd的符号链接。本质上,inetd允许一个daemon调用其它多个daemon,以减轻系统的负载。

当某个服务请求到达,系统会查询/etc/protocols/etc/services中的数据库,确定该请求所指定的相关协议和服务,接着inetd会在/etc/inetd.conf数据库中查找普通Internet服务或/etc/rpc.conf中查找基于Sun-RPC的服务。

为了系统安全,请在/etc/inetd.conf中关闭所有不用的服务。涉及到NFS和其它基于RPC的程序时需要激活Sun-RPC服务。

有时,inetd并不直接打开请求的服务,而是在/etc/inetd.conf中将该服务名作为的参数,打开tcpd TCP/IP daemon包装程序,这时,tcpd首先登记请求并使用/etc/hosts.deny/etc/hosts.allow进行附加的检查,然后再运行相应的服务程序。

如果新版的Debian系统进行远程访问时出现问题,可以/etc/hosts.deny中注释掉“ALL: PARANOID”,如果有该行的话。

更多信息参阅inetd(8)inetd.conf(5)protocols(5)services(5)tcpd(8)hosts_access(5)hosts_options(5)

有关Sun-RPC的更多信息参阅rpcinfo(8)portmap(8)/usr/share/doc/portmap/portmapper.txt.gz


9.2.6 轻便目录访问控制协议(LDAP)

参阅:


9.3 刻录机

ATAPI/IDE接口的刻录机是时下非常流行的配件,它是极好的系统备份工具,特别是对于那些单个文件容量一般< 640 MB的家庭用户。更多权威的信息,请参阅LDP CD-Writing-HOWTO


9.3.1 概述

首先需要说明的是,在向刻录机发送数据过程中,任何数据中断都会对光盘造成无法挽回的损坏。所以应选购缓冲区尽可能大的刻录机。如果资金充裕,就别再考虑ATAPI/IDE型的,买台SCSI型的没错。如果可以连接IDE接口,就使用PCI总线(例如,在主板上)而别用ISA总线(SB16声卡就使用它)。

当刻录机连接到IDE,驱动它的通常是IDE-SCSI驱动而非旧式的IDE CD驱动,所以,需要激活SCSI通用驱动。有两种方法激活它,假设系统使用的是较新版本的内核(如2001年三月的版本)。


9.3.2 方法一:modules + lilo

如果使用的是Debian原装内核,将下面的内容添加到/etc/lilo.conf,如果有多个选项,列出时要将它们用空格分隔开:

     append="hdx=ide-scsi ignore=hdx"

在此,刻录机使用ide-scsi驱动访问,hdx就代表它,其中x的含义如下:

     hda          接第一个IDE接口作主盘
     hdb          接第一个IDE接口作从盘
     hdc          接第二个IDE接口作主盘
     hdd          接第二个IDE接口作从盘
     hde ... hdh  接扩展IDE接口或ATA66/100 IDE接口

完成上述配置工作后以root身份运行下列命令激活设备

     # lilo
     # shutdown -h now

9.3.3 方法二:重编译内核

Debian用make-kpkg创建新内核,使用make-kpkg时加上新的--append_to_version参数可创建多重内核镜像。参阅Debian下的Linux内核, 第 7 章

make menuconfig后执行下列步骤:


9.3.4 配置步骤

下列步骤可让系统在启动时激活内核对刻录机的支持:

     # echo ide-scsi >>/etc/modules
     # echo sg       >>/etc/modules
     # cd /dev; ln -sf scd0 cdrom

手工激活可以这样做:

     # modprobe ide-scsi
     # modprobe sg

重启以后,用下列方法检查安装情况:

     $ dmesg|less
     # apt-get install cdrecord
     # cdrecord -scanbus

[Per Warren Dodge]如果机器上同时有CD-ROM和CD-R/RW,这时ide-scsiide-cd可能会产生冲突,请试试在/etc/modutils/aliases中加上下面的内容,然后运行update-modules并重启系统。

     pre-install      ide-scsi      modprobe ide-cd

上述指令指示系统在加载ide-scsi前先加载IDE驱动。IDE驱动ide-cd接管所有ATAPI CD-ROM——对指明忽略的设备除外。剩下的设备才由ide-scsi来管理。


9.3.5 光盘镜像文件(可引导光盘)

target-directory/下的文件,制作成光盘镜像文件cd-image.raw(可引导系统、Joliet TRANS.TBL-enabled格式的光盘;如果不需要引导系统功能,可去掉-b-c选项),在第一个软驱中插入启动软盘然后执行:

     # dd if=/dev/fd0 target-directory/boot.img 
     # mkisofs -r -V volume_id -b boot.img -c bootcatalog -J -T \
             -o cd-image.raw target_directory/

一个有趣的黑客尝试是制作一盘DOS引导光盘。如果上述的boot.img文件中包含了通用DOS引导软盘镜像,光盘就可以象插在软驱(A:)中的DOS软盘一样引导DOS系统。如果再加上freeDOS就更有趣。

想检查该光盘镜像文件,可以在回送设备(loop device)上加载它。

     # mount -t iso9660 -o ro,loop cd-image.raw /cdrom
     # cd /cdrom
     # mc
     # umount /cdrom

9.3.6 刻录光盘(R,R/W)

首先进行设备测试(假设是双倍数刻录)

     # nice --10 cdrecord -dummy speed=2 dev=0,0 disk.img

如果测试通过,执行下面的命令刻录CD-R

     # nice --10 cdrecord -v -eject speed=2 dev=0,0 disk.img

或执行下面命令刻录CD-RW

     # nice --10 cdrecord -v -eject blank=fast speed=2 dev=0,0 disk.img

某些型号的CD-RW刻录机用下面的命令更好

     # nice --10 cdrecord -v blank=all speed=2 dev=0,0 disk.img

接下来执行

     # nice --10 cdrecord -v -eject speed=2 dev=0,0 disk.img

分两步做是必要,这可以防止在刻录时遇到数据空白产生SCSI超时错误。nice参数可时也要做一些调整。


9.3.7 制作光盘镜像文件

某些CD-R和商业光盘在数据末尾追加了空白扇区(junk sectors),使用dd无法拷贝这些光盘(Windows98 CD就是其中之一)。cdrecord软件包中有一个readcd命令,用它可以将任何光盘内容拷贝成镜像文件。对于数据盘,先挂载,运行df查看它的实际大小,再将显示的数字(in blocks, = 1024 bytes)除以2得到实际光盘扇区数(2048 bytes),带参数运行readcd用该硬盘镜像文件烧制CD-R/RW。

     # readcd dev=target,lun,scsibusno # select function 11

其中,大部分情况下命令行中3个参数都为0。有时readcd给出的扇区数会偏多!此时使用前面用挂载镜像的方法得出的大小值来对上述参数赋值效果更好。

It should be noted that the use of dd has few problems if used on CD-ROM. The first run of dd command may cause error message and may yield a shorter disk image with the lost tail-end. The second run of dd command may yield a larger disk image with garbage data attached at the end on some systems if the data size is not specified. Only the second run of dd command with the correct data size specified without ejecting CD after error message seems to avoid these problems. If the image size displayed by df is 46301184 blocks , use the following command twice to get right image (this is my empirical information):

     # dd if=/dev/cdrom of=cd.img bs=2048 count=$((46301184/2))

9.3.8 Debian安装盘镜像

有关Debian CDs的最新信息,请浏览Debian CD site

如果有较快的Internet连接,可考虑用下面的引导方法从网络安装系统:

如果没有较快的Internet连接,可考虑从光盘出售商处购买安装光盘。

请不要浪费带宽来下载标准光盘镜像(即使是使用新的jigdo方式),除非你是光盘镜像测试员。

有一个很有名的光盘镜像KNOPPIX - Live Linux Filesystem On CD。该光盘可以启动一个全功能的Debian系统而且不需要在硬盘上安装。


9.3.9 将系统备份到CD-R

想要将重要的配置文件和数据备份到CD-R,可使用backup中的“backup”脚本。亦可参阅差异备份与数据同步, 第 8.4 节


9.3.10 将音乐CD刻录到CD-R

我没测试过:

     # apt-get install cdrecord cdparanoia
     # cdparanoia -s -B
     # cdrecord dev=0,0,0 speed=2 -v -dao -eject defpregap=1 -audio *.wav

     # apt-get install cdrdao #disk at once
     # cdrdao read-cd --device /dev/cdrom --paranoia-mode 3 my_cd # read cd
     # cdrdao write --device /dev/cdrom --speed 8 my_cd    # write a new CD

cdrdao与拷贝不同(如没有数据间隙,等...)


9.4 X程序

X环境由Xfree86提供。Debian系统中X服务器有两个主要版本:Xfree86 Version 3.3 (XF3)和XFree86 Version 4.x series (XF4),它们都是基于X.ORG制定X11R6标准的。

想了解X的基础知识,可参阅X(7),LDP XWindow-User-HOWTORemote X Apps mini-HOWTO。对Debian 用户专门的指南,可阅读xfree86-common软件包中提供的/usr/share/doc/xfree86-common/FAQ.gz,其中Branden Robinson有一些有趣并且权威的对key binding的讨论。

X服务器, 第 9.4.3 节
该程序存在于那些需要在用户显示器(CRT,LCD)上显示X窗口和桌面并接收键盘和鼠标输入的本地主机上。
X客户端, 第 9.4.4 节
该程序存在于那些需要运行与X环境兼容的应用程序的(本地或远程)主机上。

这正好将常规的“服务器”和“客户机”关系倒转过来。

有几种途径让“X server”(显示端)接收远程“X client”(应用端)的连接请求:

除了ssh,所有的远程连接方式,都需要X服务器开启TCP/IP连接。参阅X的TCP/IP连接, 第 9.4.6 节


9.4.1 X系统软件包

在Woody中提供了下列几个软件包来简化X系统的安装。

x-window-system-core
该综合包提供一些基本组件,用于在单一工作站上运行X Window系统,其中包括X函数库、一个X服务器:xserver-xfree86、一套字体、一组基本的X客户端及工具。
x-window-system
该综合包提供XFree86项目开发的所有X Window系统的组件,以及一套经久不衰的辅助程序。(注意,它包含了x-window-system-coretwmxdm等组件,故安装了它就不用再安装x-window-system-core了。)
xserver-common-v3
XFree86 3.x X服务器(X3)相关的程序和工具。
xserver-*
X3服务器软件包的补充包,包含了对那些新的X4服务器不支持的硬件的支持。如X4不支持某些老式的ATI mach64卡,某些视频卡在Woody版的X4中无法工作等等。(要获得可用软件包,可执行apt-cache search xserver-|less。所有这些X3服务器均是基于xserver-common-v3的。)

大多数情况下,应该安装x-window-system(如果要通过控制台登录,需禁用xdm,具体方法参阅“我不想直接启动到X!”, 第 8.1.4 节。)


9.4.2 X服务器的硬件侦测包

在安装X系统之前安装下列软件包,就能在X配置阶段实现硬件侦测:


9.4.3 X服务器

有关X服务器的信息,参阅XFree86(1x)

从本地控制台调用X服务器:

     $ startx -- :<display> vtXX
     e.g.:
     $ startx -- :1 vt8 -bpp 16
     ... start on vt8 connected to localhost:1 with 16 bpp mode

--后面的参数用于设置X服务器。

注意,在使用~/.xserverrc脚本定制X服务器启动进程时,请确保exec调用的是真正的X服务器。如果没这么做会导致X服务器启动缓慢及退出。例如:

     #!/bin/sh
     exec /usr/bin/X11/X -dpi 100 -nolisten tcp

9.4.3.1 配置XF4服务器

(重新)配置XF4服务器,

     # dpkg-reconfigure --priority=low xserver-common
     # dpkg-reconfigure --priority=low xserver-xfree86

该命令会生成/etc/X11/XF86Config-4文件并调用dexconf脚本来配置X。


9.4.3.2 配置XF3服务器

(重新)配置XF3服务器,

     # dpkg-reconfigure --priority=low xserver-common-v3
     # dpkg-reconfigure --priority=low xserver-mach64

该命令会生成/etc/X11/XF86Config文件并调用xf86config-v3脚本来配置X。


9.4.3.3 手工配置X服务器

添加用户自定义内容时,不要在配置文件的定义段落中进行编辑(对于XF4而言):

     ### BEGIN DEBCONF SECTION
     [snip]
     ### END DEBCONF SECTION

正确是做法是将用户定义内容加在定义段落之前。例如,要添加自定义视频卡,可在文件开头添加类似下面的内容:

     Section "Device"
       Identifier        "Custom Device"
       Driver            "ati"
       Option            "NoAccel"
     EndSection
     
     Section "Screen"
       Identifier  "Custom Screen"
       Device      "Custom Device"
       Monitor     "Generic Monitor"
       DefaultDepth 24
       Subsection "Display"
         Depth       8
         Modes       "1280x960" "1152x864" "1024x768" "800x600" "640x480"
       EndSubsection
       Subsection "Display"
         Depth       16
         Modes       "1280x960" "1152x864" "1024x768" "800x600" "640x480"
       EndSubsection
       Subsection "Display"
         Depth       24
         Modes       "1280x960" "1152x864" "1024x768" "800x600" "640x480"
       EndSubsection
     EndSection
     
     Section "ServerLayout"
         Identifier        "Custom"
         Screen            "Custom Screen"
         InputDevice       "Generic Keyboard" "CoreKeyboard"
         InputDevice       "Configured Mouse" "CorePointer"
     EndSection

9.4.4 X客户端

绝大多数X客户端程序都可以用类似下面的命令启动:

     client $ xterm -geometry 80x24+30+200 -fn 6x10 -display hostname:0 &

命令行中各参数的含义如下:

默认的X客户端程序(应用端)的displayname可通过DISPLAY环境变量来设置。例如:在运行某X客户端程序之前,执行下列命令之一就可以完成设置工作:

     $ export DISPLAY=:0 
             # 默认情况下,本地机器使用第一个X屏幕
     $ export DISPLAY=hostname.fulldomain.name:0.2
     $ export DISPLAY=localhost:0

程序启动方式可以在~/.xinitrc中进行自定义。例如:

     xrdb -load $HOME/.Xresources
     xsetroot -solid gray &
     xclock -g 50x50-0+0 -bw 0 &
     xload -g 50x50-50+0 -bw 0 &
     xterm -g 80x24+0+0 &
     xterm -g 80x24+0-0 &
     twm

正如自定义X会话, 第 9.4.5.1 节中所描述的,当使用startx启动X时,该脚本将重载Xsession所做的所有常规操作,通常使用~/.xsession而该方法仅作为最后的手段使用。


9.4.5 X会话

X会话(X服务器+X客户机)可使用下列方法启动:

想使用控制台参阅“我不想直接启动到X!”, 第 8.1.4 节


9.4.5.1 自定义X会话

默认的启动脚本/etc/X11/Xsession/etc/X11/Xsession.d/50xfree86-common_determine-startup/etc/X11/Xsession.d/99xfree86-common_start的高效的结合体。

/etc/X11/Xsession的执行会受/etc/X11/Xsession.options的影响,从本质上讲,它使用exec命令执行系统中按下面的次序排序,排在第一位的程序:

  1. ~/.xsession or ~/.Xsession,如果它被定义。
  2. /usr/bin/x-session-manager,如果它被定义。
  3. /usr/bin/x-window-manager,如果它被定义。
  4. /usr/bin/x-terminal-emulator,如果它被定义。

Debian选择系统(Debian alternative system )对这些命令的确切定义进行了描述,参阅自选命令, 第 6.5.3 节。例如:

     # update-alternatives --config x-session-manager
     ... 或
     # update-alternatives --config x-window-manager

如果想定义某X窗口管理器为默认窗口管理器,同时保留已安装的GNOME和KDE会话管理器,可用http://bugs.debian.org/168347中第二个错误报告所附的文件替换/etc/X11/Xsession.d/50xfree86-common_determine-startup文件(我希望它能早日加到发行版中),然后按下面的方法编辑/etc/X11/Xsession.options来禁用X会话管理器:

     # /etc/X11/Xsession.options
     #
     # configuration options for /etc/X11/Xsession
     # See Xsession.options(5) for an explanation of the available options.
     # Default enabled
     allow-failsafe
     allow-user-resources
     allow-user-xsession
     use-ssh-agent
     # Default disabled (enable them by uncommenting)
     do-not-use-x-session-manager
     #do-not-use-x-window-manager

如果不想按上述方法修改系统,由于gnome-sessionkdebase软件包包含了那些X会话管理器,所以删除它们,X窗口管理器就成了默认窗口管理器了。(废话,还更好的主意吗?)

对于那些/etc/X11/Xsession.options中仅包含一行allow-user-xsession的系统,任何定义了~/.xsession~/.Xsession的用户,均可以自定义/etc/X11/Xsession的行为。

~/.xsession文件中排在最后的命令,其格式应该为exec some-window/session-manager,用来启动你喜欢的X窗口/会话管理器。

/usr/share/doc/xfree86-common/examples/xsession.gz给出了一个不错的~/.xsession脚本样例。

我使用它来为每个用户设置窗口管理器、屏幕访问和语言支持。参阅启动特定的X会话/窗口管理器, 第 9.4.5.2 节X下获取root权限, 第 9.4.11 节双语系统的例子(日本语EUCT和ISO-8859-1), 第 9.7.8 节

用户自己添加的X资源保存在~/.Xresources,而系统级的X资源保存于/etc/X11/Xresources/*。参阅xrdb(1x)

用户可以在~/.xmodmaprc中自定义键盘布局和鼠标按键布局,参阅xmodmap(1x)


9.4.5.2 启动特定的X会话/窗口管理器

遵循自定义X会话, 第 9.4.5.1 节中描述的原则,要激活用户特定的X会话/窗口管理器,需要安装相应的软件包并在~/.xsession文件末尾添加如下内容(我爱用blackbox/fluxbox,它简单快捷。):

参阅Window Managers for X.


9.4.5.3 配置KDE/GNOME环境

要配置完整的KDE/GNOME环境,下列的综合包很有用:

请使用能操作recommends类软件包的安装工具安装这些软件包,如dselectaptitude,比起apt-get它们能提供更丰富的软件供你选择。

如果想从控制台登录,必须禁用X显示管理器,例如kdmgdmwdm这会牵扯到一些关联问题,有关信息参阅“我不想直接启动到X!”, 第 8.1.4 节

如果想将系统的默认环境由KDE换成GNOME,请用自选命令, 第 6.5.3 节中所述的方法配置x-session-manager


9.4.6 X的TCP/IP连接

由于不加密的远程TCP/IP套接字连接易受到窃听攻击,新版的Debian安装X时默认是禁用TCP/IP套接字口的。建议使用ssh进行远程X连接(参阅X远程联接:ssh, 第 9.4.8 节)。

通常不推荐使用本节所述的方法,除非系统处于防火墙之后且所处网络中全是绝对可信任的用户。使用下面的命令检查当前X服务器的TCP/IP套接字口的设置:

     # find /etc/X11 -type f -print0 | xargs -0 grep nolisten
     /etc/X11/xinit/xserverrc:exec /usr/bin/X11/X -dpi 100 -nolisten tcp

删除-nolisten就可以恢复X服务器对TCP/IP的监听。


9.4.7 X远程联接:xhost

xhost允许通过主机名访问。该方式极不安全。下面的方法将关闭主机验证功能,只要TCP/IP套接字连接功能是打开的(参阅X的TCP/IP连接, 第 9.4.6 节)本机就会接收来自任何地方的连接请求。

     $ xhost +

要重新打开主机验证功能可执行:

     $ xhost -

xhost无法区分远程主机上不同的用户,而且远程连接的主机名(实际上是地址)也可以是伪造的。

如果处于一个不可信的网络环境(例如通过PPP拔号连接到Internet),即使在网络中成为主机受到一定标准的限制,也应尽量避免使用该连接方式。参阅xhost(1x)


9.4.8 X远程联接:ssh

使用ssh可以在本地主机和远程应用服务器之间建立一个安全的连接通道。

该连接方式使得远程X客户机上的屏幕输出,看上去就好象是通过本地UNIX域套接字的方式连接到服务器的客户机输出。


9.4.9 xterm

学习xterm可以去http://dickey.his.com/xterm/xterm.faq.html


9.4.10 X资源数据库

许多老式的X程序,如xterm,使用X资源数据库配置它们的外观。~/.Xresources文件用于保存用户资源定义。登录后该文件自动合并到默认的X资源中。

这儿是一些有用的设置,可加到~/.Xresources文件中:

     ! Set the font to a more readable 9x15
     XTerm*font: 9x15
     
     ! Display a scrollbar
     XTerm*scrollBar: true
     
     ! Set the size of the buffer to 1000 lines
     XTerm*saveLines: 1000

要使上述设置立即生效,可用下面的命令将它们合并到数据库:

     xrdb -merge ~/.Xresources

9.4.11 X下获取root权限

如果运行GUI程序时需要root权限,请用下面的步骤在用户的X服务器上显示程序输出。千万不要直接使用root帐号启动X服务器以避免承担不必要的安全风险。

以普通用户身份启动X服务器,开一个xterm控制台窗口,执行:

     $ XAUTHORITY=$HOME/.Xauthority
     $ export XAUTHORITY
     $ su root
     Password:*****
     # printtool &

非root用户以su方式运用该技巧时,要确保该非root用户所在用户组对~/.Xauthority文件有读权限。

想要系统自动执行该命令序列,请在用户帐号下创建~/.xsession文件,编辑文件如下:

     # This makes X work when I su to the root account.
     if [ -z "$XAUTHORITY" ]; then
             XAUTHORITY=$HOME/.Xauthority
             export XAUTHORITY
     fi
     unset XSTARTUP
     # If particular window/session manager is desired, uncomment following
     # and edit it to fit your needs.
     #XSTARTUP=/usr/bin/blackbox
     # This start x-window/session-manager program
     if [ -z "$XSTARTUP" ]; then
       if [ -x /usr/bin/x-session-manager ]; then
         XSTARTUP=x-session-manager
       elif [ -x /usr/bin/x-window-manager ]; then
         XSTARTUP=x-window-manager
       elif [ -x /usr/bin/x-terminal-emulator ]; then
         XSTARTUP=x-terminal-emulator
       fi
     fi
     # execute auto selected X window/session manager
     exec $XSTARTUP

接着在用户的xterm窗口中运行su(不是su -)。现在从该xterm启动的GUI程序就可以在该用户的X window环境中显示以root权限运行的程序输出。只要执行了默认的/etc/X11/Xsession,就可以使用该方法。如果用户使用~/.xinit~/.xsession来配置自定义环境,需要将上面提到的环境变量XAUTHORITY加到这些脚本中去。

还有一种方法,sudo可用于自动执行上面的命令序列:

     $ sudo xterm
     ... 或
     $ sudo -H -s

这时/root/.bashrc中应包含:

     if [ $SUDO_USER ]; then
         sudo -H -u $SUDO_USER xauth extract - $DISPLAY | xauth merge -
     fi

即使对那些home目录位于NFS上的用户,它也能正常工作。因为root不用读.Xauthority文件。

还有一些用于该目的的专用软件包:kdesugksugksudognome-sudoxsu。其它方法也可以达到同样的目的:如在/root/.Xauthority和相应用户文件之间创建一个符号链接;使用sux脚本;或对root初始化脚本执行“xauth merge ~USER_RUNNING_X/.Xauthority”。

更多方法参阅debian-devel mailing list


9.4.12 X下的TrueType字体

XFree86-4中标准的xfs能完美地驱动TrueType字体,如果你使用的是XFree86-3,就得安装第三方字体服务器如xfs-xtt

不论什么应用程序,如果要使用TrueType字体,就要与libXft或libfreetype建立链接(如果你使用的是已编译好的.deb包,就不用在这方面操心了)。

要记得安装所需的字体文件并生成fonts.{scale,dir}文件,这样字体才能被检索使用。

由于供自由使用的字体有时很有限,Debian用户也可以安装或共享某些商业TrueType字体。为了简化安装这类字体的工序,于是产生了一些方便的软件包:

请慎重选择TT字体,以免自由系统受到不自由字体的污染。


9.4.13 网页浏览器(图形化)

Woody发布版中包含了下面这些拥有图形处理能力的网页浏览器:

galeon需要有与其版本相匹配的特定版本的mozilla才能运行。虽然它们的UI不同,但都使用的是同一个HTML解释引擎Gecko。

安装诸如mozillagaleon浏览器的plug-ins,可手工将“*.so”装到plug-in目录下,然后重启浏览器。

Plug-in资源:


9.5 SSH

SSH(Secure SHell)是在Internet中建立连接的安全途径。OpenSSH是一个自由的SSH实现软件,它包含在Debian的ssh软件包中。


9.5.1 基础

首次安装OpenSSH服务器和客户机。

     # apt-get update && apt-get install ssh

安装时需要打开/etc/apt/source.list中的non-US链接。要运行OpenSSH服务器,还得屏蔽掉/etc/ssh/sshd_not_to_be_run

SSH有两个验证协议:

如果系统正迁移到Woody或使用非Debian系统,请注意版本差异。

更多信息请参阅/usr/share/doc/ssh/README.Debian.gzssh(1)sshd(8)ssh-agent(1)ssh-keygen(1)

下面是一些关键的配置文件:

下面的操作将从客户机建立一个ssh连接。

     $ ssh [email protected]
     $ ssh -1 [email protected] # Force SSH version 1
     $ ssh -1 -o RSAAuthentication=no -l username foo.host
         # force password on SSH1
     $ ssh -o PreferredAuthentications=password -l username foo.host
         # force password on SSH2

在用户眼里,ssh的功能相当于一个更灵巧更安全的telnet(will not bomb with ^])。


9.5.2 发送端口–SMTP/POP3微调

在本地机器上执行下面的命令,可以建立一个连接本地主机4025端口和远程服务器25端口的管道,以及一个连接本地主机4110端口和远程服务器110端口的ssh连接。

     # ssh -q -L 4025:remote-server:25 4110:remote-server:110 \
                username@remote-server

在Internet上可使用该方法建立与SMTP/POP3服务器的安全连接。记得在远程主机的/etc/ssh/sshd_config中设置AllowTcpForwarding值为yes


9.5.3 用更少的密码建立连接

使用RSAAuthentication(SSH1协议)或PubkeyAuthentication(SSH2协议)可不必记住每个远程系统的连接密码。

在远程系统上,在/etc/ssh/sshd_config中分别设置“RSAAuthentication yes”或“PubkeyAuthentication yes”。

然后在本地生成验证密匙,在远程系统上安装公共密匙:

     $ ssh-keygen          # RSAAuthentication: RSA1 key for SSH1
     $ cat .ssh/identity.pub | ssh user1@remote \
             "cat - >>.ssh/authorized_keys"
     ...
     $ ssh-keygen -t rsa   # PubkeyAuthentication: RSA key for SSH2
     $ cat .ssh/id_rsa.pub | ssh user1@remote \
             "cat - >>.ssh/authorized_keys"
     ...
     $ ssh-keygen -t dsa   # PubkeyAuthentication: DSA key for SSH2
     $ cat .ssh/id_dsa.pub | ssh user1@remote \
             "cat - >>.ssh/authorized_keys"

今后可用“ssh-keygen -p”来改密码。最后记得检查一下设置,可做个连接测试,如遇问题,执行“ssh -v”。

你可以通过在authorized_keys里添加选项来限制主机及运行指定的命令。详情参阅sshd(8)

注意SSH2有HostbasedAuthentication,要使它工作,必须同时在服务器端的/etc/ssh/sshd_config文件中和客户机端的/etc/ssh/ssh_config$HOME/.ssh/config文件中设置HostbasedAuthenticationyes


9.5.4 其它平台的SSH客户端

下面是其它一些非类Unix平台的免费SSH客户端。

Windows
puTTY (GPL)
Windows (cygwin)
SSH in cygwin (GPL)
Macintosh Classic
macSSH (GPL) [注意Mac OS X包含OpenSSH;在终端应用程序中使用ssh]

参阅SourceForge.net的站点文档,“6. CVS Instructions”。


9.5.5 SSH代理

使用passphrase来保护SSH认证密匙会更安全,如果还没有设置,可使用ssh-keygen -p来设置。

用更少的密码建立连接, 第 9.5.3 节中描述了如何使用一个基于密码的远程主机连接,将公共密匙(例如~/.ssh/id_rsa.pub)放入远程主机的~/.ssh/authorized_keys

     $ ssh-agent bash # or run zsh/tcsh/pdksh program instead.
     $ ssh-add ~/.ssh/id_rsa
     Enter passphrase for /home/osamu/.ssh/id_rsa:
     Identity added: /home/osamu/.ssh/id_rsa (/home/osamu/.ssh/id_rsa)
     $ scp foo [email protected]:foo
      ... no passphrase needed from here on :-)
     $^D
      ... terminating ssh-agent session

对于X服务器,普通Debian启动脚本会将ssh-agent作为一个父进程执行。所以只需执行一次ssh-add即可。

详情参阅ssh-agent(1)ssh-add(1)


9.5.6 问题解决

如果遇到问题,检查一下配置文件的访问权限,并使用“-v”选项运行ssh

如果是root身份,遇到连接防火墙出错的情况,可使用“-P”选项;它规定ssh使用服务器的1–1023以外的端口。

如果与远程站点的ssh连接突然停止工作,很可能是因为系统管理员修补系统造成的,host_key在系统维护过程中被更改。在查明了事情真象并确定并不是有人试图冒充远程主机非法入侵之后,从本地机器的$HOME/.ssh/known_hosts中删除host_key项目就可以恢复连接了。


9.6 邮件程序

邮件系统配置分为三类:


9.6.1 邮件传输代理(Mail transport agent)

想对MTA有一个全面的了解,请使用exim。参阅:

如果你对安全性有高要求的话,唯一一个可替代的MTA是postfix。Debian软件包还提供了sendmailqmail,但并不推荐你使用它们。

有时并不需要MTA的所有功能,如在一个卫星系统中的一台笔记本电脑,可以考虑下列几种轻量级软件包:

此刻,我发现exim对于我作为个人工作站的笔记本电脑再合适不过了。

如果要安装这些软件包必须先删除exim,它们有冲突:

     # dpkg -P --force-depends exim
     # apt-get install nullmailer         # or ssmtp

9.6.1.1 配置Exim的基础知识

为了将exim作为MTA,可按下列步骤进行配置:

     /etc/exim/exim.conf     使用“eximconfig”创建及编辑
     /etc/inetd.conf         注释掉smtp,将exim作为daemon运行
     /etc/email-addresses    添加伪来源地址列表
     检查邮件过滤器可使用exim -brw, -bf, -bF, -bV, ... 等等

9.6.1.2 一个收集不存在的邮件地址的容器(Exim)

/etc/exim/exim.conf文件(Woody或后继版本)的DIRECTORS部分的末尾(localuser:director之后)添加一个catch-all director,将所有前面的director无法解析的地址收集到一起(per Miquel van Smoorenburg):

     catchall:
       driver = smartuser
         new_address = [email protected]

如果要为每个虚拟域指定更精细的处理方法或其它什么的,可在/etc/exim/exim.conf末尾添加(我没仔细测试过):

     *@yourdomain.com ${lookup{$1}lsearch*{/etc/email-addresses} \
             {$value}fail} T

接着在/etc/email-addresses中加上一行“*”。


9.6.1.3 为发出的邮件指定发件人地址(Exim)

可用exim为发出的邮件指定特定的“From:”信头,在/etc/exim/exim.conf文件的末尾编辑:

     *@host1.something.dyndns.org \
       "${if eq {${lookup{$1}lsearch{/etc/passwd}{1}{0}}} {1}  \
        {$0}{[email protected]}}"  frFs

该语句将作用于所有符合*@host1.something.dyndns.org的邮件。

  1. /etc/password中搜索,以确定local part($1)是否为本地用户。
  1. 如果是本地用户,它将用第一个域($0)中的内容重写地址
  1. 如果不是本地用户,重写域部分。

9.6.1.4 在Exim中设置SMTP认证

某些SMTP服务如yahoo.com需要SMTP认证。可用下面的方法配置/etc/exim/exim.conf

     remote_smtp:
       driver = smtp
       authenticate_hosts = smtp.mail.yahoo.com
     ...
     
     smarthost:
       driver = domainlist
       transport = remote_smtp
       route_list = "* smtp.mail.yahoo.com bydns_a"
     ...
     
     plain:
       driver = plaintext
       public_name = PLAIN
       client_send = "^cmatheson3^this_is_my_password"

别忘了最后一行的双引号。


9.6.2 邮件工具(Fetchmail)

fetchmail以daemon方式运行,用ISP提供的POP3帐号将邮件收到本地邮件系统。配置:

     /etc/init.d/fetchmail   
     /etc/rc?.d/???fetchmail run update-rc.d fetchmail default priority 30
     /etc/fetchmailrc        configuration file (chown 600, owned by fetchmail)

在Potato中,有关如何在init.d脚本中配置fetchmail以daemon方式运行的信息,十分混乱,Woody解决了这个问题。参阅example scripts/etc/init.d/fetchmail/etc/fetchmailrc样例文件。

如果你的邮件信头被ISP的邮件工具以^M污染,可在$HOME/.fetchmailrc中添加“stripcr”选项:

     options fetchall no keep stripcr

9.6.3 邮件工具(Procmail)

procmail是一个本地邮件分发过滤程序。使用时,需要为每个使用它的用户创建$HOME/.procmailrc,样例:_procmailrc


9.6.4 邮件用户代理(Mutt)

mutt做用户邮件代理(MUA)与vim结合使用。使用~/.muttrc进行自定义;例如:

     # use visual mode and "gq" to reformat quotes
     set editor="vim -c 'set tw=72 et ft=mail'"
     #
     # header weeding taken from the manual (Sven's Draconian header weeding)
     #
     ignore *
     unignore from: date subject to cc
     unignore user-agent x-mailer
     hdr_order from subject to cc date user-agent x-mailer
     auto_view application/msword
     ....

/etc/mailcap$HOME/.mailcap中添加下列内容,就能显示HTML邮件和内嵌的MS Word附件:

     text/html; lynx -force_html %s; needsterminal;
     application/msword; /usr/bin/antiword '%s'; copiousoutput;
     description="Microsoft Word Text"; nametemplate=%s.doc

9.7 本地化(localization)及国家语言支持

Debian是国际化的操作系统,它所支持的语言和地区惯例的数目正在不断增加。接下来的部分列出了当前Debian对各种差异形式的支持,接着再讨论本地化,该过程负责定制你的工作环境,根据你所选的语言确定当前系统的输入输出方式,并按照你所在地区的惯例转化日期、数字、货币格式以及系统中其它相关方面。


9.7.1 定制基础

定制系统的本地化和国家语言支持包括以下几个方面。


9.7.1.1 键盘

Debian发布版中包含了二十多种键盘布局方案。在Woody中重新配置键盘可使用:


9.7.1.2 日期

绝大多数Debian软件包都能使用non-US-ASCII字符,它们通过glibc中的locale技术,用LC_CTYPE环境变量来操作这些字符。


9.7.1.3 显示

X可以显示包括UTF-8在内的许多编码并支持所有的字体。列表中包含了所有的8-bit字体和16-bit字体诸如中文、日文或韩文。XIM机制支持多字节输入法。参阅双语系统的例子(日本语EUCT和ISO-8859-1), 第 9.7.8 节

kon2软件包可实现在(S)VGA图形化控制台中显示日文EUC编码。另一个替代品是jfbterm,它也使用FB控制台。在控制台环境里,必须由应用程序来提供对日文输入的支持。所以要为Emacs加装egg软件包,可使用日文化的jvim软件包作为Vim环境。


9.7.1.4 翻译

许多在Debian系统中显示的文本信息和文档被翻译成了各种译本,如出错信息、标准程序输出、菜单以及帮助页面。当前Debian支持德语、西班牙语、芬兰语、法语、匈牙利语、意大利语、日语、韩语、波兰语、葡萄牙语、汉语以及俄语帮助页面,可通过安装manpages-LANG软件包实现这些支持(此处LANG代表双位的ISO国家代码。使用apt-cache search manpages-|less获得可用的unix帮助页面列表。)

要访问NLS帮助页面,用户必须将环境变量LC_MESSAGES设置成相应的字串。例如,要访问意大利语的帮助页面,需要将LC_MESSAGES设置成it,这时man程序会在/usr/share/man/it/目录下搜索帮助页面。


9.7.2 Locales

Debian支持locale技术。locale机制允许程序按照该地区惯例来提供输出和其它特殊功能如字符集、日期时间显示格式,货币符号等等。该机制使用环境变量来确定其相关的行为。例如,假设你同时在系统上安装了美式英语和法语locales,许多程序的出错信息都以双语显示:

     $ LANG="en_US" cat foo
     cat: foo: No such file or directory
     $ LANG="de_DE" cat foo
     cat: foo: Datei oder Verzeichnis nicht gefunden

Glibc以函数库的形式向程序提供该功能的支持。参阅locale(7)


9.7.3 激活地区支持能力

Debian并在系统中编译所有可用的locales,检查/usr/lib/locale确定哪个locales(除了默认的“C”)已在系统上编译安装。如果所需的locale并不在其中,有两个解决办法:


9.7.4 激活特定locale

相关的环境变量按如下次序将特定locale值赋给程序:

  1. LANGUAGE:该环境变量由一个用冒号分隔、以优先级排序的地区名称列表组成。仅当POSIX地区值与“C”地区值相异时才使用到它[在Woody中;在Potato版本中通常其优先级高于POSIX locale]。(GNU扩展名)
  1. LC_ALL:如果为非空值,其值将作用于所有locale项目。(POSIX.1)通常为“”(空值)。
  1. LC_*:如果为非空值,其值将作用于相应的locale项目。(POSIX.1)通常为“C”。

    LC_*变量有:

  1. LANG:如果为非空值且LC_ALL也没有定义,则该值作用于所有没有定义的LC_*地区项目。(POSIX.1)通常为“C”。

注意,有些应用程序(例如Netscape 4)忽略LC_*设置。

The locale程序可显示当前激活的地区设置和可用的locale;参阅locale(1)。(注意:locale -a将列出系统已知的所有的locales;这并代表它们都已在系统中编译了!参阅激活地区支持能力, 第 9.7.3 节。)


9.7.5 ISO 8601日期格式

名为en_DK(丹麦英语)的locale提供了对国际标准日期格式yyyy-mm-dd(ISO 8601日期格式)的支持(听起来有点搞笑:-))。它仅工作于ls的控制台屏幕。


9.7.6 US(ISO-8859-1)例子

将下列语句添加到~/.bash_profile

     LC_CTYPE=en_US.ISO-8859-1
     export LC_CTYPE

9.7.7 带euro符号的France(ISO-8859-15)的例子

将下列语句添加到~/.bash_profile

     LANG=fr_FR@euro
     export LANG
     LC_CTYPE=fr_FR@euro
     export LC_CTYPE

键盘, 第 9.7.1.1 节中描述的方法,将键盘设置成French "AZERTY"。安装manpages-fr包添加法语帮助页面。US中的Right-Alt键在Europe中称为Alt-Gr,它与其它键组成的组合键可用于输出大量特殊字符,例如Alt-Gr+E可以输出欧元符号。

可使用类似的方法配置绝大多数西欧语言环境。

参阅Debian Euro HOWTO了解有关对新欧洲货币方面的支持,有关对法语环境的支持请参阅Utiliser et configurer Debian pour le français


9.7.8 双语系统的例子(日本语EUCT和ISO-8859-1)

让我们来创建一个双语系统:在X环境里使用ja_JP.eucJP (Japanese EUC,传统的Unix日语环境)它具有英文消息和ISO类型的日期,在Linux控制台环境使用en_US.ISO-8859-1(almost ASCII with accented character support)。 in Linux console.

亦可参阅SuSE pages for CJK


9.7.9 X下UTF-8的例子

将来每个人都要用到它。参阅The Unicode HOWTO


9.7.10 FB控制台下UTF-8的例子

debian-installerbterm提供了在FB控制台对UTF-8的支持。


9.7.11 超越locale

当你第一次在系统上安装“国家语言环境”(national language environment)时,请注意使用taskselaptitude查看一下,在选择相关语言环境任务项时都有哪些软件包被选上了,这些选择信息非常有用特别是进行多语言设置时。如果遇到某些关联包与运行良好的系统上的某些软件发生冲突,就不要安装那些引起冲突的包。由于新装的软件比原来的软件具有更高的优先级,所以必须用update-alternative结合有关命令让系统恢复到原来状态。

大部分较新的使用glibc2.2的程序都已支持国际化了。所以不必再为诸如基于VIM的jvim等程序指定loclae,因为X下的vim 6.0版已提供了该功能。事实上,比起另一个版本它显得有点粗糙,jvim有个版本直接将日文IM(canna)支持编译进去了,而且还集成了大量成熟的日文特性,很值得你期待:-)

有时为了获得更好的工作环境,仅通过locale来配置程序是不够的。language-env软件包和set-language-env命令可以大大简化你的工作。

亦可参阅有关国际化的文档Introduction to i18n,虽然其目标读者为开发人员但对系统管理员也十分有用。


[ 上一页 ] [ 目录 ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ 15 ] [ A ] [ 下一页 ]

Debian 参考手册

CVS, 星期二 八月 17 00:35:13 UTC 2004

Osamu Aoki [email protected]
Translator: Hao "Lyoo" Liu [email protected]
作者, 第 A.1 节