[精华] FreeBSD-FAQ集锦(二)

时间:2021-10-16 13:00:25

3:我现在开始学习使用FreeBSD,我应该从什么地方开始?

Resources for Newbies
http://www.freebsd.org/projects/newbies.html

 

4:可以从什么地方得到FreeBSD的光盘? 
ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/

 

5:我应该怎么安装FreeBSD?

http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/install.html (英文)
http://www.freebsd.org.cn/snap/doc/zh_CN.GB2312/books/handbook/install.html (中文)

 


6:有没有FreeBSD的初级教程?

最权威最好的是FreeBSD官方提供的Handbook
http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/index.html (英文)
http://www.freebsd.org.cn/snap/doc/zh_CN.GB2312/books/handbook/ (中文)

另外王波的使用大全,以及技术内幕也是不错的书籍。

 

7:如何编译FreeBSD内核?
http://www.freebsd.org/doc/en_US ... k/kernelconfig.html (英文) 
http://www.freebsd.org.cn/snap/doc/zh_CN.GB2312/books/handbook/kernelconfig.html (中文)

 


8:如何在FreeBSD下安装软件? 
http://www.freebsd.org/doc/en_US ... handbook/ports.html (英文)
http://www.freebsd.org.cn/snap/doc/zh_CN.GB2312/books/handbook/ports.html (中文)

 


9:如何管理系统帐号? 
http://www.freebsd.org/doc/en_US ... handbook/users.html (英文)
http://www.freebsd.org.cn/snap/doc/zh_CN.GB2312/books/handbook/users.html (中文)

 


10:有一个命令foo,我想知道它的详细说明,怎么办? 
用'man'命令,运行'man foo',另外,你也可以去查 http://www.freebsd.org/cgi/man.cgi

 


11:我为什么不能用root连接我的telnet/ftp? 
用root来连接telnet/ftp是一个再糟糕不过的想法,非常不安全。 
FreeBSD默认禁止了这种做法,你可以用其他用户telnet到系统上以后在su成为root。 
另外,强烈建议使用更安全的ssh/sftp来代替telnet/ftp。

 


12:我为什么不能su成为root? 
只有wheel组的用户才能su成为root。

 


13:我的root密码丢失,我应该怎么办? 
重新启动FreeBSD,当出现倒记时的时候按任意键(除了Enter),然后输入'boot -s',进入系统后先运行`#/sbin/mount -a`,现在你可以用`passwd`来修改root密码了。

 


14:怎么查看我的系统开了什么端口,运行了什么程序? 
netstat 和 ps 会帮助你。

 

15:我发现我的系统开了一个xx的端口,我应该如何关闭上它? 
安装lsof,然后用'lsof -in'查看是哪个程序打开了这个端口,然后关闭对应的进程(ps & kill)。


16:我想在系统启动的时候自动运行点什么,应该怎么做? 
在/etc/rc.local里放上你要放的东西吧,没有看到这个文件就自己建立它。 
另外你可以可以把你的命令保存为以.sh结尾的文件,然后把它放在/usr/local/etc/rc.d/中,不要忘了让它可执行。

 

17:我修改了/boot/loader.conf以后不能正常引导系统了,当机器开始加载/boot/defaults/loader.conf的时候(未加载完)机器停止响应,我应该怎么办?(黑夜编码人提供) 

当机器启动时,出现 "-" 提示的时候按任意键(回车除外)进入"boot :"提示符,输入: boot kernel 此时机器开始启动。

 

18:我如何修改我的telnet登录时显示的信息?(黑夜编码人提供) 

# vi /etc/gettytab 
然后编辑: 
default: 
:cb:ce:ck:lc:fd#1000:im=Welcome to windows 2000 servern:sp#1200: 
:if=/etc/issue: 
保存退出。 
试试重新telnet你的FreeBSD,将显示: 
Welcome to windows 2000 server 
login:


19:ports下有没有xxx这个软件?在哪个目录下? 

cd /usr/ports 
make search key=xxx | grep ^Path: 
如果想按照软件的名字搜索 
make search name=xxx 
千万注意name和key之后不要有空格

 

20:FreeBSD的RELEASE、STABLE、CURRENT之间是什么关系 

