作者: 8bto

  • Windows 7各版本官方原版镜像下载(破解工具下载)

    破解工具Windows7 Loader:http://pan.baidu.com/share/link?shareid=218612&uk=3909144582

    以下的下载地址请使用迅雷下载:

    Windows 7 32位(X86)

    旗舰版:

    ed2k://|file|cn_windows_7_ultimate_with_sp1_x86_dvd_u_677486.iso|2653276160|7503E4B9B8738DFCB95872445C72AEFB|/

    家庭普通版:

    ed2k://|file|cn_windows_7_home_basic_with_sp1_x86_dvd_u_676500.iso|2653276160|843E7A78F2126FAC726CF5342710082D|/

    家庭高级版:

    ed2k://|file|cn_windows_7_home_premium_with_sp1_x86_dvd_u_676770.iso|2653276160|A8E8BD4421174DF34BD14D60750B3CDB|/

    专业版:

    ed2k://|file|cn_windows_7_professional_with_sp1_x86_dvd_u_677162.iso|2653276160|08F65018BD9B5BC8D77C1C7C5615A329|/

    企业版:

    ed2k://|file|cn_windows_7_enterprise_with_sp1_x86_dvd_620153.iso|2501507072|7788AED3A02EB99DE1341771950EB697|/

    Windows 7 64位(X64)

    旗舰版:

    ed2k://|file|cn_windows_7_ultimate_with_sp1_x64_dvd_u_677408.iso|3420557312|B58548681854236C7939003B583A8078|/

    家庭高级版:

    ed2k://|file|cn_windows_7_home_premium_with_sp1_x64_dvd_u_676691.iso|3420557312|1A3CF44F3F5E0BE9BBC1A938706A3471|/

    专业版:

    ed2k://|file|cn_windows_7_professional_with_sp1_x64_dvd_u_677031.iso|3420557312|430BEDC0F22FA18001F717F7AF08C9D5|/

    企业版:

    ed2k://|file|cn_windows_7_enterprise_with_sp1_x64_dvd_u_677685.iso|3265574912|E9DB2607EA3B3540F3FE2E388F8C53C4|/

     

  • FreeBSD入门级命令查阅表

    下面这份表单列出了FreeBSD入门所需要了解的大部分命令。列表按命令功能列出,括号中为命令的执行指令。如果想要进一步了解每个命令的用法,可以使用man命令进行查阅(用法:man xxx,xxx为你想要了解的命令)。以下,列表开始。

    我如何离线?(exit)

    我如何停止电脑?(shutdown -h now)

    我如何重新激活计算机? (shutdown -r now)

    我如何在单使用者模式下停止系统? (shutdown now)

    我如何切换终端机? (ALT-F*)

    文件

    我如何阅读用户手册? (man)

    使用者管理

    我该如何增加一个使用者? (adduser)

    我如何移除使用者? (rmuser)

    我如何改变我的密码? (passwd)

    我如何查看所有的使用者?(logins)

    “su” 指令

    我如何 “su” 至 root 帐号? (su)

    我如何 “su” 至其它使用者的帐号? (su username)

    四处观察

    我在哪? (pwd)

    我如何观察目录下有什么? (ls)

    我如何看到以点开始的隐藏档? (ls -a)

    我如何看到更多的讯息 (存取许可,拥有者,群组,大小,日期)? (ls -l)

    我如何看出那些档是什么? (ls -F)

    这些是什么档: “..” 与 “.”? (ls -aF)

    四处移动

    我该如何改变工作目录? (cd)

    如何回到上一层目录? (cd ..)

    我如何回到自己的工作目录? (cd, cd ~/)

    屏幕控制

    我如何卷回 (在终端机中,非 X)? (The Scroll Lock Key)

    我该如何清除屏幕? (clear)

    文章

    我如何不使用文书编辑器就可以观看小的档案? (more)

    最普遍的文书编辑器是? (vi)

    “vi” 看起来有点难,我可以从 “ee” 开始吗? (ee)

    “visual” 编辑器

    学习 “vi” 最有效的方法为何? (vilearn)

    “vi” 是如何工作的? (man vi)

    什么是储存指命? (:w)

    什么是离开指令? (:q)

    什么是可以储存与离开的命令? (:wq)

    如何离开而不使用储存指令? (:q!)

    我如何移动? (h, j, k, and l)

    Esc 键有什么用途? (The Esc Key)

    我如何加入新的文字? (a and i)

    我如何建立新的一行? (o and O)

    我如何删除文字? (x and dd)

    我如何拷贝文章内容? (yy and p)

    我如何使用数个指令? (nCommand)

    我如何搜寻文章? (/text)

    我如何起动 “vi” 于只读模式? (view)

    计算机信息

    我如何能观看开机记录文件? (dmesg)

    有什么方法可以让我慢慢地观看开机记录文件吗? (dmesg │more)

    显示谁在系统上? (who)

    他们正在做什么?? (w)

    “w” 可以显示出所有的处理吗? (w)

    何时

    我如何显示或设定日期时间? (date)

    我如何显示月历? (cal)

    有什么方法可以让我慢慢地观看月历吗? (cal │ more)

    通讯

    我如何显示 (或不显示) 其它使用者送来的讯息? (mesg y, mesg n)

    我如何传送讯息到其使用者的屏幕? (write)

    我如何送讯息到每一个人的屏幕? (wall)

    我如何与他人交谈 (chat)? (talk)

    档案管理

    我如何建立一个空档案? (touch)

    我如何删除档案? (rm)

    我如何建立一个目录? (mkdir)

    我如何移除一个空的目录? (rmdir)

    我如何移除一个目录包括里面所有的东西 (包括子目录)? (rm -r)

    我如何移除以 “-” 起头的档案? (rm — -filename)

    我如何拷贝档案? (cp)

    我如何拷贝整个目录包括它所有的内容? (cp -R)

    我该如何搬移档案与目录? (mv)

    我如何改变档案/目录名称? (mv)

    我如何执行 rm、cp 与 mv 时,须要我的许可? (-i)

    我如何执行 rm、cp 与 mv 时,不须要我的确认? (-f)

    档案连结

    我如何连结一个档案或目录? (ln -s)

    我如何 hard link 一个档案? (ln)

    档案拥有权/存取许可

    我如何观察谁是档案拥有者? (ls -l)

    我如何观察档案/目录的存取许可? (ls -l)

    我如何改变档案/目录的使用者拥有人? (chown)

    我如何改变档案/目录的群组拥有人?s group owner? (chgrp)

    我如何改变档案/目录的使用者与群组拥有人? (chown user:group)

    我如何改变存取许可? (chmod)

    如果我拥有这个目录,我可否修改不是我的档案? (yes)

    软盘机装置

    我如何挂上我的软盘? (mount)

    我如何挂上 MS-DOS 格式的软盘机? (mount -t msdos)

    我如何卸下我的软盘? (umount)

    应用程序

    我如何起动应用程序? (./)

    我如何由文件名称来起动应用程序? (PATH)

    我如何在背景起动应用程序? (&)

    我如何知道我的 PATH 是? (echo $PATH)

    所有的应用程序在那? (The FreeBSD Ports Collection)

    我如何安装一个 port? (make install clean)

    那里有编辑好的二进制文件? (The FreeBSD Packages Collection)

    我如何移除应用程序? (pkg_delete)

    使用者环境

    使用者的 profile 档案在那? (vi ~/.profile)

    我如何改变我的 shell? (chsh)

    处理管理

    我如何列出处理? (ps)

    我如何列找到处理? (ps -waux │ grep “name of the process”)

    我如何砍掉处理? (kill)

    磁盘管理

    我如何检查可用的磁盘空间? (df)

    我如何检查每个目录下用了多少磁盘空间? (du)

    工具

    哪里有计算器? (bc)

  • FreeBSD root密码忘记了

    更改过程:

    1. 重新启动机器;

    2. 在出现“Welcome to FreeBSD!”的选择菜单时,选择“4. Boot FreeBSD in single user mode”;

    3. 在加载结束后,执行

    # /sbin/mount -a

    # passwd root

    New passwd:*************

    这样就重设了 root 账户密码。

    可能在加载过程中会要检查磁盘,用fsck命令检查一下就可以了。

  • 你是否每天在进步

    做为一个成功者,或者一个正在追求成功的年青大学生,忘记过去,不断前进应该是最重要的良好心态。

    进步有一个准则,那就是不要为打翻的牛奶哭泣。进步意味着允许犯错误,在错误中成长。有这样一个故事告诉我们建立一个对待错误的健康心态,寻就是让失去变得可爱。

    一个老人在高速行驶的火车上,不小心把刚买的新鞋从窗口掉了一只,周围的人备感惋惜,不料老人立即把第二只也从窗口扔了下去。这举动更让人们大吃一惊。老人解释说:这一只鞋无论多么昂贵,对我而言已经设有用了,如果有谁能捡到一双鞋子,说不定他还能穿呢!成功者善于放弃,善于从损失中看到价值。

    假如我们想要事情有所改变的话,我们首先要改变的是我们自己,只有人进步了,事情才会有进步。我们进步和成功的关键就在于改变自己。如果一个人花上一辈子的时间,连自己都无法改变的话,那么怎么能改变他人呢,更不要说指望能够改变世界。

    因此,做为公司的新员工,每天要写工作日记,每天提醒自己是进步了还是退步了。如果你每天进步1%的话,一年后,你的能力就增长了一倍,相应地,你的职位和收入都会增长一倍甚至更多,自己进步了,世界也就进步了。

    在工作中,要确定自己进步了还是退步了,最有效的方法就是注意自己的态度是否正确,你是事情是否正确。只要是正确了,那么你就一定在进步。只有我们承担了某项任任务的时候,你才能成为胜任这项工作的人。正确的态度表现在我做这项任务很有趣又符合自己的才能,因此工作常常有以下四种情况:

    一是带着错误的态度做错误的事,这样工作将失去意义和价值。

    二是带着正确的态度做错误的事,这样你还是工作的有意义,但是你将浪费大量的人力和物力,你不得不面对众多挫折和失败。

    三是带着错误的态度做正确的事,这样你能有所成就,但是你的态度会限制你进步的大小。

    四是带着正确的态度做正确的事,只有这种情形,你才能又快乐又赚钱,你的人生将富有意义并充满价值。

    区别这四种工作并不复杂,只要你每天问自己,你是在做一项充满激情又符合自己才能发展的工作吗?你 是抱着快乐和自豪的心情在工作吗?你是在做一件能够为他人解决问题的工作吗?

    进步意味着你要追求卓越,有这样一个有趣的故事:每天,当太阳升起的时候,非洲大草原上的动物们就开始奔跑了。狮子妈妈在教育自己的孩子:孩子,你必须比跑得再快一点,再快一点,你要是跑不过最慢的羚羊,你就会活活地饿死。同时在另外一个场地,羚羊妈妈也在教育自己的孩子:孩子,你必须跑得再快一点,再快一点,如果你不能跑得比跑得最快的狮子还要快,那你就肯定会被他们吃掉。所以请记住,你跑得快,别人跑得更快,所所以没有最快,只有更快!

  • FreeBSD终端分辨率调整的方法

    内核加入

    option VESA

    option SC_PIXEL_MODE

    重新编译kernel

    vidcontrol -i mode #察看系统支持的显示模式

    vidcontrol MODE_数字 #设置需要的模式

    如:1024x768x32模式

    vidcontrol MODE_321

    试验成功后,再加入rc.conf #有些显示模式不能正常工作

    vi /etc/rc.conf

    加入

    allscreens_flags=”MODE_数字”

  • 汉字字符集-国家标准码

    国家标准代码,简称国标码,是中华人民共和国的中文常用汉字编码集,亦为新加坡采用。

    现时中华人民共和国官方强制使用GB 18030标准,但较旧的计算机仍然使用GB 2312

    1.GB 2312

    GB 2312GB 2312-80是一个简体中文字符集的中国国家标准,全称为《信息交换用汉字编码字符集·基本集》,又称为GB0,由中国国家标准总局发布,1981年5月1日实施。GB2312编码通行于中国大陆;新加坡等地也采用此编码。中国大陆几乎所有的中文系统和国际化的软件都支持GB 2312。

    GB 2312标准共收录6763个汉字,其中一级汉字3755个,二级汉字3008个;同时,GB 2312收录了包括拉丁字母、希腊字母、日文平假名及片假名字母、俄语西里尔字母在内的682个全角字符。

    GB 2312的出现,基本满足了汉字的计算机处理需要,它所收录的汉字已经覆盖中国大陆99.75%的使用频率。

    对于人名、古汉语等方面出现的罕用字,GB 2312不能处理,这导致了后来GBK及GB 18030汉字字符集的出现。

    2.GBK

    由于GB 2312-80只收录了6763个汉字,有不少汉字,如部分在GB 2312-80推出以后才简化的汉字(如“啰”),部分人名用字(如中国前总理朱镕基的“镕”字),台湾及香港使用的繁体字,日语及朝鲜语汉字等,并未有收录在内。中文电脑开发商,于是利用了GB 2312-80未有使用的编码空间,收录了所有出现在Unicode 1.1及GB 13000.1-93之中的汉字,制定了GBK编码。

    根据西方资料,GBK最初是由微软对GB2312的扩展,也就是CP936字码表 (Code Page 936)的扩展(原来的CP936和GB 2312-80一模一样),最初出现于Windows 95简体中文版中,由于Windows产品的流行和在大陆广泛被使用,中华人民共和国国家有关部门将其作为技术规范。注意GBK并非国家正式标准,只是国家技术监督局标准化司、电子工业部科技与质量监督司发布的“技术规范指导性文件”。虽然GBK收录了所有Unicode 1.1及GB 13000.1-93之中的汉字,但是编码方式与Unicode 1.1及GB 13000.1-93不同。仅仅是GB 2312到GB 13000.1-93之间的过渡方案。

    3.GB 18030

    GB 18030,全称:国家标准GB 18030-2005《信息技术 中文编码字符集》,是中华人民共和国于2000年3月17日发布,现时最新的内码字集,是GB 18030-2000《信息技术 信息交换用汉字编码字符集 基本集的扩充》的修订版。与GB 2312-1980完全兼容,与GBK基本兼容,支持GB 13000及Unicode的全部统一汉字,共收录汉字70244个。于2001年8月31日后发布或出厂的产品,必须符合GB 18030-2000的相关要求。

    GB 18030主要有以下特点:

    与 UTF-8相同,采用多字节编码,每个字可以由1个、2个或4个字节组成。

    编码空间庞大,最多可定义161万个字符。

    支持中国国内少数民族的文字,不需要动用造字区。

    另附,

    大五码

    Big5,又称为大五码五大码,是使用繁体中文(正体中文)社群中最常用的计算机汉字字符集标准,共收录13,060个汉字。

    中文码分为中文内码及中文交换码两类,Big5属中文内码,知名的中文交换码有CCCII、CNS11643。

    Big5虽普及于台湾、香港与澳门等繁体中文通行区,但长期以来并非当地的国家标准,而只是业界标准。倚天中文系统、Windows等主要系统的字符集都是以Big5为基准,但厂商又各自增删,派生成多种不同版本。

    2003年,Big5被收录到台湾官方标准的附录当中,取得了较正式的地位。这个最新版本被称为Big5-2003。

  • FreeBSD中Firefox的安装、汉化以及Flash插件的安装

    1.安装Firefox3.5

    #pkg_add -r firefox35

    注意:安装过程中会有以下提示:Firefox在显示HTML5的页面元素是会需要模块sem,否则会出现“Bad system call (core dumped)“的错误,可以在/boot/loader.conf加入”sem_load=”YES”来解决这个问题。

     

    2.安装Firefox的多国语言包

    #pkg_add -r firefox35-i18n

    语言包是以Firefox插件的形式安装的,启动firefox后,只需在Tools->Quick Locals Switcher中修改为zh_CN,重启Firefox就可以看到中文界面。

     

    3.安装Flash插件

    众所周知,FreeBSD下没有原原生的Flash player,这也是FreeBSD没能在个人桌面领域没能大展拳脚的一方面的原因吧。这里使用linux的Flash插件,可真的拿人的手短,设置起来还真挺麻烦的。

    3.1. 安装port:www/nspluginwrapper,它使的FreeBSD可以使用其它平台上的插件,这个port依赖:emulators/linux_base-f10,所以在这之前必须要设定好linux compability。

    3.2. 安装port:www/linux-f10-flashplugin10,并创建以下链接:

    #ln -s /usr/local/lib/npapi/linux-f10-flashplugin/libflashplayer.so \

    /usr/local/lib/browser_plugins/

     

    3.3. 设置linux的进程文件系统

    linux的进程文件系统linprocfs,必须被挂载到/usr/compat/liunx/proc:

    # mount -t linprocfs linproc /usr/compat/linux/proc

    或者把它写入/etc/fstab,以便开机时系统自动挂载:

    linproc /usr/compat/linux/proc linprocfs rw 0 0

     

    3.4. 为每个用户安装插件

    %nspluginwrapper -v -a -i

    %ln -s /usr/local/lib/browser_plugins/npwrapper.libflashplayer.so /usr/local/lib/firefox3/plugins/npwrapper.libflashplayer.so

     

    重启Firefox,终于看到熟悉的flash啦。

  • FreeBSD常用小技巧

    问:如何让FreeBSD像RedHat那样在ls时显示多种颜色的目录?

    答:在/etc/csh.cshrc里面加入:alias ls ls –G, 并重新登录

    问:如何让FreeBSD的csh像bash那样按tab列出列出无法补齐的候选文件?

    答:标准的方法是按Ctrl+D。但如果一定要用tab的话,在/etc/csh.cshrc中加入:set autolist

    问:更新了rc.conf,如何生效?

    答:cd /etc && sh rc

    问:修改更新.cshrc(或者类似文件)之后如何不退出登录立即生效?

    答:$ source ~/.cshrc

    问:我新装了程序在 path (/usr/bin /usr/local/bin etc.,)路径中,如何不重新登录就能直接使用?

    答:$ rehash

    问:csh中如何快速在命令行中移动?

    答:移动到行首:^a,行尾:^e,清除:^u

    问:快速回到上次访问的目录

    答:cd –

    问:快速回到用户的主目录

    答:cd ~

    问:我总是工作到很晚而忘了睡觉的时间怎么办?

    答:leave +hhmm(hh小时,mm分钟)

    问:如何清屏?

    答:clear 或 ^l

    问:敲错字滴滴滴的烦死了,还总被家里人发现而强制睡觉,怎么办?

    答:set nobeep(tcsh)

    问:我想暂时离开而又不想logout

    答:lock –p

    问:FreeBSD 下如何查看带宽使用率

    答:systat -if 1

    问:使用portupgrade升级多个ports时,有时会弹出配制对话框,暂停了整个过程

    答:使用参数–batch,这样会使用默认的配置。

    问:如何加速portupgrade升级

    答:参数-P可以优先使用package升级(如果package不存在才会使用port), 而-PP会仅使用package升级

    问:我不想在这里学这些tips

    答:好吧,请安装fortune,它会在每次登录时给你一条tip

  • 详细介绍BSD系统的内核安全和级别

    bsd一直是公认的最安全的unix操作系统,因为它提供了基于内核的安全保护而不仅仅是老式unix的基于访问控制的安全保护。bsd为内核划分了安全等级,这样就可以限制很多不安全的操作,而且bsd在安全设置上是单点的,使得不可能轻易改变安全级别。linux提供的lsm“可加载安全模块”可以从外部加载安全模块,而bsd将此行为也作为可能的安全隐患,所以bsd中由内核直接来负责安全,如果内核认为加载的安全模块是不可信的,那么内核将禁止加载模块,这在bsd内核中通过安全级别(securelevel)来实现。下面先引用一段介绍安全级别的文字然后我分析bsd的init程序中与安全级别相关的代码:

    FreeBSD内核有一个安全级别(securelevel)的概念,这是指系统内核运行使用的安全等级,不同的等级具备不同的保护和检查机制。因为这是内核的检查机制,因此相当严格,没有办法能绕过这个机制提供的保护,因此就对保护FreeBSD的安全性十分有用。内核的安全级别按照提供安全保护的程度分为-1、0、1、2共分为四个级别,安全级别能提供的保护有:

    系统文件:系统文件可以设置保护标志”不可更改”和 “只能附加” ,具有这些保护标志的文件在系统的文件属性之外,还受这些保护标志的保护。安全级别可以规定这些标志能否取消。

    磁盘设备文件:磁盘设备文件具备两种访问方式,随机访问的方式对应的块设备文件和顺序访问方式对应的字符设备文件,其中字符设备文件可以直接读取硬件设备,因此对于安全至关重要。内核安全级别可以决定是否允许以直接读取硬件的方式操作硬盘设备文件。

    直接内存访问:/dev/mem和/dev/kmem是系统内存的映射文件,访问它们就能直接访问系统内存,一些需要获取系统信息和需要进程间共享内存机制的程序需要访问这两个设备文件以直接访问内存,然而访问内存空间显然也影响系统的安全运行。内核安全级别可以决定是否允许访问系统内存。

    安全级别-1为一种永久性的不安全级别,系统内核不提供任何额外的保护。系统缺省就处于这个级别,此时系统文件的保护标志能被root用户取消,所有的设备,包括磁盘设备和内存映射设备,均能按照其属性来访问。

    安全级别0为不安全的级别,它和等级-1一样没有对系统提供额外的安全保护,但它影响到内核进程init的行为。当内核处于级别-1时,内核init程序不会自动更改运行级别,因此一直到进入能够登录的状态,系统安全级别仍然为-1。这是系统的缺省行为,没有打开安全级别保护机制。但如果安全级别不为 -1,init在进入单用户状态时将改变为0级别,在进入多用户模式时改变为安全级别 1。因此安全级别0为设置了安全级别保护之后,单用户状态下的安全级别。

    安全级别1为安全的级别,提供了对系统的保护能力。此时系统文件的那两个保护标志不能被取消,已安装文件系统对应的磁盘设备,以及/dev/mem,/dev/kmem不可以用写入模式打开。

    安全级别2与级别1类似,只是进一步增加了对磁盘设备低级操作的限制,不管该磁盘设备是否安装,都不允许直接以写入方式访问,这样就无法进行fdisk、disklabel以及newfs等操作。

    可以使用sysctl来查看当前系统的安全级别,但如果没有经过特别设置,FreeBSD的缺省安全级别应该为-1:

    bash-2.03# sysctl kern.securelevel

    kern.securelevel: -1

    安全级别中最重要的一点是,除了内核的init进程之外,即使是root用户,也只能不断提高安全级别,没有办法将安全级别降低。这样就基本上保证远程入侵者在没有重新启动计算机的情况下,无法降低系统运行级别。如果root 想提高系统运行的安全级别,也需要使用sysctl命令。

    bash-2.03# sysctl -w kern.securelevel=0

    kern.securelevel: -1 -> 0

    安全级别的意义就在于对文件和设备的保护,如果要对文件提供保护,就需要对文件设置保护标志schg。设置这个标志需要使用chflags命令,系统文件如 /kernel,系统安全的时候就具备这个保护标志。即使在非安全级别下要更改这些文件的时候,也要首先取消保护标志才能进行正常操作。

    bash-2.03# mv /kernel /kernel.bak

    mv: rename /kernel to /kernel.bak: Operation not permitted

    bash-2.03# chflags noschg /kernel

    bash-2.03# mv /kernel /kernel.bak

    bash-2.03# mv /kernel.bak /kernel

    bash-2.03# chflags schg /kernel

    上面操作先取消了kernel文件的不可更改标志schg,显然这是在非安全级别下的操作。当安全级别处于 1或2时,就不能使用chflags改变文件的保护标志了。

    bash-2.03# chflags noschg /kernel

    chflags: /kernel: Operation not permitted

    可以使用带-o参数的ls来查看文件具备的标志。

    bash-2.03# ls -lo /kernel

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

    因此可以将系统安全相关的很多程序都设置保护标志,这样入侵者就不能轻易更改这些文件了。建议将/bin,/sbin下的文件都设置这个标志。

    bash-2.03# chflags schg /bin

    bash-2.03# chflags schg /bin/*

    bash-2.03# chflags schg /sbin

    bash-2.03# chflags schg /sbin/*

    这里首先将相关目录本身设置保护标志,这样入侵者就不能通过将目录更改名字的方法创造一个新的/sbin或 /bin目录。

    当文件具备了保护标志,并且安全级别高于1时,保护标志就无法取消,这些文件就不能更改,因此就带来一些必要的操作无法进行,例如重新生成内核的操作等。此时就必须再重新启动系统进入单用户状态执行这些操作。通常情况下,如果FreeBSD系统只提供网络服务,那么使用安全级别1或2毫无问题。然而如果要运行X Server ,由于X Server使用了共享内存机制,需要访问/dev/mem和/dev/kmem,这样就会带来问题。这时的一种解决办法是在启动X Server之后(例如使用Xdm),再升高安全级别,以避开这个问题,但此时 X Server已经打开了/dev/mem和/dev/kmem,安全级别的保护就不再是完美无缺的了(dog250:攻击者可以利用X的漏洞实施攻击)。如果不使用X Server之类的程序,那么就可以将设置安全级别的命令直接放入系统的启动rc文件中,以便自动提高安全级别。这需要在rc.conf文件中设置两个变量:kern_securelevel_enable和kern_securelevel。

    kern_securelevel_enable=”YES”

    kern_securelevel=0

    上面将安全级别设置为0,那么在启动之后将自动更改为1,这是一种标准的做法。

    以上就是关于bsd安全级别的标准描述,那么有句话说只有init进程可以调整安全级别是什么意思呢?还得通过bsd的init源代码来理解,于是翻出bsd的init.c文件(前面的文章分析过),里面有一个函数:setsecuritylevel

    以下为引用的内容:

    void setsecuritylevel(int newlevel)

    {

    #ifdef KERN_SECURELVL //在定义安全级别的情况下使能此函数

    int name[2], curlevel;

    extern int errno;

    curlevel = getsecuritylevel(); //得到当前的安全级别

    if (newlevel == curlevel) //已经是当前的级别了,直接返回

    return;

    name[0] = CTL_KERN;

    name[1] = KERN_SECURELVL;

    if (sysctl(name, 2, NULL, NULL, &newlevel, sizeof newlevel) == -1) { //一切ok,无条件设置

    emergency( “cannot change kernel security level from %d to %d: %s”, curlevel, newlevel, strerror(errno));

    return;

    }

    #ifdef SECURE

    warning(“kernel security level changed from %d to %d”, curlevel, newlevel);

    #endif

    #endif

    }

    下面是getsecuritylevel:

    以下为引用的内容:

    int getsecuritylevel(void)

    {

    #ifdef KERN_SECURELVL

    int name[2], curlevel;

    size_t len;

    name[0] = CTL_KERN;

    name[1] = KERN_SECURELVL;

    len = sizeof curlevel;

    if (sysctl(name, 2, &curlevel, &len, NULL, 0) == -1) {

    emergency(“cannot get kernel security level: %s”, strerror(errno));

    return (-1);

    }

    return (curlevel);

    #else

    return (-1);

    #endif

    }

    安全性体现在哪里呢?前面的设置函数可是无条件设置的啊,如果我在我自己的程序里面也来一个sysctl调用,岂不是也成功了,实际上,sysctl是个系统调用,bsd的实现是在该系统调用的实现里面如果是设置安全级别那么就检查进程的pid,如果pid不是1还想降低安全级别,那么很抱歉,出错返回。见FreeBSD的代码:src/sys/kern/kern_mib.c

    以下为引用的内容:

    mtx_lock(&securelevel_mtx);

    if (!regression_securelevel_nonmonotonic &&

    (level < securelevel) && //新安全级别小于原安全级别

    (req->td->td_proc->p_pid != 1)) { //设置安全级别的进程不是init进程

    mtx_unlock(&securelevel_mtx);

    return (EPERM); //则出错返回

    bsd的init不允许重新加载也是通过pid来判断的,在main函数里面的第二个大句:

    以下为引用的内容:

    if (getpid() != 1) { //这就禁止了init的重新加载,以不给别的存在不轨意图的人任何机会

    (void)fprintf(stderr, “init: already running\n”);

    exit (1);

    }

    说bsd的安全设置是单点的就是上面这个意思,这样不至于最后混乱,那么init在什么时候调用setsecuritylevel了呢?通查代码发现在两个地方调用了setsecuritylevel,一个就是multi_user,另一个是single_user。(如果不明白这两个函数是干甚的,请查阅我前面的文章《System V的启动风格和BSD的启动风格(2)—代码角度》)就是进入多用户模式和进入单用户模式的时候进行调用。

    以下为引用的内容:

    state_func_t multi_user(void)

    {

    …//前面没有什么语句,仅仅是一些变量的定义。

    if (getsecuritylevel() == 0) //如果当前级别为0,那么就调整为1

    setsecuritylevel(1);

    }

    state_func_t single_user(void)

    {

    …//前面没有什么语句,仅仅是一些变量的定义。

    if (getsecuritylevel() > 0) //这个判断说明内核处于安全保护之下,那么进入单用户后将安全级别降为0,否则单用户就什么也做不了

    setsecuritylevel(0);

    }

    由上面的代码可见,安全级别为0就是一个占位符的作用,提示init一会一旦进入多用户就将安全级别升为1,除此之外它和安全级别-1没有任何区别。深入到了init内部,是不是对安全级别的控制有了一些新的认识呢?init进程并没有什么神力,只不过是内核将这个单点控制权给了1号进程而已。

  • FreeBSD中显示Apache进程运行情况脚本

    在FreeBSD中查看进程情况最常用的就是ps命令了,我们当然可以利用ps来查看apache进程运行的情况(假定apache的运行用户为www)脚本如下:

    ps -U www -axo comm,pcpu,pmem,vsz,rss,mwchan | awk ‘/^httpd/ {++state[$NF];cpu+=$2;mem+=$3;vsz+=$4;rss+=$5;} END {for(key in state){total+=state[key];print(key,”\t”,state[key]);}print(“total\t” total “\ncpu\t” cpu “%\nmem\t” mem “%\nvsz\t” vsz “k\nrss\t” rss “k”);}’

    输出大致结果如下:

    select 1

    accept 9

    total 10

    cpu 7.1%

    mem 6.1%

    vsz 227152k

    rss 128768k

    呵呵,这样便看到了apache的进程运行的统计情况了。