快速成为Linux系统的管理员 (二)

/ns/wz/sys/data/20020821013643.htm




/etc/fastboot : 这个档案是使用 shutdown -f 所产生的 , -f means "fastboot"
在重新 reboot 之後 , 系统会去检查这个档是否存在 , 以决定
是否要 run fsck .

/etc/fdprm : floopy disk parameter table . 一般情况下是不须要更动的 , 除非
你有很奇怪格式的软碟 , 或者你想做出不符合一般格式的磁碟片 .

/etc/nologin : 你也许会感到奇怪 , 我的 /etc 这个 directory 下并没有这个档啊?
没错 , 它平常是不存在的 , 通常会看到这个档的话 , 那表示系统大
概要 shutdown 了 , 因为系统要 shutdown 了 , 自然不希望有人又
login 进来 , 所以在我们执行 shutdown 时 , nologin 这个档会自动
的被 create , 里面放著 shutdown message . 实际上 , 当我们在
login 时 , 系统会去检查有没有这个档 , 假如有的话 , 那就会印出
这个档案中的 message , 然後不让你 login .
nologin 也有可能是为了某种理由被制造的 , 比如说系统在 maintain
暂时不希望有人 login . 无论如何 nologin 若存在 , 就不能 login

/etc/fstab : 记录开机要 mount 上来的 filesystem, 这个档案相当重要! 各位可以
在 /etc/rc.d/rc.S 中找到 /sbin/mount -avt nonfs 这一列, 当执行
到这一列时, mount 就依据 /etc/fstab 中的记载, 自动的将档案系统
mount 上来. 下面就是一个颇为典型的□例. 假如你一开机就想自动
mount 一些 filesystems, 而不要等到开机後再以手动 mount 的话那把
这些 filesystems 及相关资讯写在这个档, 是不错的选择. 在档案格式
方面, 每一列有六个栏位, 不过後面两个栏位常被省略所以我们只看到
有四个栏位. 其它的两栏分别为 dump-freq 及 pass-number.
dump-freq 预设值为 0; 而 pass-number 是 fsck 所会参考到的地方,
数字可为 0,1,2...... 1 表示这个 filesystem 将首先被 fsck check,
2 表其次, 馀类推......

# 要挂上的档案系统 挂在那里 档案系统格式 读写状况
/dev/hdb2 swap swap defaults
/dev/hdb1 / ext2 defaults
/dev/sbpcd /mnt/cdrom iso9660 ro
/dev/hda1 /mnt/dosc msdos rw
/dev/hda5 /mnt/dosd msdos rw
/dev/hda6 /mnt/dose msdos rw
none /proc proc defaults

/etc/ftpusers : 这个档案记录那些人不可以 ftp 签入系统 , 预设值有 root , uucp
news . 这些都是为了 security 方面的考量 , 你可以在这里加入
不可 ftp 进来的 user id .

/etc/gateways : 顾名思义 , 这个档案记录一些 gateways 的 information
这个档案的格式如下 :

name1 gateway name2 metric value

当 routed 启动时, 它会去读 /etc/gateways 这个档. 若一个 gateway
并不做 routing information 交换的话, 那它就会被标示成 passive,
假如有做 routing information 的交换 ( 这台机器上有 run routed )
, 那就会标示成 active net 或 host 这个关键字是指出 route 是到网
路或是到一台特定的机器上. name1 就是目地网路或目地机器的名字.
这个名字可用 /etc/hosts 或是 /etc/networks 中的 symbolic host
name. name2 就是讯息将被送往之 gateway 的 name 或 IP address.

/etc/group : 如同 /etc/passwd 列出了系统中所有的使用者名字 , /etc/group
定义系统中所有的 group name 与相关讯息 .
格式为: group_nameasswd:GID:user_list

如 : author::200:jhhsu,emotion,passion

上面的例子表示 jhhsu,emotion,passion 都是属於 author 这个 group
通常 passwd 那栏是空白的 , 表示不用密码 . 或放一个 * 号
以下也是一个典型的例子 :

root::0:root,jhhsu
bin::1:root,bin,daemon
daemon::2:root,bin,daemon
sys::3:root,bin,adm
adm::4:root,adm,daemon
tty::5:
disk::6:root,adm
lp::7:lp
mem::8:
kmem::9:
wheel::10:root,jhhsu
shadow::11:root
mail::12:mail
news::13:news
uucp::14:uucp
man::15:man
users::100:games
bbs:*:99:bbs,bbsuser,bbsroot

