本章讲述了基本的基于文本界面的系统配置方法。在学习本章前请先阅读Debian系统安装提示, 第 3 章.
如是你很关心安全方面的信息,强烈推荐你阅读Securing Debian
Manual
,它位于harden-doc
软件包。
参阅init程序, 第 2.4.1 节了解有关Debian init脚本的基础知识。
Debian使用sys-V
init脚本系统。尽管/etc/init.d/*
下所有的init脚本均被登记为conffile,系统管理员可以自由地修改它们,但编辑/etc/default/*
下的文件却是创建自定义init脚本的更好的方法。
例如,/etc/init.d/rcS
可用来定制motd
、sulogin
等为默认启动。
可通过/etc/syslog.conf
配置系统日志记录方式。如果想为日志文件上色可安装colorize
软件包。参阅syslogd(8)
和syslog.conf(5)
。
有一部分硬件优化的配置工作Debian留给了系统管理员来掌握。
hdparm
hdparm(8)
。
setcd
setcd(1)
。
setserial
scsitools
memtest86
hwtools
schedutils
taskset
、irqset
、lsrt
和rt
。
nice
和renice
(不包括在工具包内),就可对进程的日程安排进行全面的管理。
使用noatime选项挂载文件系统可有效提高文件的读取速度。参阅fstab(5)
和mount(8)
。
通过proc文件系统,Linux内核可直接调节某些硬件参数。参阅通过proc文件系统调整内核, 第 7.3 节。
Debian中有许多专门的硬件配置工具包。它们中有不少是针对笔记本电脑的。这儿有一些有趣的软件包:
tpconfig
- 一个配置触摸屏设备的程序
apmd
- 高级电源管理(APM)工具
acpi
- 显示ACPI设备信息
acpid
- ACPI使用工具
lphdisk
- 识别Phoenix NoteBIOS下的隐藏分区。
sleepd
- 笔记本电脑处于非工作状态时进入休眠
noflushd
- 让空闲硬盘进入减速状态
big-cursor
- X下的巨型鼠标指针
acme
- 激活笔记本电脑上的“多媒体按钮”
tpctl
- IBM ThinkPad硬件配置工具
mwavem
- Mwave/ACP modem支持
toshset
- 访问大部分Toshiba笔记本电脑的硬件接口
toshutils
- Toshiba笔记本电脑工具集
sjog
- 激活Sony Vaio笔记本电脑上“Jog Dial”功能的程序
spicctrl
- Sony Vaio控制器程序可增亮LCD背光
在此,ACPI是一种比APM更新式的电源管理系统。
某些软件包需要专门的内核模块。它们已经包含在许多最新的内核源码中。如果遇以问题,则需要手动打上最新的内核补丁。
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
该方法亦可用于xdm
、gdm
,实现无密码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》。
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
一些有趣的用户组:
pam_wheel.so
不带任何group=参数,root
group就是su
默认的wheel group。
/usr/src
目录下的文件。它可以在本地赋予某个用户管理系统源代码的权限。
/usr/local
下工作并且可以在/home
下创建目录。
完整列表参阅Securing Debian
Manual
的“FAQ”章节,亦见于Woody中的harden-doc
软件包。新的base-passwd
(>3.4.6)软件包亦包含了权威列表:/usr/share/doc/base-passwd/users-and-groups.html
。
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
软件包。
对于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
。
参阅:
OpenLDAP
openldap-guide
package
LDAP Linux
HOWTO
LDAP
Implementation HOWTO
OpenLDAP,
extensive use reports
Open LDAP
with Courier IMAP and Postfix
ATAPI/IDE接口的刻录机是时下非常流行的配件,它是极好的系统备份工具,特别是对于那些单个文件容量一般<
640 MB的家庭用户。更多权威的信息,请参阅LDP CD-Writing-HOWTO
。
首先需要说明的是,在向刻录机发送数据过程中,任何数据中断都会对光盘造成无法挽回的损坏。所以应选购缓冲区尽可能大的刻录机。如果资金充裕,就别再考虑ATAPI/IDE型的,买台SCSI型的没错。如果可以连接IDE接口,就使用PCI总线(例如,在主板上)而别用ISA总线(SB16声卡就使用它)。
当刻录机连接到IDE,驱动它的通常是IDE-SCSI驱动而非旧式的IDE CD驱动,所以,需要激活SCSI通用驱动。有两种方法激活它,假设系统使用的是较新版本的内核(如2001年三月的版本)。
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
Debian用make-kpkg
创建新内核,使用make-kpkg时加上新的--append_to_version参数可创建多重内核镜像。参阅Debian下的Linux内核, 第 7 章。
make menuconfig后执行下列步骤:
下列步骤可让系统在启动时激活内核对刻录机的支持:
# 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-scsi和ide-cd可能会产生冲突,请试试在/etc/modutils/aliases
中加上下面的内容,然后运行update-modules
并重启系统。
pre-install ide-scsi modprobe ide-cd
上述指令指示系统在加载ide-scsi前先加载IDE驱动。IDE驱动ide-cd接管所有ATAPI CD-ROM——对指明忽略的设备除外。剩下的设备才由ide-scsi来管理。
将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
首先进行设备测试(假设是双倍数刻录)
# 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
参数可时也要做一些调整。
某些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))
有关Debian CDs的最新信息,请浏览Debian CD site
。
如果有较快的Internet连接,可考虑用下面的引导方法从网络安装系统:
如果没有较快的Internet连接,可考虑从光盘出售商
处购买安装光盘。
请不要浪费带宽来下载标准光盘镜像(即使是使用新的jigdo方式),除非你是光盘镜像测试员。
有一个很有名的光盘镜像KNOPPIX - Live Linux
Filesystem On
CD
。该光盘可以启动一个全功能的Debian系统而且不需要在硬盘上安装。
想要将重要的配置文件和数据备份到CD-R,可使用backup
中的“backup”脚本。亦可参阅差异备份与数据同步, 第 8.4 节。
我没测试过:
# 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
与拷贝不同(如没有数据间隙,等...)
X环境由Xfree86
提供。Debian系统中X服务器有两个主要版本:Xfree86
Version 3.3 (XF3)和XFree86 Version 4.x series (XF4),它们都是基于X.ORG
制定X11R6标准的。
想了解X的基础知识,可参阅X(7)
,LDP XWindow-User-HOWTO
和Remote X Apps
mini-HOWTO
。对Debian
用户专门的指南,可阅读xfree86-common
软件包中提供的/usr/share/doc/xfree86-common/FAQ.gz
,其中Branden
Robinson有一些有趣并且权威的对key binding的讨论。
这正好将常规的“服务器”和“客户机”关系倒转过来。
有几种途径让“X server”(显示端)接收远程“X client”(应用端)的连接请求:
xhost
方式
xhost
, 第 9.4.7
节和xhost(1x)
。
xauth
方式
xhost
强点)。
ssh -X
低。
xauth(1x)
。
xdm
, wdm
, gdm
, kdm
, ...
methods
xauth
一样不安全)
xdm(1x)
和Xsecurity(7)
获得更多有关X显示访问控制的基础知识
wdm(1x)
、gdm(8)
和kdm.options(5)
获得更多信息,当然先得装上它们。
init
文件和运行级别, 第 6.5.4
节了解如何在不删除xdm
包的情况下禁用它,使系统启动到控制台。
ssh -X
方式
ssh
, 第 9.4.8 节。
除了ssh
,所有的远程连接方式,都需要X服务器开启TCP/IP连接。参阅X的TCP/IP连接, 第 9.4.6 节。
在Woody中提供了下列几个软件包来简化X系统的安装。
x-window-system-core
xserver-xfree86
、一套字体、一组基本的X客户端及工具。
x-window-system
x-window-system-core
、twm
和xdm
等组件,故安装了它就不用再安装x-window-system-core
了。)
xserver-common-v3
xserver-*
xserver-common-v3
的。)
大多数情况下,应该安装x-window-system
(如果要通过控制台登录,需禁用xdm
,具体方法参阅“我不想直接启动到X!”, 第 8.1.4
节。)
在安装X系统之前安装下列软件包,就能在X配置阶段实现硬件侦测:
discover
— 硬件识别系统。
mdetect
— 鼠标自动侦测工具。
read-edid
— VESA PnP监视器硬件信息收集工具。
有关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
(重新)配置XF4服务器,
# dpkg-reconfigure --priority=low xserver-common # dpkg-reconfigure --priority=low xserver-xfree86
该命令会生成/etc/X11/XF86Config-4
文件并调用dexconf
脚本来配置X。
(重新)配置XF3服务器,
# dpkg-reconfigure --priority=low xserver-common-v3 # dpkg-reconfigure --priority=low xserver-mach64
该命令会生成/etc/X11/XF86Config
文件并调用xf86config-v3
脚本来配置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
绝大多数X客户端程序都可以用类似下面的命令启动:
client $ xterm -geometry 80x24+30+200 -fn 6x10 -display hostname:0 &
命令行中各参数的含义如下:
/tmp/.X11-unix/XD
(故只能从主机访问它)。
默认的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
而该方法仅作为最后的手段使用。
X会话(X服务器+X客户机)可使用下列方法启动:
startx
:initx
的脚本化命令(wrapper script
command),负责从Linux字符型控制台启动X服务器和客户机。如果~/.xinitrc
文件不存在,/etc/X11/xinit/xinitrc
会调用并执行/etc/X11/Xsession
。
xdm
、gdm
、kdm
或wdm
:X显示管理器守护进程,负责启动X服务器和客户机,并管理来自GUI屏幕的登录行为。直接执行/etc/X11/Xsession
。
想使用控制台参阅“我不想直接启动到X!”, 第 8.1.4 节。
默认的启动脚本/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
命令执行系统中按下面的次序排序,排在第一位的程序:
~/.xsession
or ~/.Xsession
,如果它被定义。
/usr/bin/x-session-manager
,如果它被定义。
/usr/bin/x-window-manager
,如果它被定义。
/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-session
和kdebase
软件包包含了那些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)
。
遵循自定义X会话, 第 9.4.5.1
节中描述的原则,要激活用户特定的X会话/窗口管理器,需要安装相应的软件包并在~/.xsession
文件末尾添加如下内容(我爱用blackbox
/fluxbox
,它简单快捷。):
gnome-session
kdebase
(or kdebase3
for KDE3)
blackbox
fluxbox
xfce
icewm
fvwm
wmaker
enlightenment
要配置完整的KDE/GNOME环境,下列的综合包很有用:
kde
软件包
gnome
软件包
请使用能操作recommends类软件包的安装工具安装这些软件包,如dselect
和aptitude
,比起apt-get
它们能提供更丰富的软件供你选择。
如果想从控制台登录,必须禁用X显示管理器,例如kdm
、gdm
和wdm
这会牵扯到一些关联问题,有关信息参阅“我不想直接启动到X!”, 第 8.1.4
节。
如果想将系统的默认环境由KDE换成GNOME,请用自选命令, 第 6.5.3
节中所述的方法配置x-session-manager
。
由于不加密的远程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的监听。
xhost
xhost
允许通过主机名访问。该方式极不安全。下面的方法将关闭主机验证功能,只要TCP/IP套接字连接功能是打开的(参阅X的TCP/IP连接, 第 9.4.6
节)本机就会接收来自任何地方的连接请求。
$ xhost +
要重新打开主机验证功能可执行:
$ xhost -
xhost
无法区分远程主机上不同的用户,而且远程连接的主机名(实际上是地址)也可以是伪造的。
如果处于一个不可信的网络环境(例如通过PPP拔号连接到Internet),即使在网络中成为主机受到一定标准的限制,也应尽量避免使用该连接方式。参阅xhost(1x)
。
ssh
使用ssh
可以在本地主机和远程应用服务器之间建立一个安全的连接通道。
/etc/ssh/sshd_config
文件中,打开X11Forwarding和AllowTcpForwarding选项。
xterm
进程。
ssh
建立与远程站点的连接。
localname @ localhost $ ssh -q -X -l loginname remotehost.domain Password: .....
loginname @ remotehost $ gimp &
该连接方式使得远程X客户机上的屏幕输出,看上去就好象是通过本地UNIX域套接字的方式连接到服务器的客户机输出。
xterm
学习xterm
可以去http://dickey.his.com/xterm/xterm.faq.html
。
许多老式的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
如果运行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
文件。
还有一些用于该目的的专用软件包:kdesu
、gksu
、gksudo
、gnome-sudo
和xsu
。其它方法也可以达到同样的目的:如在/root/.Xauthority
和相应用户文件之间创建一个符号链接;使用sux
脚本;或对root初始化脚本执行“xauth
merge ~USER_RUNNING_X/.Xauthority”。
更多方法参阅debian-devel
mailing list
。
XFree86-4中标准的xfs
能完美地驱动TrueType字体,如果你使用的是XFree86-3,就得安装第三方字体服务器如xfs-xtt
。
不论什么应用程序,如果要使用TrueType字体,就要与libXft或libfreetype建立链接(如果你使用的是已编译好的.deb包,就不用在这方面操心了)。
要记得安装所需的字体文件并生成fonts.{scale,dir}
文件,这样字体才能被检索使用。
由于供自由使用的字体有时很有限,Debian用户也可以安装或共享某些商业TrueType字体。为了简化安装这类字体的工序,于是产生了一些方便的软件包:
ttf-commercial
msttcorefonts (>1.1.0)
(Woody中的软件包,因为Microsoft网站中的一些变故,2002年8月就不再使用了。)
请慎重选择TT字体,以免自由系统受到不自由字体的污染。
Woody发布版中包含了下面这些拥有图形处理能力的网页浏览器:
mozilla
The Mozilla browser (new)
galeon
Mozilla-based browser with a Gnome UI (new)
konqueror
KDE browser
dillo
GTK browser
amaya-gtk
W3C reference browser
amaya-lesstif
W3C reference browser
netscape-...
(many, old)
communicator-...
(many, old)
galeon需要有与其版本相匹配的特定版本的mozilla
才能运行。虽然它们的UI不同,但都使用的是同一个HTML解释引擎Gecko。
安装诸如mozilla
、galeon
浏览器的plug-ins,可手工将“*.so”装到plug-in目录下,然后重启浏览器。
Plug-in资源:
http://java.sun.com
.
http://www.macromedia.com/software/flashplayer/
.
freewrl
: VRML browser and Netscape plugin
SSH(Secure SHell)是在Internet中建立连接的安全途径。OpenSSH是一个自由的SSH实现软件,它包含在Debian的ssh软件包中。
首次安装OpenSSH服务器和客户机。
# apt-get update && apt-get install ssh
安装时需要打开/etc/apt/source.list
中的non-US链接。要运行OpenSSH服务器,还得屏蔽掉/etc/ssh/sshd_not_to_be_run
。
SSH有两个验证协议:
.rhosts
或/etc/hosts.equiv
验证与公共密匙客户端主机验证相结合(有缺陷)
如果系统正迁移到Woody或使用非Debian系统,请注意版本差异。
更多信息请参阅/usr/share/doc/ssh/README.Debian.gz
、ssh(1)
、sshd(8)
、ssh-agent(1)
和ssh-keygen(1)
。
下面是一些关键的配置文件:
/etc/ssh/ssh_config
:默认的SSH客户机。参阅ssh(1)
。其中重要的项目有:
/etc/ssh/sshd_config
:默认的SSH服务器。参阅ssshd(8)
。其中重要的项目有:
sshd
监听的本地地址。允许多重指定。
$HOME/.ssh/authorized_keys
:默认公共密匙列表,客户机可使用这些密匙连接本主机的该用户帐号。参阅ssh-keygen(1)
。
$HOME/.ssh/identity
:参阅ssh-add(1)
和ssh-agent(1)
。
下面的操作将从客户机建立一个ssh
连接。
$ ssh username@hostname.domain.ext $ ssh -1 username@hostname.domain.ext # 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 ^])。
在本地机器上执行下面的命令,可以建立一个连接本地主机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。
使用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
文件中设置HostbasedAuthentication为yes。
下面是其它一些非类Unix平台的免费SSH客户端。
puTTY
(GPL)
cygwin
(GPL)
macSSH
(GPL) [注意Mac OS
X包含OpenSSH;在终端应用程序中使用ssh]
参阅SourceForge.net的站点文档
,“6.
CVS Instructions”。
使用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 user@remote.host:foo ... no passphrase needed from here on :-) $^D ... terminating ssh-agent session
对于X服务器,普通Debian启动脚本会将ssh-agent
作为一个父进程执行。所以只需执行一次ssh-add
即可。
详情参阅ssh-agent(1)
和ssh-add(1)
。
如果遇到问题,检查一下配置文件的访问权限,并使用“-v”选项运行ssh
。
如果是root身份,遇到连接防火墙出错的情况,可使用“-P”选项;它规定ssh使用服务器的1–1023以外的端口。
如果与远程站点的ssh
连接突然停止工作,很可能是因为系统管理员修补系统造成的,host_key
在系统维护过程中被更改。在查明了事情真象并确定并不是有人试图冒充远程主机非法入侵之后,从本地机器的$HOME/.ssh/known_hosts
中删除host_key
项目就可以恢复连接了。
邮件系统配置分为三类:
exim
, postfix
,
sendmail
, qmail
, ssmtp
,
nullmailer
, ...
procmail
, fetchmail
, mailx
,
...
mutt
, emacs
+gnus
,
想对MTA有一个全面的了解,请使用exim
。参阅:
exim-doc
和exim-doc-html
软件包
http://www.exim.org/
如果你对安全性有高要求的话,唯一一个可替代的MTA是postfix
。Debian软件包还提供了sendmail
和qmail
,但并不推荐你使用它们。
有时并不需要MTA的所有功能,如在一个卫星系统中的一台笔记本电脑,可以考虑下列几种轻量级软件包:
ssmtp
:需要SMTP连接并支持别名功能,或者
nullmailer
:可以存信但不支持别名。
此刻,我发现exim
对于我作为个人工作站的笔记本电脑再合适不过了。
如果要安装这些软件包必须先删除exim
,它们有冲突:
# dpkg -P --force-depends exim # apt-get install nullmailer # or ssmtp
为了将exim
作为MTA,可按下列步骤进行配置:
/etc/exim/exim.conf 使用“eximconfig”创建及编辑 /etc/inetd.conf 注释掉smtp,将exim作为daemon运行 /etc/email-addresses 添加伪来源地址列表 检查邮件过滤器可使用exim -brw, -bf, -bF, -bV, ... 等等
在/etc/exim/exim.conf
文件(Woody或后继版本)的DIRECTORS部分的末尾(localuser:director之后)添加一个catch-all
director,将所有前面的director无法解析的地址收集到一起(per Miquel van
Smoorenburg):
catchall: driver = smartuser new_address = webmaster@mydomain.com
如果要为每个虚拟域指定更精细的处理方法或其它什么的,可在/etc/exim/exim.conf
末尾添加(我没仔细测试过):
*@yourdomain.com ${lookup{$1}lsearch*{/etc/email-addresses} \ {$value}fail} T
接着在/etc/email-addresses
中加上一行“*”。
可用exim
为发出的邮件指定特定的“From:”信头,在/etc/exim/exim.conf
文件的末尾编辑:
*@host1.something.dyndns.org \ "${if eq {${lookup{$1}lsearch{/etc/passwd}{1}{0}}} {1} \ {$0}{$1@somethig.dyndns.org}}" frFs
该语句将作用于所有符合*@host1.something.dyndns.org的邮件。
/etc/password
中搜索,以确定local part($1)是否为本地用户。
某些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"
别忘了最后一行的双引号。
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
procmail
是一个本地邮件分发过滤程序。使用时,需要为每个使用它的用户创建$HOME/.procmailrc
,样例:_procmailrc
。
用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
Debian是国际化的操作系统,它所支持的语言和地区惯例的数目正在不断增加。接下来的部分列出了当前Debian对各种差异形式的支持,接着再讨论本地化,该过程负责定制你的工作环境,根据你所选的语言确定当前系统的输入输出方式,并按照你所在地区的惯例转化日期、数字、货币格式以及系统中其它相关方面。
定制系统的本地化和国家语言支持包括以下几个方面。
Debian发布版中包含了二十多种键盘布局方案。在Woody中重新配置键盘可使用:
绝大多数Debian软件包都能使用non-US-ASCII字符,它们通过glibc中的locale技术,用LC_CTYPE环境变量来操作这些字符。
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环境。
许多在Debian系统中显示的文本信息和文档被翻译成了各种译本,如出错信息、标准程序输出、菜单以及帮助页面。当前Debian支持德语、西班牙语、芬兰语、法语、匈牙利语、意大利语、日语、韩语、波兰语、葡萄牙语、汉语以及俄语帮助页面,可通过安装manpages-LANG软件包实现这些支持(此处LANG代表双位的ISO国家代码。使用apt-cache search manpages-|less获得可用的unix帮助页面列表。)
要访问NLS帮助页面,用户必须将环境变量LC_MESSAGES设置成相应的字串。例如,要访问意大利语的帮助页面,需要将LC_MESSAGES设置成it,这时man
程序会在/usr/share/man/it/
目录下搜索帮助页面。
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)
。
Debian并不在系统中编译所有可用的locales,检查/usr/lib/locale
确定哪个locales(除了默认的“C”)已在系统上编译安装。如果所需的locale并不在其中,有两个解决办法:
/etc/locale.gen
添加需要的locale,然后以root身份运行locale-gen
编译它。参阅locale-gen(8)
以及该帮助页面中“SEE
ALSO”一节所列的命令。
locales
软件包。如果还没有安装locales,locales安装程序会调出debconf界面让你选择所需的locales并编译相关数据库。
相关的环境变量按如下次序将特定locale值赋给程序:
LC_*变量有:
注意,有些应用程序(例如Netscape 4)忽略LC_*设置。
The
locale
程序可显示当前激活的地区设置和可用的locale;参阅locale(1)
。(注意:locale
-a将列出系统已知的所有的locales;这并不代表它们都已在系统中编译了!参阅激活地区支持能力, 第 9.7.3 节。)
名为en_DK(丹麦英语)的locale提供了对国际标准日期格式yyyy-mm-dd(ISO
8601日期格式)的支持(听起来有点搞笑:-))。它仅工作于ls
的控制台屏幕。
将下列语句添加到~/.bash_profile
:
LC_CTYPE=en_US.ISO-8859-1 export LC_CTYPE
将下列语句添加到~/.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
。
让我们来创建一个双语系统:在X环境里使用ja_JP.eucJP (Japanese EUC,传统的Unix日语环境)它具有英文消息和ISO类型的日期,在Linux控制台环境使用en_US.ISO-8859-1(almost ASCII with accented character support)。 in Linux console.
canna
— Local server (free bear license),或
freewnn-jserver
— Network-extensible server (Public Domain)
kinput2-canna
— for X, or
kinput2-canna-wnn
— for X, and
egg
— directly works with Emacsen even in console (optional)
kterm
— X (classic),
mlterm
— X (very neat, variable font size), and
startx
、xdm
...)
~/.xsession
,用户可通过配置它来指定X环境:
#!/bin/sh # This makes X work when I su to root. if [ -z "$XAUTHORITY" ]; then XAUTHORITY=$HOME/.Xauthority export XAUTHORITY fi # Japanese locale as default, C locale as backup # export LANG=ja_JP.eucJP # make sure to over write en_US.ISO-8859-1 used in console #export LC_CTYPE=ja_JP.eucJP # I want menu message to be English in ASCII :-) export LC_MESSAGES=C # activate input method kinput2 & XMODIFIERS=@im=kinput2 export XMODIFIERS # How about blackbox window manager (lightweight) exec /usr/bin/blackbox
~/.bashrc
中添加如下几行:
# Change language environment depending on the console program # X-shells only execute .bashrc (They are not login shell) # General environment for X is set by .xsession if [ $TERM = kterm ] || [ $TERM = mlterm ]; then unset LC_ALL export LANG=C #export LANG=ja_JP.eucJP # For ISO yyyy-mm-dd date display, more natural for Japanese :-) export LC_TIME=en_DK.ISO-8859-1 export LC_MESSAGES=C export LANGUAGE=ja_JP.eucJP:en_US.ISO-8859-1:C export LC_CTYPE=ja_JP.eucJP else unset LC_ALL export LANG=C export LC_TIME=en_DK.ISO-8859-1 export LANGUAGE=en_US.ISO-8859-1:C export LC_CTYPE=en_US.ISO-8859-1 fi
~/.muttrc
中添加如下几行:
# UTF-8 support is not popular in popular Japanese EMACS environment # 7 bit encoding of iso-2022-jp is easier for everyone # default encoding order = us-ascii --> iso-8859-1 --> utf-8 #set send_charset="us-ascii:iso-8859-1:utf-8" #set allow_8bit=yes set send_charset="us-ascii:iso-8859-1:iso-2022-jp" set allow_8bit=no
kinput2
for X应用程序
~/.Xresources
(不知何故,看上去Debian好象在自动配置它)添加*inputMethod:
kinput2。
mlterm
)也允许设置*inputMethod:和其它运行时的动态信息(在mlterm
中按下Ctrl-MouseButton-3)。
亦可参阅SuSE
pages for CJK
。
将来每个人都要用到它。参阅The Unicode
HOWTO
。
在debian-installer
中bterm
提供了在FB控制台对UTF-8的支持。
当你第一次在系统上安装“国家语言环境”(national language
environment)时,请注意使用tasksel
或aptitude
查看一下,在选择相关语言环境任务项时都有哪些软件包被选上了,这些选择信息非常有用特别是进行多语言设置时。如果遇到某些关联包与运行良好的系统上的某些软件发生冲突,就不要安装那些引起冲突的包。由于新装的软件比原来的软件具有更高的优先级,所以必须用update-alternative
结合有关命令让系统恢复到原来状态。
大部分较新的使用glibc2.2的程序都已支持国际化了。所以不必再为诸如基于VIM的jvim
等程序指定loclae,因为X下的vim
6.0版已提供了该功能。事实上,比起另一个版本它显得有点粗糙,jvim
有个版本直接将日文IM(canna
)支持编译进去了,而且还集成了大量成熟的日文特性,很值得你期待:-)
有时为了获得更好的工作环境,仅通过locale来配置程序是不够的。language-env
软件包和set-language-env
命令可以大大简化你的工作。
亦可参阅有关国际化的文档Introduction to
i18n
,虽然其目标读者为开发人员但对系统管理员也十分有用。
Debian 参考手册
CVS, 星期一 四月 3 22:58:51 UTC 2005osamu@debian.org
iamlyoo@163.net