从Linux到Solaris(安全加固,性能监控)

  第七章:安全与加固

安全啊安全,兄弟们,任何一台挂在网络上的系统都需要进行安全加固滴,否则后果自负!

系统的安全性涉及许多方面,从初步加固到对补丁和漏洞进行审查等等,但根本目的都是为了保证数据的三性:完整性(一致性)、保密性、可用性。关于安全方面的内容你可能需要到专门的安全论坛获取专业资料,本文仅讨论一些管理员所必须知道的概念性的常识。

内容包括:
  • 加固工具
  • 最低权限
  • 审计工具
  • 加固和删除服务
  • 内核安全性优化
本文中涉及到安全加固的思想/思路同样也适用于其他的任何一种已联网的操作系统(虽然具体操作不同),包括windows,linux,aix,hp-ux.....

详见http://docs.sun.com的文档:《系统管理指南:安全性服务》



1、加固工具

QUOTE:
通用工具
  • TCP Wrappers
著名的安全访问控制工具,可通过/etc/hosts.allow,hosts.deny对允许受访的服务以及来访的源进行控制,并记录源IP,账号名等登录成功/失败信息。Solaris 9 &10和Linux均已内置这个功能,Solaris中对应的软件包名为SUNWtcpd

防火墙
  • Linux常用iptable
  • Solaris常用ipfilter,Solaris 10已内置这个软件包
Solaris常见的一些加固工具
  • Solaris Security Toolkit
SST(Solaris安全性工具箱)的前身为JASS(Jumpstart Architecture and Security Scripts)。SST能够以一种自动的,可扩展的,可伸缩的机制维护一个安全的Solaris系统。JASS脚本可以审计并加固solaris.
详见: http://www.sun.com/software/security/jass/
  • Role Based Access Control
RBAC实用工具可让管理员通过分配角色和特权给系统中的普通用户达到管理任务分散的目地,同时这些管理任务不再需要使用root账号从而降低了安全风险。
详见: http://www.sun.com/bigadmin/feat ... east_privilege.html
  • Basic Auditing and Reporting Tool
BART(基本审计和报告工具)的设计目的是为了监视文件系统并查看文件的内容变换情况。BART能够查看系统中的文件并记录它们的信息从而得知文件是否有变化。
BART的功能类似于商业版本的Tripwire软件(著名的文件完整性检查监控软件)的简化版
详见bart的manpage.

作者保留版权,转载请注明出处,来自 cu-yuhuohu.

2、最低权限

QUOTE:
Unix系统中通常有大量进程需要以完全root权限运行,这些进程需要访问设备,修改进行,处理受限的文件,以及访问其他受限的资源等等
如果所有的这些进程均以完全root权限运行会导致潜在的安全威胁。这些进程的任一个进程如果被攻击者控制,攻击者将获得对系统的完全root权限。
  • Solaris 10设计了最低权限运行的策略。最低权限特性能够让管理员以满足一个应用程序正常运作的最低权限运行该应用,并把其他无需的特权全部删除。一个进程可设置的特权大约有50种。
关于Solaris 10的最低权限功能及可用的特权说明,详见:
  • http://www.sun.com/bigadmin/features/articles/least_privilege.html

3、审计工具

QUOTE:
可以在Linux上使用的审计工具大部分也都有for Solaris的版本。比如
  • tripwire 主要用于监视重要文件的变化
    • http://www.sun.com/software/security/tripwire/
  • crack and John the Ripper 主要用于检查弱密码问题(复杂性不够,长度不够等等)
    • ftp://ftp.cert.dfn.de/pub/tools/password/Crack/
    • http://www.openwall.com/john/

4、加固和删除服务

QUOTE:
加固Linux或Solaris机器的步骤基本相同
  • 如果不想启动哪项服务,就把在/etc/rc*.d/目录下对应的文件删除(当然建议你先备份)
  • 如果是受inetd控制的服务,可把相关配置从Inetd的配置中删除或注释
    • solaris 9的inetd配置文件为/etc/inetd.conf
    • solaris10可直接用inetadm -d service_name or svcadm disable service_name命令禁用相应的服务

5、内核安全性调整

QUOTE:
solaris有两种方法可防止堆栈缓冲溢出
  • 全局性设置:在/etc/system中设置noexec_user_stack.所有的应用将均采用这个选项的设置运行
  • 个别性设置:对单独某个应用,可将其和/usr/lib/ld/map.noexstk映射文件建立关联。
关于/etc/system文件的noexec_user_stack选项的设置,详见:《Solaris 可调参数参考手册》