当然啦 ! 这个档案只能为 superuser 所读写 , 一个 superuser 可使
用 groupadd , groupdel , groupmod 来管理 /etc/group 这个档 ,
要手动管理也是可以 . 下面是这三个指令的用法 :

groupadd [ -g gid [ -o ] ] group_name
groupdel group_name
groupmod [ -g gid [ -o ] ] [ -n new_group_name ] group_name

/etc/hosts : 这个档案记录著 IP address 至 hostname 的 mapping . 如我们想把
bbs.xmu.edu.cn 取个别名叫 : xmbbs
那我们就可以在这个档案里写如下的叙述 :

210.34.0.13 xmbbs

如此一来 , 以後我们 telnet xmbbs 就等於 telnet
210.34.0.13

在这个档案中 , 至少会有两列 , 一列为 loopback , 这是为了侦错目的
而设的 , 另一列为 local host , 就是你自己的机器 .

/etc/hosts.equiv : 在里面可以设定一些 remote machine , 而从这些 remote
machine 利用 rsh 或 rlogin 连回 local machine 的话
便不用输入密码
同样的东西也可以在 .rhosts 见到 . 比如说在 host1.price.xm.fj.cn
上你的 Home Directory 建一个 .rhosts 档 ,
里面的内容如下:

host2.price.xm.fj.cn jhhsu

以後只要在 host2.price.xm.fj.cn 上利用 rsh 或 rlogin 至
host1.price.xm.fj.cn 的话 , 也不须要输入密码
rsh -l jhhsu host1.price.xm.fj.cn <-- 不须密码
不过这东西最好不要乱设 , 以信得过的 hosts 为主 ,
才不会造成 security 上的困扰 .

/etc/hosts.deny : 设定那些 remote hosts 不可以使用 inetd
/etc/hosts.allow : 设定那些 remote hosts 可以使用 inetd
至於 inetd 有那些 service , 各位可以去看看 /etc/inetd.conf
从里面就可以很清楚的可以看得出来 .
假如你采取比较 close 作法的话 , 可以在 hosts.deny 中写

ALL:ALL

但是如此一来 , 只要不是从 localhost 来的 , 那大概都不必
玩了 , 所以 , 我们也要适时的在 hosts.allow 中加入可以
access 的 hosts , 如 :

ALL:140.113.17. <-- 只要从 140.113.17.X 都可以 access
ALL:140.113.4.
ALL:140.113.6.

/etc/hosts.lpd : 记录可 access printer 的 hosts . 假如一台 printer可被网路上
的许多台主机所共用, 那 printcap 这个档案必须得描述完整的网
路设定资讯. 在比较严密控制的情况下, 有两个条件必须符合首先,
local machine 必须在 remote machine 的 /etc/hosts.eqiuv 中,
或者, 在 remote machine 的 /etc/hosts.lpd 中被记载第二, 使
用者必须有 remote machine 的帐号.

/etc/inetd.pid : inetd process id

/etc/issue : 这个档案被记录著 login prompt 前所要 echo 的 message , 特别要注
意的是 /etc/rc.d/rc.S
下面的四行若没有 mark , 则每次开机 issue 及 motd 都会被改变
假如你要有自己的设定 , 下面一定都要 mark 起来如下 :
#echo > /etc/issue
#echo Welcome to Linux /bin/uname -a | /bin/cut -d\ -f3. >> /etc/issue
#echo >> /etc/issue
#echo "/bin/uname -a | /bin/cut -d\ -f1,3. (Posix)." > /etc/motd

/etc/klogd.pid : klogd process id

/etc/ld.so.conf : 记录一些 library 所在的目录

/etc/magic : 初看这个档案时 , 也许只能隐隐约约的看到 : 这个档案似乎是描述一些
档案的格式. 没错, 这个档案记载了许多档案格式的识别字串或方法那
这个档在那里会用的到呢? 各位有使用过 file 这个指令吗? file 这个
指令的命令格式为:

file [ -c ] [ -z ] [ -L ] [ -f namefile ] [ -m magicfile ] file

file 这个指令非常有趣, 它可以告诉你某一个档案的格式, 如它是一个
text 档, 或是一个 shell script 或 DOS 可执行档等...... 而 file
这个指令, 就是去参考 /etc/magic 这个资料库. 假如你知道某一档案
的识别字, 而原来 magic 这个资料库没有记录, 那你可以把识别方法加
到资料库中, 或乾脆建立自己的资料库算了.


