5.1.1.3 inetd (part II)
好吧, 你仍然执意要使用 inetd。那么我们来看看在 inetd.conf 有那些选项, 可以增进你
的系统安全。在攻击某系统之前, 攻击者都会先收集该系统的相关信息。就 telnetd 而言,
你可以试试在 telnetd 那行后面加个 -h:
telnet stream tcp nowait root /usr/libexec/telnetd telnetd -h
从 telnetd 的 man page 可以知道:
-h Disable the printing of host-specific information before login
has s been completed.
当有很多管道可以获得系统信息的同时, 这招和下面的那招是个不错的解决方案。如果你认
为跑 telnet daemon 是没有必要的, 那么只消加个 "#" 在该行的最前面就行了:
#telnet stream tcp nowait root /usr/libexec/telnetd telnetd
有个极不错的措施是, 你可以拒绝没有完整 FQDN 的人来联机。要做到这点, 也只要加个 -
U 选项到 telnetd 后面:
telnet stream tcp nowait root /usr/libexec/telnetd telnetd -h -U
这是个小动作, 但是对你的系统安全有莫大的助益。
5.1.1.4 ftpd
现在来看看 ftp。 对于 ftp FreeBSD 已经做了一些 log 的动作 。 可以看到在/etc
/inetd.conf 里面 ftpd 那一行已经加了 "-l"。然而, 你还是要设定你的syslogd, 使它可
以接受 ftp daemon 产生的 log。从 man page 可以得知:
每个成功或是失败的 ftp 登入尝试, 都会以 LOG_FTP 机制纪录起来。如果这个选项被指定
了两次, 所有的下载 (get), 上载(put), 新增, 删除,建立目录, 及更名的动作和文件名字
都会被纪录下来。 又: LOG_FTP 讯息预设是不会被 syslogd(8) 纪录下来的。你还要在 s
yslogd(8) 的设定文件里面激活这个功能才行。
让我们开启 syslogd 纪录 ftpd log 的功能吧~ 这个档案是 /etc/syslog.conf (别忘了顺
便看看 man 5 syslog.conf)。把下面这一行加到这个设定档里:
ftp.* /var/log/ftpd
也不要忘了执行这个指令 "touch /var/log/ftpdlog", 因为 syslogd 不能写入到一个没有
被开启过的档案。如果你想要你的 ftpd 提供你更多的 log 讯息, 那么就在 ftp那一行多加
个 "-l" 吧:
ftp stream tcp nowait root /usr/libexec/ftpd ftpd -l -l
如果你想要确定你的使用者们都用 scp (Secure Copy, 附属在 SSH 里面), 但是又想要提供
anonymous ftp 服务, 也只消加个 "-A" 在 ftp 那行后面就行了:
ftp stream tcp nowait root /usr/libexec/ftpd ftpd -l -A
你也可以编辑 /etc/ftpwelcome, 说明目前接受 anonymous ftp 登入, 但是系统内的使用者
就得使用 rcp 了。如果你有提供 anonymous ftp, 你可以使用 -S 选项来记录传输的情形:
ftp stream tcp nowait root /usr/libexec/ftpd ftpd -A -S
5.1.1.5 fingerd
Finger 服务默认值还算安全: 它不容许不带 user name 的 query。这是一件不错的事(tm)
。然而, 就是有些人无论如何也不想 run fingerd。这种情形下, 你只要简单的给它加个 "
#" 在这行的最前面就可以了。又, 你想要 log 住谁来 finger 的话, 加个"-l" 也就行了
:
finger stream tcp nowait nobody /usr/libexec/fingerd fingerd -s -l
Fingerd 产生的 log 信息预设是写到 /var/log/messages。如果你想要这些信息写入到特定
的档案里去, 那么就在 /etc/syslog.conf 加入这一行:
daemon.notice /var/log/fingerd
/* !fingerd anyone? */
$ man 5 syslog.conf
除了 ftp, telnet 和 finger 之外, 你实在不须要在 /etc/inetd.conf 中再多激活任何东
西了。通常我都会关掉 talk 及 comsat等我个人不须要的东西。如同我之前讲的,如果你不
知到某个 servcie 是干嘛用的, 而且你也不须要它, 那么就关掉它。一些和网络有关而且很
有用的 man page 是: inetd, ftpd, telnetd, fingerd, syslogd,comsat, talkd, rshd,
rlogind, inetd.conf。并且记得要看 man page 的"SEE ALSO"部份, 以获得更多的相关信息
。
5.1.1.6 ipfw (IP FrewWall)
IP FireWall 做的是 packet 过滤的工作。没错, 就是只有这样。然而, 你要考虑的事是,
你的 kernel 要有支持 ipfw。 通常在我管的机器上, 我都会重编核心使其支持ipfw。大
概看起来是这样:
options IPFIREWALL #finger the net
options IPFIREWALL_VERBOSE #log the net
options IPFIREWALL_DEFAULT_TO_ACCEPT
第一行表示最其本的 IP FireWall 支持。第二行让 ipfw 可以把接受或拒绝 packets的纪
录 log 起来。第三行非常重要, 让 ipfw 默认值是接受任何地方来的 packets 。如果你不
这样做, 默认值拒绝任何地方来的 packets。我个比比较喜欢后者, 但我又认为在我自己的
工作站上, 或一个让人登入的工作站, 预设拒绝任何 packets 不是一件太好的事。如果你搞
不清楚自己在做啥事, 那就不要用这个选项。
就设定 firewall 而言, 这是不甚正确的。预设任何东西都该被挡掉才是正确的。如果你是
要建置一台高安全性的系统, 或一台 firewall 的话,那就千万不要加入这个选项:
options IPFIREWALL_DEFAULT_TO_ACCEPT
记住一件事: 要预设拒绝任接受任何 packets, 然后再加入 rule 来设定你想要 接受那
些 packets。查看 /etc/rc.firewall 以得到更多的信息。再一次提醒你, 不要使用这个 o
ption, 除非你只是想要防止 DoS attacks 或暂时把某些 port/network ban掉。
5.1.1.7 log_in_vain
你也可以透过 sysctl 命令, 来改变一些有用的系统变量:
# sysctl -w net.inet.tcp.log_in_vain=1
# sysctl -w net.inet.udp.log_in_vain=1
这会把尝试向你的机器要求你没有的服务的 connections log 起来。例如, 如果你在你的机
器没有跑 DNS server, 而又有个人想要向你的机器要求 DNS 服务, 这时候你就会看到
Connection attempt to UDP yourIP:53 from otherIP:X
(X 是某个 high port #)
用 "dmesg" 命令就可以看到这一行。Dmesg 秀出的是系统的 kernel messagebuffer。
然而, 这个 buffer 的空间是有限的, 所以系统也会把这些讯息写入到/var/log/messa
ges 里面去:
# tail -1 /var/log/messages
Jun 12 19:36:03 ugh /kernel: Connection attempt to UDP yourIP:53 from otherIP:X
5.1.1.8 final notes
理论上呢, 你的系统现在已经比你装好它时更安全些了。你现在可以做一些事来确定你目前
的更动:
$ netstat -na | grep LISTEN
这会告诉你那些 service 在那些 port 跑。越少越好 又, 再跑一些其它的 port scann
ers (strobe, nmap) 来找出你开了那些 port。
而要确要你的 syslogd 已经开始纪下你刚刚想要 log 的事件, 可以这么做:
# cd /var/log
# tail -10 fingerd ftpd messages
在 log 档里面没看到任何东西的话, 记得重新激活 inetd 和 syslogd:
# kill -HUP `cat /var/run/syslog.pig` `cat /var/run/inetd.pid`
5.1.1.9 Filesystem
既然 Unix 把什么东西都当作档案来看待, 好好的保护你的档案系统便是很重要的事。有件
事是在你安装操作系统前便要完成的: 必须要计划并设计好你的 partition 该怎么切割。有
几个很重要的原因让你要这么做: 一个是你可以 mount 不同的档案系统以赋与不同的选项
(下面有几个例子)。别一个是,如果你想要把你的 filesystem export出去, 你须要更加细微
的控制。如果你是一个从 Linux 转入 FreeBSD 的使用者, 你会发现 Linux 是把任何东西都
往 root partition "/" 塞, 而 FreeBSD 预设便要 "/","/usr", 和 "/var"。这也使得要使
用如 dump 般的工具较容易。且让我们来讨论 security 吧! 有一件事我通常会做的是, 我
会把一般 users 可以写入的 partition 分开来割, 而这些 partitons 便可以用 "nosuid"
的方式来 mount。从 mount 的 man page 可以知道:让 suid 或 sgid bit 失效。对于像
suidperl 这些公开使用的程序, 设这个选项便没用。
因此你会有个 partition 给一般使用者使用: /home 或 /usr/home。然后你可以另外
开个 partion 给 /var/tmp 然后再把你的 /tmp 指到这里:
# rm -rf /tmp
# ln -s /var/tmp /tmp
你可以参考这个例子:
# cat /etc/fstab
# Device Mountpoint FStype Options Dump Pass#
/dev/sd0s1b none swap sw 0 0
/dev/sd0s1a / ufs rw 1 1
/dev/sd0s1g /usr ufs rw 2 2
/dev/sd0s1h /usr/home ufs rw 2 2
/dev/sd0s1f /var ufs rw 2 2
/dev/sd0s1e /var/tmp ufs rw,nosuid 2 2
proc /proc procfs rw 0 0
现在你可以确定一般 users 可以写入的目录不是以 "-nosuid" 的方式被 mount, 就是
没有可以写入。现在你还要关心的就是 /var/spool/uucppublic"。
你可以把 "/var" 以 "-nosuid" 的方式来 mount , 或下这个命令:
# chmod o-w /var/spool/uucppublic
如果你想要找出你所有的可写入目录, 下这个命令:
# find / -perm -0777 -type d -ls
如同 man page 指出的, 具有 suid/sgid 的程序会让你的 nosuid 失效。找出那些程式
是 suid 或 sgid 的吧:
# find / -perm -2000 -ls
# find / -perm -4000 -ls
同时你不止可以用 "-ls" 而只是知道有那些程序。你可以把不是很有用的程序 "chmod
000"。像是 uustat, uucico 等, 如果你从来不碰 uucp 的话。或是 ppp 和 pppd, 如果你
绝不会用到他们。又, 你不会去用到打印机的话, 把 lpr lprd 也 chmod 000 吧!也许改天
会有个人写个 shell script 来问你那些东西要 chmod 000 掉。
现在你也许想问, 有什么方式可以防止攻击者重新以非 "-nosuid" 的方式 mount 你的
filesystem ? Well, 没有, 除非你改变你的 securelevel。
5.1.1.10 securelevel
FreeBSD kernel 有个观念叫 securelevel。当还有人在争论这是不是够完美时,这个机
制已经够防止大部份的 "script kiddiez"。Securelevel 是指你的 kernel 在执行时的安全
等级。每一个等级具有不同的保护和检查机制。这些是 init(8) 的 man page:
Kernel 可以以四种不同的安全等级来执行。任何 superuser process 可以提高安全等级,
但是只有 init 可以降低它。这四种等级分别是:
-1 永远不安全模式 - 切换到 level 0 吧!
0 不安全模式 - "不可更动"和"只能附加"这两个旗标(flag)可以被改变。所有的
devices 可以照着它们的读写权限被读写。
1 安全模式 - "不可更动"和"只能附加" 的旗标不能被取消; mount 上来的档案系
统, /dev/mem, 和 /dev/kmem 不能写入。
2 高安全模式 - 和安全模式一样, 又多加了不管硬盘有没有被 mount 起来,除了
mount(2) 之外都不能写入。它防止一个档案系统在 umount 的时候被搞乱。而且在这个等级
也禁止在 multi-user 时执行 newfs(8)。
如果安全等级最初是 -1, 那么 init 就会保持原状。否则在 single user mode 时,in
it 会把安全等级调到 0, 而在 multiuser mode 时会以 1 来跑。如果你希望在multiuser
模式是以等级 2 在跑, 你可以先进入 single user mode, 编辑 /etc/rc,使用 sysctl 来更
动。
若是你的系统只拿来跑 web server 之类的, 你可以放心的将 securelevel调高到2。但
若是你要跑 X server, 把你的 securelevel 调至 1 或更高会导致一些问题。因为X serve
r 必须要写入 /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 ins
tall" 时会在 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 与/bi
n 的 schg flag 是很合理的想法,我们可以依照以下的方式改变 /sbin 和 /bin 的 schg f
lag:
# chflags schg /bin/*
# chflags schg /sbin/*
这些 schg flag 的档案会让你在 "make world" 时有问题。
("make installworld" 也是)
无论如何 ,最好是以 single user 模式来 "make world"。有关 "makr world" 的相信
息, 还有为什么要这么做, 到下面这个网页来看看:
http://www.nothing-going-on.demo ... rld/make-world.html
现在你已经适当的锁定你的系统, 也以只跑必要的的 service, 而档案系统也适当的mo
unt 上来, 且也以适合的 kernel securelevel 运作中。
与以上所述的相关 man pages 有: init(8), chflags(1), sysctl(8)。
5.1.1.11 Logging
系统纪录是很重要的。如果你的统被人攻击, 透过它你可以找到一些蛛丝马迹。Unix的
标准 log 动作是透过 syslogd(8) 来达成的。它从 /etc/rc 中被激活, 一直执行到系统关
机为止。你可以用以下的方式确定你的系统上是否正在执行 syslogd:
$ ps -axu | grep syslogd
Syslogd 会在激活时读取 /etc/syslogd.conf。这个档案很重要, 因为它告诉 syslogd
要纪录那些东西, 而这些东西又该放在那里。你也许想看看 syslod 和 syslod.conf的 m
an pages:
$ man syslogd ; man 5 syslog.conf
既然 Unix 当初就是设计作为网络操作系统, syslogd 可以而且默认值也接受其它系统
的纪录。它自己也是可以把纪录透过网络送到其它的计算机去。想当然耳, 它可以纪录下 自
己系统发生的每件事 - 而这也正是默认值。因为 syslogd 使用 UDP - 所以资料是可以被
伪造的。你至少可以作一件事: 不要让你的 syslogd 接受来自其它计算机的纪录讯息。在
/etc/rc.conf 加个 "-s" 就可以了:
syslogd_flags="-s" # Flags to syslogd (if enabled).
如果你有接受特定机器之纪录的必要 (像是你的 router, 或是 web server), 使用
"-a" 来指定特定的 hosts, domains, 或 subnets。
下次你重新激活你的系统时, syslogd便会拒绝来自其它地方的纪录讯息。如果有人尝试
送资料进来, syslogd 将会加以纪录。
如果你不想重新激活你的系统, 那么只要把 syslogd kill -9, 然后再以 root 的身份
激活 syslogd 便可以了。记得加上 "-s"这个参数。
如果有人尝试攻击你的系统而且失败了, 你的系统纪录便不会被伪造。但如果你的系统
己经被攻陷了, 而且 /var/log 整个被干掉了呢 !?还是有方法可以防止的。 其一便是在你
的网络系统中再架一台机器拿来纪录整个网络中发生的事, 而且也不要再干其它的事了。除
了 UDP port 514 之外, 其它的也都不用再开了。这样子一来你便可以纪录下所有机器 (ro
uters, firewalls, serves, workstations) 发生的所有事。你可以只送敏感的讯息给它,
或者任何你觉得重要的。这台机器可以是老旧 486, 但有颗大大的硬碟。记得要设定好正确
的 "-a" 选项, 免得搞出没收到纪录的乌龙事。你也可以接台老旧的点阵打印机给它, 以印
出敏感的事件(像是失败的登入尝试)。如果你把系统纪录印到纸上, 一位攻击者要清除它是
很困难的。还有其它的方法,例如透过 serial port (cuaaN) 或是 parallel port (lpN) 送
出纪录到别台机器上。
每个人都有不同的记录需求。但是有一件事我通常会做的是在 /etc/syslog.conf 加入
这一行:
auth.* /var/log/authlog
FreeBSD 出厂时便包含了 newsyslog。这玩意会定时压缩纪录文件并清除掉旧的纪录。
设定档位于 /etc/newsyslog.conf - 请看一下 man page 以得到更多的信息:
% man newsyslog
不像 syslogd, newsyslog 不是一直都在执行的。它是从 crontab 激活的:
% grep newsyslog /etc/crontab
0 * * * * root /usr/sbin/newsyslog
%
你可以修改 /etc/newsyslog.conf 以符合你的需求。我通常会改变它预设的档案模式,
从 664 改成 660 - 因为没有必要让一般的使用者去查看你的系统纪录。你应该这么做:
# cd /var/log
# chmod g-w,o-r * ; chmod a+r wtmp
这会防止一般使用者读取纪录文件, 除非它们在适当的 group (wheel 或之类的)。还有
,记得把记录文件的 group 都改成 wheel -- 这纯粹只是为了方便: 如果你是在 wheel 这个
group; 你当然是可以 su(1) 到 root 然后读记录文件。但是这么做以后你便可以直接读
记录文件了, 岂不方便乎!?你还要在 /etc /newsyslog.conf 中加入 "root.wheel":
/var/log/maillog root.wheel 640 7 100 * Z
/var/log/authlog root.wheel 640 7 100 * Z
/var/log/messages root.wheel 640 7 100 * Z
这会在记录文件达到 100K 时将它压缩并加以编号, 将 mode 改成 640, chown
成root.wheel, 并将旧的记录文件干掉 - 这就是我们要的。
当然,标准的 Unix 还有其它不同的 syslog 程序可供选择,其中之一是 CORE EDI 的ss
yslog (secure syslog). 可以在以下的地方找到:
http://www.core-sdi.com/ENGLISH/CoreLabs/ssyslog/download.html 另外还有 nsyslog (new syslog),这是写 bpfilter 那一伙人写出来的,你可以在
http://cheops.anu.edu.au/~avalon/nsyslog.html 找到这个程序。
不管你选用那一种程序 (标准的 syslog , ssyslog ,或 nsyslog),你应该也去看看一些
帮你分析系统 log 的程序,帮你省下去用 grep 查询 log file 的麻烦。
其中之一是 logcheck , 可以在这个地方下载:
http://www.psionic.com/abacus/abacus_logcheck.html 另外一个类似的程序叫做 logsurfer , 你可以从这个网页下载:
http://www.cert.dfn.de/eng/team/wl/logsurf/ 5.1.2 Misc. hints and tips
5.1.2.1 LKM
在正式提供服务的系统上, 也许该关掉 LKM。为什么? 请看:
Phrack Magazine Volume 7, Issue 51 September 01, 1997, article 09
要关掉 LKMs, 在 kernel 设定档中加入这一行:
options NOLKM
5.1.2.2 Portmap
FreeBSD 出厂的默认值会将 portmap 这项功能打开。如果你不需要它的话,把它关掉。
如果你没有跑任何需要呼叫 RPC 的程序的话,你就不需要跑这个程序。如果要关掉portmap
这个程序,你可以去修改 /etc/rc.conf , 把
portmap_enable="YES" # Run the portmapper service (or NO).
改成
portmap_enable="NO" # Run the portmapper service (or NO).
5.1.2.3 Sendmail
FreeBSD 出厂的默认值也会执行 sendmail 的功能。从很久以前 sendmail 就以不安全
且漏洞百出闻名。最近人们努力的将 sendmail 中的错误清除,但是由于 sendmail是一个很
肥大的程序,要将所有的错误都抓出来相当的困难。换句话说:如果你不需要它的话,最好把它
关掉。如果你真的需要它的话,最好到 sendmail 的网站去看看有没有新的patches 或是 ha
cks, sendmail 的网站在
http://www.sendmail.org 。
此外,如果你的 sendmail 版本是 8.8 以后的版本,请设定好你的系统,以防止 spammer
利用你的系统去干坏事。设定 anti-spam 的信息可以在
http://www.sendmail.org/antispam.html 下找到。
如果你决定要把 sendmail 关掉的话,只要去修改 /etc/rc.conf (没错,又是它)中的:
sendmail_enable="YES" # Run the sendmail daemon (or NO).
改成
sendmail_enable="NO" # Run the sendmail daemon (or NO).
5.1.2.4 Ports and Packages
在一台高安全性的系统上, 最好不要使用 ports 或 packakges。 你不会真正知道是不
是安装 suid 的程序进你的系统 -- 而且你不会想再多这些 suid 的东西了, 相信我。尽管
你在 pkg_add 时可以使用不同的选项(如 "-v" 或 "-n"), 最好还是自己来: 抓回它的 sou
rce code, 自己 compile, 再手动安装完成。
5.1.2.5 Filesystem quota
如果你的系统是 "shell" type server,你可能希望设定使用者的 quota (可用空间)。
如此一来可以保护你的系统免受 Denial of Service 攻击方式的侵扰(不论是有意或是无意
的)。在未设定 quota 的系统上使用者可以随意的灌爆你的硬盘。要把 quota这项功能打开
,你可以修改 /etc/rc.conf 中的这项设定:
check_quotas="NO" # Check quotas (or NO).
改成
check_quotas="YES" # Check quotas (or NO).
请先看看以下的 man page,这些文件说明如何使用 quota 的各项设定,并且有一些设定
的范例: quotaon, edquota, repquota, quota
请确定在 /etc/fstab 中有加入 "userquota" , 详见 man 5 fstab。
5.1.2.6 Crontab
如果你使用了 /etc/crontab 的话,这项功能有可能提供入侵者一些额外的信息。
请确定你做过 "chmod 640 /etc/crontab"
5.1.2.7 BPF
BPF 是 berkeley packet filter 的缩写,要使用这项功能前你必须修改 kernel,以达成
监听网络的目的。像 tcpdump 和 NFR 这些程序都使用 BPF。然而 BSD的监听程序也都透过
BPF 来达成,如果有人拿到你系统的 root 权限的话,在系统上设定 BPF 功能反而帮助他们
更容易的监听你的网络。如果没有必要的话,不要设定 kernel 中 BPF的功能。 FreeBSD 出
厂的设定值是将这个功能关闭起来的。
5.1.2.8 CVSup, CVS, 等等
如果你是使用 CD-ROM 安装你的系统的话,很有可能当你拿到你的 CD-ROM时,已经发现某
些程序有错误存在了。在大部份的情况下(我们希望如此),这些错误与系统安全无关。然而,
我建议你将你的系统升级到最新的 -current (或是 -stable,视你的喜好而定) 版本。如此
你可以确定你系统上的的是最新版本的系统原始码。
你需要的信息在这边可以找到:
http://www.freebsd.org/handbook/handbook264.html#508 在更新你操作系统的原始码后你必须去 "make world",详细的文件在:
http://www.nothing-going-on.demo ... rld/make-world.html
5.1.2.9 SSH
使用 ssh 以代替 telnet, ftp, rlogin, rsh 等的重要性, 再怎么强调都是不够的。
对于使用慢速线路的人 (dial-up, 56K frame), ssh 有 -C 选项:
-C 将数据压缩后再传出去, 包括了 stdin, stdout, stderr还有透过 X11 还有
TCP/IP。压缩的算法同
收起