http://docs.sun.com/app/docs/doc/817-0404/6mg74vs9h?a=view

第八章:性能监控

性能监控对服务器管理员来讲至关重要,通常我们需要监控机器的CPU,内存,磁盘,以及网络流量等。主要包括:

  • 处理器
  • 内存
  • 网络
  • 磁盘,卷和文件系统
  • 系统和用户进程
  • 输入输出(I/O,input/output)

如果需要更深入的了解瓶颈所在,可使用dtrace工具。 OpenSolaris DTrace Community提供了一些专注于此方面的dtrace脚本,可在执行性能调优时使用。

第一节:处理器监控

QUOTE:
1、solaris

查看处理器状态,psrinfo显示处理器每个核(core)的状态信息

-bash-3.00$ /usr/sbin/psrinfo
0       on-line   since 10/13/2007 02:30:32
1       on-line   since 10/13/2007 02:30:33
2       on-line   since 10/13/2007 02:30:33
....
查看处理器的详细信息

-bash-3.00$ /usr/sbin/psrinfo -v
Status of virtual processor 0 as of: 12/27/2007 09:39:37
  on-line since 10/13/2007 02:30:32.
  The sparcv9 processor operates at 1000 MHz,
        and has a sparcv9 floating point processor.
Status of virtual processor 1 as of: 12/27/2007 09:39:37
  on-line since 10/13/2007 02:30:33.
  The sparcv9 processor operates at 1000 MHz,
        and has a sparcv9 floating point processor.
....


来个中文的:
bash-3.00$ /usr/sbin/psrinfo -v
虚拟处理器 0 在下列时间的状态:12/27/2007 13:14:53
  自 12/27/2007 12:59:29 开始已在运行。
  i386 处理器以 1333 MHz 运行,
        而且有 i387 compatible 浮点数处理器

查看每个处理器(同样以核为单位)的统计信息,用mpstat命令

bash-3.00$ mpstat 2 5
CPU minf mjf xcal  intr ithr  csw icsw migr smtx  srw syscl  usr sys  wt idl
  0 1058  21    0   309  224 1029   65    0    5    0  2825   16  35   0  49
  0    8   0    0   345  245  217    2    0    1    0    62    0   2   0  98
  0   10   0    0   343  244  209    1    0    1    0    64    0   2   0  98
  0    0   0    0   478  378  498   68    0   67    0    54    0  11   0  89
  0    0   0    0   346  245  208    1    0    1    0    60    0   1   0  99


输出中,一般看最后四个字段:usr,sys,wt,idl。idl不低于30基本没事,sys如果常高于15需引起注意,wt是历史遗留字段对于solaris10而言总是0。其他几个常见字段:

  • xcal   多个处理器间交叉调用的次数
  • csw   处理器执行上下文交换的次数
  • syscl 本处理器执行系统调用的次数

注意:mpstat之类的按时间与次数的采样工具的输出第一行是自系统启动以来的汇总平均值统计

此外,kstat命令也可以用来收集处理器的信息:

bash-3.00$ kstat -m cpu
module: cpu                             instance: 0     
name:   intrstat                        class:    misc
        crtime                          29.699815013
        level-1-count                   65517
        level-1-time                    991179530
        level-10-count                  163269
        level-10-time                   97182752330
        level-11-count                  0
        level-11-time                   0
        level-12-count                  2
        level-12-time                   238486
        ......


2、redhat

查看处理器状态,用dmesg从启动信息中查看处理器每个核(core)的状态信息

[root@es4u5 ~]# dmesg | grep -i cpu
Initializing CPU#0
CPU: L1 I Cache: 64K (64 bytes/line), D cache 64K (64 bytes/line)
CPU: L2 Cache: 512K (64 bytes/line)
CPU: AMD Athlon(tm) 64 Processor 3200+ stepping 02
ACPI: Processor [CPU0] (supports C1, 8 throttling states)
Losing some ticks... checking if CPU frequency changed.[/fiont]

查看处理器的详细信息
[root@es4u5 ~]# cat /proc/cpuinfo
processor       : 0
vendor_id       : AuthenticAMD
cpu family      : 15
model           : 47
model name      : AMD Athlon(tm) 64 Processor 3200+
stepping        : 2
cpu MHz         : 1329.309
cache size      : 512 KB
fpu             : yes
fpu_exception   : yes
cpuid level     : 1
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 syscall nx mmxext lm 3dnowext 3dnow pni
bogomips        : 2671.67
TLB size        : 1088 4K pages
clflush size    : 64
cache_alignment : 64
address sizes   : 36 bits physical, 48 bits virtual
power management: ts fid vid ttp [4] [5]