/etc/motd : 这个档很简单 , 就是 message of the day 的意思 , 里面可以写一些
message , 而这些 message 会在 login shell 之前被显示出来 .
通常都是 system administrator 要告知 user 的一些讯息. 而关於每次
都会改变的问题, 在前面 /etc/issue时已提出过,记得 mark 起来就好.

/etc/mtab : 目前 mount 上来的 filesystems , 各位可使用 mount 这个指令来看看
这个档的变化 . 如我在 mount 3.5 inch 软碟A 前 , 我看到的 mtab
如下 :

/dev/hdb1 / ext2 rw 0 0
/dev/hda1 /mnt/dosc msdos rw 0 0
/dev/hda5 /mnt/dosd msdos rw 0 0
/dev/hda6 /mnt/dose msdos rw 0 0
none /proc proc rw 0 0

然而 , 当我以 mount -t msdos /dev/fd0H1440 /mnt/dosa 这个指令将
3.5 inch 软碟A 挂上来後 , mtab 变为像下面的情况 :

/dev/hdb1 / ext2 rw 0 0
/dev/hda1 /mnt/dosc msdos rw 0 0
/dev/hda5 /mnt/dosd msdos rw 0 0
/dev/hda6 /mnt/dose msdos rw 0 0
none /proc proc rw 0 0
/dev/fd0H1440 /mnt/dosa msdos rw 0 0 <-- 多了这列 !

所以 , 各位了解啦 ! /etc/mtab 就是记录目前 mount 的 filesystem


/etc/mtools : 这里面记录的 , 是给 /usr/bin/mtools 参考用的 parameter .
那 mtools 是什麽呢? 简而言之 , 就是一群操作 MSDOS 档案的命令
集合 , 可用的命令可多了 , 如下 :

mattrib - change MSDOS file attribute flags
mcd - change MSDOS directory
mcopy - copy MSDOS files to/from Unix
mdel - delete an MSDOS file
mdir - display an MSDOS directory
mformat - add an MSDOS filesystem to a low-level formatted diskette
mlabel - make an MSDOS volume label
mmd - make an MSDOS subdirectory
mrd - remove an MSDOS subdirectory
mread - low level read (copy) an MSDOS file to Unix
mren - rename an existing MSDOS file
mtype - display contents of an MSDOS file
mwrite - low level write (copy) a Unix file to MSDOS

这些都被 link 到 mtools

/etc/named.boot : 假如你要建立 name server 的话 , 那这个档就是你要修改的地方
详细的情况可以去看 named 的 manual 就知道了 .

/etc/named.pid : named process id

/etc/networks : 这个档与 hosts 有点像 , 都是在 boot 的时候会用到的东西 ,
在这里可以定义一个子网路与其 IP address 的资讯 .

/etc/nntpserver : 这个档案记录著 news server , 当我们使用 tin -r ( read news
remotely ) 时, 这个档案会被参考到, 或者若这个档案不存在的
话, 那环境变数 NNTPSERVER 所指定的 server 就会被当成要去取
得 news 的 server. 譬如说, 你要将 140.111.1.11 当成 news
server, 那 /etc/nntpserver 中就可写:

140.111.1.11

/etc/nologin : 你也许会感到奇怪 , 我的 /etc 这个 directory 下并没有这个档啊?
没错, 它平常是不存在的, 要是你看到这个档的话, 那表示系统大概
要 shutdown 了, 因为系统要 shutdown 了, 自然不希望有人又
login 进来, 所以在我们执行 shutdown 时, nologin 这个档会自动
的被 create, 里面放著 shutdown message. 实际上, 当我们在
login 时, 系统会去检查有没有这个档, 假如有的话, 那就会印出这
个档案中的 message, 然後不让你 login. nologin 也有可能是为了
某种理由被制造的, 比如说系统在 maintain 暂时不希望有人 login.
无论如何 nologin 若存在, 就不能 login.

/etc/passwd : 呵呵 , 这个档案可重要了 . 一个 system administrator 最初要学的
常常就是这个档案的内容! 这个档案记录著系统可以认得的 user, 当
然啦, 也包括一些非人的 login name, 但这是有特殊用途的. 档案内
容每列的格式如下:

Login Name:Encrypted Password:UID:GID:GCOS:Home Directory:Login Shell

(1)login name: 在 login name 方面 , 每个 login name 必须是唯一的 ,
而且不能超过 8 个字元, 一般说来, login name 虽然可以
大小写混合, 但平常的情况下都用小写. 顺便一提的是
/usr/lib/aliases 这个档案, 修改这个档案的内容可以使
mail 时用超过 8 个字元的档案. 如平常 mail
jhhsu@host1.price.xm.fj.cn 可变成 mail
J-Full-Name@host1.price.xm.fj.cn