FreeBSD有两个主要的分支一个是STABLE分支,一个是CURRENT分支 
STABLE分支是经过长时间测试的(一般是一年到 两年),修正了主要的问题的系统分支,这个分支上通常不会有严重的系统级错误,也不会对系统的主要结构进行修改。但是不代表STABLE分支是一成不变 的,STABLE分支常常会加入很多外围的更新,比如从4.4到4.8,FreeBSD已经经历了巨大的改变,比如使用Softupdate,对USB全 系列设备的支持升级,Firewire设备的支持,而且之中还对stdin/stdout库进行了一次升级。这些更新都是在CURRENT分支里面进行了 长时间测试之后,进行评估不会对系统安全造成影响的情况下加入STABLE分支的。而CURRENT分支实际上可以成为FreeBSDng,这里将会有大 量的新技术和新代码,但是这些代码很多处于试验性质,无法保证稳定性和效率,只是给开发人员用来测试的。而RELEASE是FreeBSD的发行版本,每 当STABLE和CURRENT开发到了一个阶段,一批目标达成以后将会发行一个RELEASE版本,在5之前FreeBSD只在STABLE分支上发行 RELEASE版本,但以后可能会更多的发行CURRENT版本了

 


21:我想移动一套系统到一块新的硬盘上,该怎么做呢? 
http://bbs.chinaunix.net/viewthread.php?tid=639085&extra=page%3D1

 

22:为啥我已经是Root了,但是对系统进行修改升级仍然没有权限呢?