作者保留版权,转载请注明出处,来自cu-yuhuohu.


第二节:内存

QUOTE:
1、solaris

solaris通常使用vmstat命令来查看系统的虚拟内存子系统的状态信息。vmstat可显示swap,物理内存,分页错误,磁盘信息统计和错误等信息.

bash-3.00$ vmstat 2 3
kthr      memory            page            disk          faults      cpu
r b w   swap  free  re  mf pi po fr de sr f0 s0 s1 s2   in   sy   cs us sy id
0 0 0 730888 228436 43 196 62  1  1  0 38  0  6  0  0  313  557  343  3 10 87
0 0 0 731096 221556  3  25  0  0  0  0  0  0  0  0  0  341  111  208  0  3 97
0 0 0 731092 221548  0   0  0  0  0  0  0  0  0  0  0  334   90  205  8  3 89

【注意】
swap为空余的swap空间(此处的swap为总的swap空间而不仅仅指swap分片的空间),free为空余的可用物理内存


列出用于交换空间的硬盘分片或文件的使用情况:


bash-3.00# swap -l
交换文件             dev  swaplo blocks   free
/dev/dsk/c1t0d0s3   54,3       8 1048568 1048568


列出交换空间的总体使用情况:

bash-3.00# swap -s
总数:分配了 113024k 字节 + 保留 15340k = 已使用 128364k,730172k 可用

查看内存分页的汇总情况

bash-3.00# echo ::memstat | mdb -k
Page Summary                Pages                MB  %Tot
------------     ----------------  ----------------  ----
Kernel                      27734               108   22%
Anon                        29908               116   23%
Exec and libs                5862                22    5%
Page cache                  12306                48   10%
Free (cachelist)            18780                73   15%
Free (freelist)             34320               134   27%

Total                      128910               503


此外还可以使用kstat查看内存的详细信息(以每个内存模块为单位)

$ kstat -m vmem | more
module: vmem                            instance: 1     
name:   heap                            class:    vmem
        alloc                           6254
        contains                        0
        contains_search                 0
        crtime                          0
        fail                            0
        free                            1200
        lookup                          113
        mem_import                      0
        mem_inuse                       86376448
        mem_total                       1646524366848
        populate_fail                   0
        populate_wait                   0
        search                          4381
        snaptime                        2441.858424006
        vmem_source                     0
        wait                            0
        ......

2、redhat

[root@es4u5 ~]# vmstat 2 3

procs -----------memory---------- ---swap-- -----io---- --system-- ----cpu----
r  b   swpd   free   buff  cache   si   so    bi    bo   in    cs us sy id wa
0  0      0  16068  44764  99016    0    0    19     4 1015    31  0  3 96  0
0  0      0  16068  44764  99016    0    0     0     0 1011    16  0  1 100  0
0  0      0  16068  44764  99016    0    0     0     0 1012    19  0  1 99  0



# free                                --------------列出内存的使用汇总情况
             total       used       free     shared    buffers     cached
Mem:        251016     235008      16008          0      44792      99032
-/+ buffers/cache:      91184     159832
Swap:       786424          0     786424


# cat /proc/meminfo        --------------列出内存的详细状态信息

MemTotal:       251016 kB
MemFree:        134464 kB
Buffers:         10988 kB
Cached:          54648 kB
SwapCached:          0 kB
Active:          51288 kB
Inactive:        35008 kB
HighTotal:           0 kB
HighFree:            0 kB
LowTotal:       251016 kB
LowFree:        134464 kB
SwapTotal:      786424 kB
SwapFree:       786424 kB
Dirty:              44 kB
Writeback:           0 kB
Mapped:          32428 kB
Slab:            19236 kB
CommitLimit:    911932 kB
Committed_AS:    90048 kB
PageTables:       3704 kB
VmallocTotal: 536870911 kB
VmallocUsed:      1804 kB
VmallocChunk: 536868343 kB
HugePages_Total:     0
HugePages_Free:      0
Hugepagesize:     2048 kB



作者保留版权,转载请注明出处,来自cu-yuhuohu.


第三节:网络负荷监控

QUOTE:
1、solaris

最常见的都是用netstat命令,且redhat和solaris的常见使用方法基本一致。netstat命令可用来查看路由表、当前活跃的网络连接、各种网络数据结构、流内存统计,接口状态、DHCP等信息。常见的使用方式有:


  • netstat -rn   看路由
  • netstat -in   看流量统计
  • netstat -an  看连接信息
  • netstat -pn  看ARP解析表(MAC-IP映射表)