(2)Encrypted Password: 这栏是编码过的密码 , 在新增一个 new user 时
应该在这栏填上 * , 更改 password 可用 passwd
这个指令 . passwd 这是一个 setuid 的指令 ,
关於 setuid , setgid , stickybit , 各位可去
参考 Unix Security 方面的书籍 .

(3)UID: user id , 每个"人"都要不一样 , 习惯上 , 100 以前被保留做为
特殊的 user id , 而 root 总是 0.

(4)GID: group id , 在比较早期的系统 , 一个 user 同时只能在一个 group
不过现在就没有这种限制了 .

(5)GCOS: 这栏基本上没有特殊格式限制 , 在这里可以写上你的 full name
家中电话, 住址等...... 爱写什麽就写什麽. 虽然你可以乱写一
通, 但若你用到逗号, 系统会把它当成区间. 如你写:
J-Full-Name, 80317, (02)1234123 这些都会被当成 Full Name,
Office, Home Phone. finger 这个指令会去读这地方的资讯. 用
chfn 可改变这栏.

(6)Home Directory: 这栏没什麽 , 就是记录 user 的 home directory 而已
利用 cd 或 cd~ 都可回到 home directory .

(7)Login Shell: 设定使用者所使用的 shell , 预设值是 /bin/bash . 当
然 , 你也可以自己改成 csh 或 tcsh , zsh 也是不错 ,
假如有 free 版的 korn Shell 也可拿来用用 . 用 chsh
可改变你的 login shell .

为了 security 方面的考量 , 各位可以安装 shadow , 将 passwd 这个档
完全的与一般 user 隔绝开来 , 连读也没有办法读 passwd 这个档 .

/etc/profile : profile 这个档是 bash 这个 shell 所用的 , profile 之於 bash
就好像 cshrc 之於 csh. 同样的, /etc 下的 profile 也是 SA 在维
护的, 主要是放著全域的设定 ( Global Setting ) 而每个 user 在
自己的 Home Directory 都可以有各人的 .profile

/etc/protocols : 假如你为了某些目地 , 而写了自己的 protocol , 那你就必须把
它列在这个档案中 , 这样 inetd 才会管理一些 daemons 去用它
这个档案每列的格式如下 , 当然 , # 之後的是注解 :

Protolcol Name Portocol Number Aliases

ip 0 IP # internet protocol, pseudo protocol number
icmp 1 ICMP # internet control message protocol
igmp 2 IGMP # internet group multicast protocol
ggp 3 GGP # gateway-gateway protocol
tcp 6 TCP # transmission control protocol
pup 12 PUP # PARC universal packet protocol
udp 17 UDP # user datagram protocol
idp 22 IDP # WhatsThis?
raw 255 RAW # RAW IP interface

/etc/psdatabase : 这个档案是被 psupdate 所用到 , psupdate 主要的功能就是更新
/etc/psdatabase 这个档 , 以符合目前的 kernel image system
map file . 一般的预设档是 /usr/src/linux/tools/zSystem .

/etc/resolv.conf : 这里面记载著你机器的 domain name 及 name server 的 IP
address , name server 可以自己加入 , 在本市可以用
202.101.103.55 或 202.101.103.54 , 这两台都是 name server .
name server 可不要随便就去掉 , 否则 , 就会发生如下的情况 :

@Rebel[/etc]>telnet bbs.price.xm.fj.cn
bbs.price.xm.fj.cn: Host name lookup failure

因为没有了 name server , 所以 bbs.price.xm.fj.cn
没有办法被解译 , 故会有 Host name lookup failure
这段讯息 .

/etc/rpc :


/etc/securetty : 假如你要以 root login 的话 , 实际上是有限制的 , 这个档案就
列出了 root 可以 login 的 ttys , 假如你把每一列都 mark 起来
那就没有任何一个 terminal 可供 root login 了 , 所以呢 ,
就会出现以下的情况 :

Rebel login: root
root login refused on this terminal.

再一次的 , 我们看到了 unix security 方面的东西 , 仔细的在这
个档案列出可用的 terminal , 可使从 modem 连的使用者或经由网
路来的其它的使用者比较不容易取得 superuser 的权力 .

/etc/services :