securelevel

  FreeBSD kernel 有個觀念叫 securelevel。當還有人在爭論這是不是夠完美時,這個
  機制已經夠防止大部份的 "script kiddiez"。Securelevel 是指你的 kernel 在執行時
  的安全等級。每一個等級具有不同的保護和檢查機制。這些是 init( 的 man page:

  The kernel runs with four different levels of security.  Any superuser
  process can raise the security level, but only init can lower it.  The
  security levels are:
  Kernel 可以以四種不同的安全等級來執行。任何 superuser process 可以提高安全
  等級, 但是只有 init 可以降低它。這四種等級分別是:

  -1    Permanently insecure mode - always run the system in level 0 mode.
        永遠不安全模式 - 切換到 level 0 吧!

  0     Insecure mode - immutable and append-only flags may be turned off.
        All devices may be read or written subject to their permissions.
        不安全模式 - "不可更動"和"只能附加"這兩個旗標(flag)可以被改變。所有的
    devices 可以照著它們的讀寫權限被讀寫。

  1     Secure mode - the system immutable and system append-only flags may
        not be turned off&#59; disks for mounted filesystems, /dev/mem, and
        /dev/kmem may not be opened for writing.
        安全模式 - "不可更動"和"只能附加" 的旗標不能被取消&#59; mount 上來的檔案系
    統, /dev/mem, 和 /dev/kmem 不能寫入。

  2     Highly secure mode - same as secure mode, plus disks may not be
        opened for writing (except by mount(2))  whether mounted or not.
        his level precludes tampering with filesystems by unmounting them,
        but also inhibits running newfs( while the system is  multi-user.
        高安全模式 - 和安全模式一樣, 又多加了不管硬碟有沒有被 mount 起來,
        除了 mount(2) 之外都不能寫入。它防止一個檔案系統在 umount 的時候被
        搞亂。而且在這個等級也禁止在 multi-user 時執行 newfs(。

  如果安全等級最初是 -1, 那麼 init 就會保持原狀。否則在 single user mode 時,
  init 會把安全等級調到 0, 而在 multiuser mode 時會以 1 來跑。如果你希望在
  multiuser 模式是以等級 2 在跑, 你可以先進入 single user mode, 編輯 /etc/rc,
  使用 sysctl 來更動。

  若是你的系統只拿來跑 web server 之類的, 你可以放心的將 securelevel調高到2。
  但若是你要跑 X server, 把你的 securelevel 調至 1 或更高會導致一些問題。因為
  X server 必須要寫入 /dev/mem 和 /dev/kmem, 而 securelevel 1 不允許你這麼做。
  有一個解決的方法是, 在啟動 X server 後再調高 securelevel。但我的意見是, 如果
  你跑 X server 的話, 你已經有了其它的安全問題須要考量, 而不止是 securelevel。
  以下這個指令會顯示出你目前的 securelevel 設定值。

# sysctl kern.securelevel


  如果要提高你的 securelevel:
# sysctl -w kern.securelevel=X
  X 可以是 0, 1 或 2。

  又在 securelevel 是 1 的話, 你在 "make world" 時也會有些問題。因為 "make
  install" 時會在 kernel 上加上 immutable flag:

# ls -lo /kernel
-r-xr-xr-x  1 root  wheel  schg 1061679 Jun 30 01:27 /kernel

  "schg" flag 會防止你安裝新的 kernel:

nfr# id
uid=0(root) gid=0(wheel) groups=0(wheel), 2(kmem)

nfr# sysctl kern.securelevel
kern.securelevel: 2

nfr# rm -rf /kernel
rm: /kernel: Operation not permitted

nfr# mv /kernel /tmp/
mv: rename /kernel to /tmp//kernel: Operation not permitted

  如果你在 securelevel 1 或 2, 那麼 schg flag 是不能被改變的。

# chflags noschg /kernel
chflags: /kernel: Operation not permitted

  值得留意的是, /boot.config 可以改變你開機時的系統設定,要預防有心人篡改
  你應該這麼做:

# touch /boot.config
# chflags schg /boot.config

  你可以看看系統預設還有那些執行檔是有 schg flag 的。

# ls -lo /sbin | grep schg
-r-x------  1 bin   bin       schg 204800 Jul 19 20:38 init
# ls -lo /bin | grep schg
-r-sr-xr-x  1 root  bin       schg 192512 Jul 19 20:36 rcp

  再回過頭來談談鎖定系統這件事吧! 既然剛剛談到了 immutable flags, 何不試著把整
  個 /sbin 和 /bin 都設成 schg flag 呢 !? 這會給想 crack你系統的人一點小挫折。
  (假設你的系統也正以適當的 securelevel 咦髦?

# chflags schg /bin/*
# chflags schg /sbin/*

  不過 /sbin 可能被改成別的名字,再重新創造一份新的 /sbin ,所以改變 /sbin 與
  /bin 的 schg flag 是很合理的想法,我們可以依照以下的方式改變 /sbin 和 /bin 
  的 schg flag:

# chflags schg /bin/*
# chflags schg /sbin/*

  這些 schg flag 的檔案會讓你在 "make world" 時有問題。
  ("make installworld" 也是)

  無論如何 ,最好是以 single user 模式來 "make world"。有關 "makr world" 的相
  資訊, 還有為什麼要這麼做, 到下面這個網頁來看看:

http://www.nothing-going-on.demon.co.uk/FreeBSD/make-world/make-world.html

  現在你已經適當的鎖定你的系統, 也以只跑必要的的 service, 而檔案系統也適當的
  mount 上來, 且也以適合的 kernel securelevel 咦髦小?
  與以上所述的相關 man pages 有: init(, chflags(1), sysctl(。


23:我怎样才能知道系统运转是否正常,是否受到攻击呢?

由于FreeBSD是一个多用户系统,那么就需要管理员进行日常维护,特别是用做网络 
服务器的系统,一旦因为缺乏维护而造成停机故障,就会造成很大损失。即使对于单用 
户的FreeBSD系统,同样也要执行这些不可缺乏的维护任务,只是由于系统归个人使用, 
那么对维护的要求就不必那么高,维护任务就轻松一些。 
系统日志 
系统的日志记录提供了对系统活动的详细审计,这些日志用于评估、审查系统的运 
行环境和各种操作。对于一般情况,日志记录包括记录用户登录时间、登录地点、进行 
什么操作等内容,如果使用得当,日志记录能向系统管理员提供有关危害安全的侵害或 
入侵试图等非常有用的信息。 
BSD提供了详细的各种日志记录,以及有关日志的大量工具和实用程序。这些审计记 
录通常由程序自动产生,是缺省设置的一部分,能够帮助Unix管理员来寻找系统中存在 
的问题,对系统维护十分有用。还有另一些日志记录,需要管理员进行设置才能生效。 
大部分日志记录文件被保存在/var/log目录中,在这个目录中除了保存系统生成日志之 
外,还包括一些应用软件的日志文件。当然/var目录下的其他子目录中也会记录下一些 
其他种类的日志记录文件,这依赖于具体的应用程序的设置。 
$ ls /var/log 
adduser maillog.5.gz sendmail.st.1 
dmesg.today maillog.6.gz sendmail.st.10 
dmesg.yesterday maillog.7.gz sendmail.st.2 
httpd-access.log messages sendmail.st.3 
httpd-error.log messages.0.gz sendmail.st.4 
kerberos.log messages.1.gz sendmail.st.5 
lastlog messages.2.gz sendmail.st.6 
lpd-errs messages.3.gz sendmail.st.7 
maillog messages.4.gz sendmail.st.8 
maillog.0.gz messages.5.gz sendmail.st.9 
maillog.1.gz news setuid.today 
maillog.2.gz ppp.log setuid.yesterday 
maillog.3.gz sendmail.st userlog 
maillog.4.gz sendmail.st.0 wtmp 
系统登录日志 
系统会保存每个用户的登录记录,这些信息包括这个用户的名字、登录起始结束时 
间以及从何处登录入系统的等等。它们被保存到/var/log/lastlog、/var/log/wtmp和/ 
var/run/utmp文件中,这三个文件以二进制格式保存了这些用户的登录数据。 
其中/var/run/utmp文件中保存的是当前系统用户的登录记录,因此这个文件会随着 
用户进入和离开系统而不断变化,而它也不会为用户保留很长的记录,只保留当时联机 
的用户记录。系统中需要查询当前用户状态的程序,如 who、w等就需要访问这个文件。 
utmp可能不包括所有精确的信息,某些突发错误会终止用户登录会话,当没有及时更新 
utmp记录,因此utmp的记录不是百分之百的可以信赖的。 
而/var/log/wtmp保存了所有的登录、退出信息,以及系统的启动、停机记录,因此 
随着系统正常运行时间的增加,它的大小也会越来越大,增加的速度依赖于系统用户登 
录次数。因此可以利用这个日志用来查看用户的登录记录,last命令就通过访问这个文 
件来获得这些信息,并以反序从后向前显示用户的登录记录,last也能根据用户、终端 
tty或时间显示相应的记录。ac命令同样也使用wtmp中的数据产生报告,但它的显示方 
式不同。它可以根据用户(ac -p),或按日期(ap -d)显示信息,这样管理员就能获 
得一些非常有用的反常信息,如一个平时不太活跃的用户突然登录并连接很长时间,就 
有理由怀疑这个帐户被窃取了。 
注意:X Window由于会同时打开多个终端窗口,因此会使得用户登录连接时间迅速 
增加。 
lastlog文件保存的是每个用户的最后一次登录信息,包括登录时间和地点,这个文 
件一般只有login程序使用,通过用户的UID,来在lastlog文件中查找相应记录,然后报 
告其最后一次登录时间和终端tty。然后, login程序就使用新的记录更新这个文件。 
这三个文件是使用二进制格式保存的,因此不能直接查看其中的内容,而需要使用 
相关命令。当然也可以通过程序来访问这三个文件,这就需要了解它们使用的数据结构 
。其中utmp和wtmp使用同样的数据结构,而lastlog使用另外一个数据结构,可使用man 
来进行查询具体结构。如果系统的用户数量很多,那么wtmp文件的大小会迅速增加,在 
系统/var文件系统空间紧张的情况下,就导致这个文件系统被占满。系统不会主动控制 
这个文件的大小,因此这需要管理员的干预,需要手工及时清除,或编写shell脚本定期 
保存和清除。 
系统还可以提供记账统计的功能,要打开系统的计账功能,需要使用accton命令, 
注意,accton必须跟随记账日志文件的名字作参数,而不带参数的accton将关闭记账进 
程。 
当打开了记账功能后,可以使用lastcomm来检查在系统中执行的所有命令的信息, 
包括执行的命令、执行命令的用户、用户使用的终端tty,命令完成的时间,执行时间等 
。从lastcomm的输出也能帮助管理员检查可能的入侵行为。 
此外可以使用ac命令来查询用户的连接时间的报告,sa命令来查询用户消耗的处理 
器时间的报告。 
Syslog日志记录 
最初,syslog只是为了sendmail而设计的消息日志工具,由于它提供了一个中心控 
制点,使得sys log非常好用和易配置,因此当今很多程序都使用syslog来发送它们的记 
录信息。syslog是一种强大的日志记录方式,不但可以将日志保存在本地文件中,还可 
以根据设置将syslog记录发送到网络上的另一台主机中。 
支持syslog方式的系统启动了syslogd守护进程,这个程序从本地的Unix套接字和监 
听在514端口(UDP)上的Internet套接字,来获得syslog的记录。本机中进程使用sysl 
og系统调用发送来sy slog记录,然后由syslogd将他们保存到正确的文件或发送到网络 
上另一台运行syslogd主机中去。 
syslogd的设置文件为/etc/syslog.conf,定义消息对应的相应目标,一条消息可以 
达到多个目标,也可能被忽略。 
# $Id: syslog.conf,v 1.9 1998/10/14 21:59:55 nate Exp $ 

# Spaces are NOT valid field separators in this file. 
# Consult the syslog.conf(5) manpage. 
*.err&#59;kern.debug&#59;auth.notice&#59;mail.crit /dev/console 
*.notice&#59;kern.debug&#59;lpr.info&#59;mail.crit&#59;news.err /var/log/messages 
mail.info /var/log/maillog 
lpr.info /var/log/lpd-errs 
cron.* /var/cron/log 
*.err root 
*.notice&#59;news.err root 
*.alert root 
*.emerg * 
!ppp 
*.* /var/log/ppp.log 
syslog.conf的配置可以分为两个部分,第一部分用于区分消息的类型,另一个用于 
设置消息发送的目的地。通常,消息的类型包括消息的产生者,例如kern表示内核产生 
的消息,auth表示认证系统产生的消息,等等,还包括消息的级别,例如emerg表示非常 
重要的紧急信息,alert表示系统告警状态,crit表示关键状态,err 表示一般的错误信 
息,warning表示警告信息,notice表示提示信息,但还不是错误,info表示一般信息, 
debug表示调试信息等,因此一个消息的类型可能为:kern.debug、mail.info等,但页 
可以使用通配符*进行匹配。 
从上面的syslog.conf的设置可以看出,系统正常运行中的很多重要的信息,如错误 
信息*.err、内核调试信息kern.debuf、认证报告auth.notice等被直接输出的console中 
,另外还有一些比较重要的信息被输出到/var/log/messages文件中,发送邮件的记录将 
被保存在/var/log/mail log文件中,打印记录为/var/log/lpd-errs等,使得管理员可 
以根据这些文件来查询相关记录,进行统计或寻找系统问题。其中使用syslog记录的me 
ssages文件中包括root登录的信息、用户多次登录失败的尝试等对系统安全相当重要的 
信息,因此也是系统遭受攻击之后,攻击者会根据syslog.conf中设置试图清除相关文件 
中自己的登录记录。因此对于安全性要求更高的系统,可以尝试将syslog发送到另一台 
计算机上,或者输出到一些设备文件中,如在打印机上立即打印输出。 
系统会使用newsyslog定期检查syslog输出的messages文件和maillog文件,将旧数 
据压缩保存为备份文件,如messages.1.gz等。 
其他日志 
除了系统登录记录和syslog记录之外,其他还有一些应用程序使用自己的记录方式 
。 
系统每天都会自动检查系统的安全设置,包括对SetUID、SetGID的执行文件的检查 
,其结果将输出到/ var/log/security.today文件中,管理员可以与/var/log/securit 
y.yeste rday文件对比,寻找系统安全设置的变化。 
如果系统使用sendmail,那么sendmail.st文件中以二进制形式保存了sendmail的统 
计信息。 
在系统启动的时候,就将内核的检测信息输出到屏幕上,这些信息可以帮助用户分 
析系统中的硬件状态。一般使用d mesg命令来查看最后一次启动时输出的这个检测信息 
。这个信息也被系统保存在/var/log/dmesg.tod ay文件中,系统中同时也存在另一个文 
件dmesg.yesterday,是上次的启动检测信息,对比这两个文件,就可以了解到系统硬件 
和内核配置的变化。 
lpd-errs记录了系统中lpd产生的错误信息。 
此外,各种shell还会记录用户使用的命令历史,它使用用户主目录下的文件来记录 
这些命令历史,通常这个文件的名字为.history(csh),或.bash-history等。