此外,solaris可以使用kstat命令查看网络信息

bash-3.00$ kstat -m e1000g | more                             模块(-m)可填网卡驱动类型,比如e1000g,e1000g0,bge,hme...
module: e1000g                          instance: 0     
name:   e1000g0                         class:    net
        brdcstrcv                       0
        brdcstxmt                       0
        collisions                      0
        crtime                          43.023212228
        ierrors                         0
        ifspeed                         1000000000
        ipackets                        3421
        ipackets64                      3421
        ......


2、redhat

使用netstat命令,基本同solaris。区别在于-p选项

redhat的netstat -pn:显示每个socket所属的程序名和进程ID



作者保留版权,转载请注明出处,来自cu-yuhuohu.


第四节:磁盘,卷和文件系统监控

QUOTE:
1、solaris

查看文件系统空间

#df -h
文件系统               大小   用了   可用 容量      挂接在
/dev/dsk/c1t0d0s0      480M   278M   154M    65%    /
/devices                 0K     0K     0K     0%    /devices
ctfs                     0K     0K     0K     0%    /system/contract
proc                     0K     0K     0K     0%    /proc
......


查看文件系统类型

# fstyp /dev/rdsk/c1t0d0s1
ufs


2、redhat

redhat的df命令有个-T选项,可方便的查看文件系统类型

# df -hT
Filesystem    Type    Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup00-LogVol00
              ext3   1008M  179M  779M  19% /
/dev/sda1     ext3     99M   11M   84M  11% /boot
none         tmpfs    123M     0  123M   0% /dev/shm
/dev/mapper/VolGroup00-LogVol04
              ext3    1.1G   34M 1013M   4% /home
/dev/mapper/VolGroup00-LogVol02
              ext3    4.0G  2.1G  1.8G  55% /usr
/dev/mapper/VolGroup00-LogVol03
              ext3   1008M   90M  868M  10% /var


# fdisk -l                                --------------会列出系统认到的所有硬盘和U盘的分区信息

Disk /dev/cciss/c0d0: 146.7 GB, 146778685440 bytes
255 heads, 63 sectors/track, 17844 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

           Device Boot      Start         End      Blocks   Id  System
/dev/cciss/c0d0p1   *           1         261     2096451   83  Linux
/dev/cciss/c0d0p2             262        8094    62918572+  83  Linux
/dev/cciss/c0d0p3            8095       12271    33551752+  82  Linux swap
/dev/cciss/c0d0p4           12272       17844    44765122+   5  Extended
/dev/cciss/c0d0p5           12272       14360    16779861   83  Linux
/dev/cciss/c0d0p6           14361       16449    16779861   83  Linux
/dev/cciss/c0d0p7           16450       16971     4192933+  83  Linux
/dev/cciss/c0d0p8           16972       17493     4192933+  83  Linux


solaris中类似的命令为prtvtoc,可列出指定磁盘的分区信息:

# prtvtoc /dev/rdsk/c1t0d0s2
* /dev/rdsk/c1t0d0s2 partition map
*
* Dimensions:
*     512 bytes/sector
*      32 sectors/track
*     128 tracks/cylinder
*    4096 sectors/cylinder
*    4094 cylinders
*    4092 accessible cylinders
*
* Flags:
*   1: unmountable
*  10: read-only
*
*                          First     Sector    Last
* Partition  Tag  Flags    Sector     Count    Sector  Mount Directory
       0      2    00    1052672   1048576   2101247   /
       1      7    00    2101248   1273856   3375103   /var
       2      5    00          0  16760832  16760831
       3      3    01       4096   1048576   1052671
       5      0    00    3375104   1048576   4423679   /opt
       6      4    00    4423680  11288576  15712255   /usr
       7      8    00   15712256   1048576  16760831   /export/home
       8      1    01          0      4096      4095



作者保留版权,转载请注明出处,来自cu-yuhuohu.


第五节:系统和用户进程监控

QUOTE:
1、solaris

# prstat

2、redhat

# top

Solaris没有自带top工具,如果要用top命令,需要到 http://www.sunfreeware.com/ 下载对应版本的top工具包安装。


作者保留版权,转载请注明出处,来自cu-yuhuohu.


第六节:输入输出(I/O)监控

QUOTE:
1、solaris

# iostat 30 5             隔30秒采集一次,共采集5次

输出的一行,照例还是汇总平均值

2、redhat

# vmstat 30 5
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值