/etc/shell : 这个档案再简单也不过了 , 里面就记录著可以用的 login shell . 还
有一点 , 那就是这个档的记录会在使用 chsh 时做为参考 , 唯有被列
在这里的 shell , 使用 chsh 时才会出现这些 shell 可选 .


/etc/sudoers : 在一个不是很复杂的系统中 , 也许一个 System Administrator 就可
以管理所有的事情 . 但一但系统提供的服务变多 , 系统管理的工作
也随之变得沉重 , 这时候 , sudo 就派上用场了 , sudo 可以让一个
普通的 user 变成 superuser , 这样一来 , 一个系统的某些工作 ,
就可以分配给这些 superusers 来做 . 以减轻负担 .
当然 , 并不是每个 user 都可以变成 superuser . 所以
/etc/sudoers 就是记录著那些人可以用 superuser 的身份来执行一
些工作 , 这个档案的格式如下 :

host alias section format:
Host_Alias HOSTALIAS = host-list

Host_Alias ::= a keyword.
HOSTALIAS ::= an upper-case alias name.
host-list ::= a comma separated list of hosts.

command alias section format:
Cmnd_Alias CMNDALIAS = cmnd-list

Cmnd_Alias ::= a keyword.
CMNDALIAS ::= an upper-case alias name.
cmnd-list ::= a comma separated list commands.

user specification format:
user access_group [: access_group] ...

access_group ::= host_type = [op]cmnd_type [,[op]cmnd_type] ...
host_type ::= a lower-case host name OR a host alias.
cmnd_type ::= an command OR a command alias.
op ::= the logical '!' NOT operator.

如下面是一个极为简单的例子 :

# Cmnd alias specification
Cmnd_Alias SHUTDOWN=/sbin/halt,/sbin/shutdown
# User specification
root ALL=ALL
jhhsu ALL=ALL
emotion ALL=ALL,!SHUTDOWN

在这个例子当中 , jhhsu 可以执行 root 所有的命令 , emotion 除了 halt
及 shutdown 不能执行以外 , 其它 root 能执行的命令他都能执行 .
这个档案有一个专属的 editor 叫 visudo 可来编辑 /etc/sudoer 这个档案
在编辑完这个档案之後 , jhhsu 就可以用 sudo.bin 这个命令转换成
superuser 来做原来只有 superuser 才能做的事 . 而关於使用 sudo.bin
有一个记录档 , 在 /var/adm/sudo.log , 里面记录著谁在什麽时候利用
sudo 下了那些指令 . 顺便一提的是 : 利用下面这个命令可抓出那些人转换
成 superuser 但却没有成功 ......

grep "FAILED SU" /var/adm/messages

/etc/utmp : 从 utmp 中可以知道现在有谁正在用系统 . 当使用者 logout 之後 ,
init ( 很重要的 process , 以後有时间将为各位介绍 ) 就去把 logout
的使用者从 /etc/utmp 中去掉 .
实际上 , utmp 每个 record 是像这样的一个结构 :

struct utmp {
short ut_type; /* type of login */
pid_t ut_pid; /* pid of process */
char ut_line[12]; /* devicename of tty -"/dev/" */
char ut_id[2]; /* init id or abbrev. ttyname */
time_t ut_time; /* logintime */
char ut_user[8]; /* username, not null-term */
char ut_host[16]; /* hostname for remote login */
long ut_addr; /* IP addr of remote host */
};

了解这个档案 , 进而去修改 , 可以做出许多有趣的事 ......:P

/etc/wtmp : 简而言之 , wtmp 是一个 login data base , 有许多的指令会用到这个
档 , 像 last , sessreg , who 等 ......
这个档案格式与 utmp 大致相同 , 只是多了 shutdown 及 reboot 这
个记录 , 指出系统的 shutdown 或 reboot , 及一个空的 user name
指出在相关 terminal 的 logout . 还有 , 不像 /etc/utmp , /
/etc/wtmp 的记录是慢慢的附加上去的 , 也就是说 , 这个档案会越变
越大 , 虽然变大的速度并不会太快 , 但一但到了某种程度大小的话
System Administrator 应该要考虑砍掉部份 . 下面是用 last 这个
指令所得到的部份内容 :

bbs tty1 Tue Nov 29 19:09 - 19:09 (00:00)
root tty1 Tue Nov 29 19:08 - 19:09 (00:00)
root tty1 Tue Nov 29 19:07 - 19:07 (00:00)
runlevel ~ Tue Nov 29 19:07
reboot ~ Tue Nov 29 19:07

/etc/zprofile : link 到 /etc/profile