在你开始前

关于本教程

本教程适用于希望更好地了解AIX中的网络服务以及每个服务对系统安全性的影响的AIX系统管理员。 负责以某种方式连接到公共网络的RS / 6000的管理员可以使用本教程中的信息来实现功能和安全性之间的必要平衡。

本演示文稿中未使用任何第三方工具; 仅探讨和解决了所有AIX系统可用的组件。 真正的安全模型不仅仅需要关闭服务和修改配置文件,而且,本教程为实现完整系统完整性的目标提供了坚实的基础。

关于本教程中的示例

本教程中的示例在完整安装了AIX 4.3.3(维护级别08)的IBM RS / 6000上运行。主机上没有放置AIX安装介质上可用的软件。 本教程中讨论的所有实践和配置在运行AIX 5L(5.1 ML 01)的生产系统上均同样适用(并已得到确认)。

重要的是要了解对系统配置进行任何更改的潜在影响; 在处理与安全相关的问题时尤其如此。 在对生产系统进行任何修改之前,请确保已首先在适当的开发环境中对更改进行了测试。 撞击时,请始终备份系统,系上安全带并合上盖板。

了解安全性

问题是什么?

AIX(或几乎任何操作系统)的常规安装都包含令人眼花services乱的服务。 其中一些服务至关重要:例如,如果没有telnetd守护程序处于活动状态,将无法远程登录系统。 但是,其中许多服务是在Internet变得更小的时候开发的,而黑客和其他试图获得未经授权的访问者所感知的危险被认为远不及轻松的远程访问和简单的身份验证方法带来的好处。

当今的计算环境更加危险:连接到Internet的主机数量呈指数增长,并且随着这种增长,访问和破坏计算机的尝试已成为司空见惯的事件。 安全不足的系统可能会很快受到威胁; 一旦攻击者获得了对系统的访问权限,存储在其中的信息将不再是私有的,并且其内容也将无法被信任。

它是怎么发生的?

从定义上讲,任何受到远程攻击者破坏的系统都拥有针对它的自己的网络连接。 其中一些攻击利用了网络守护程序特定版本中的错误。 其他攻击之所以成功,是因为它们利用了特定协议中的一个已知弱点,该弱点是运行该服务的所有系统所共有的。

重要的是,不仅要评估所有活动的网络服务在执行必要任务方面的有用性,而且还要评估其缺点或漏洞,这一点很重要。 平衡每项服务的优缺点可能很困难,但这是确保系统安全的关键部分。

野蛮人在插座

缺省的AIX安装提供了许多服务,每个服务负责监听至少一个端口。 下表详细列出了每个打开的端口,绑定到该端口的系统守护程序以及启动该守护程序的配置文件。

7 tcp echo /usr/sbin/inetd /etc/inetd.conf
7 udp echo /usr/sbin/inetd /etc/inetd.conf
9 tcp discard /usr/sbin/inetd /etc/inetd.conf
9 udp discard /usr/sbin/inetd /etc/inetd.conf
13 tcp daytime /usr/sbin/inetd /etc/inetd.conf
13 udp daytime /usr/sbin/inetd /etc/inetd.conf
19 tcp chargen /usr/sbin/inetd /etc/inetd.conf
19 udp chargen /usr/sbin/inetd /etc/inetd.conf
21 tcp ftp /usr/sbin/ftpd /etc/inetd.conf
23 tcp telnet /usr/sbin/telnetd /etc/inetd.conf
25 tcp smtp /usr/sbin/sendmail /etc/rc.tcpip
37 tcp time /usr/sbin/inetd /etc/inetd.conf
37 udp time /usr/sbin/inetd /etc/inetd.conf
67 udp bootps /usr/sbin/bootpd /etc/inetd.conf
111 tcp sunrpc /usr/sbin/portmap /etc/rc.tcpip
111 udp sunrpc /usr/sbin/portmap /etc/rc.tcpip
161 udp snmp /usr/sbin/snmpd /etc/rc.tcpip
177 udp xdmcp /usr/dt/bin/dtlogin (spawned by /etc/rc.dt) /etc/inittab
199 tcp smux /usr/sbin/dpid2 /etc/rc.tcpip
512 tcp exec /usr/sbin/rexecd /etc/inetd.conf
513 tcp login /usr/sbin/rlogind /etc/inetd.conf
514 tcp shell /usr/sbin/rshd /etc/inetd.conf
514 udp syslog /usr/sbin/syslogd /etc/rc.tcpip
518 udp ntalk /usr/sbin/talkd /etc/inetd.conf
543 tcp klogin /usr/sbin/krlogind /etc/inetd.conf
544 tcp kshell /usr/sbin/krshd /etc/inetd.conf
1001 tcp rpc.statd /usr/sbin/rpc.statd /etc/rc.nfs
1001 udp rpc.statd /usr/sbin/rpc.statd /etc/rc.nfs
1002 tcp rpc.statd /usr/sbin/rpc.statd /etc/rc.nfs
1002 udp rpc.statd /usr/sbin/rcp.statd /etc/rc.nfs
1234 tcp instsrv /home/netinst/bin/instsrv /etc/inetd.conf
2401 tcp writesrv /usr/sbin/writesrv /etc/inittab
6000 tcp X11 /usr/lpp/X11/bin/X (spawned by /etc/rc.dt) /etc/inittab
6112 tcp dtspc /usr/dt/bin/dtspcd /etc/inetd.conf
32768 tcp dtlogin /usr/dt/bin/dtgreet (spawned by /etc/rc.dt) /etc/inittab
32769 tcp rpc.ttdbserver /usr/dt/bin/rpc.ttdbserver /etc/inetd.conf
32772 tcp dpid2 /usr/sbin/dpid2 /etc/rc.tcpip
32785 udp cmsd /usr/dt/bin/rpc.cmsd /etc/inetd.conf
49213 tcp httpd /usr/IMNSearch/httpdlite/httpdlite /etc/inittab

该怎么办?

强化AIX系统的网络服务有两个基本步骤:

  1. 禁用不必要的服务。

    目的在于服务网站的系统是否还应该在其上运行邮件服务器? 如果数据中心不会使用从网络源引导系统的功能,那么提供该服务的守护程序是否应该处于活动状态? 显然,这两个问题的答案都不是。 如果网络服务正在运行,但没有用处,则应将其关闭。

  2. 配置其余服务以确保安全运行。

    当然,不可能关闭所有服务。 (如果可能,则组织需要重新考虑其对信息技术的使用。)但是,可以通过将那些活动服务配置为以安全方式运行来减轻潜在的风险。 在理想情况下,默认配置也将是安全配置。 可悲的是,世界并不完美。

禁用不必要的服务

网络服务从哪里开始?

在AIX系统上,网络服务通常以以下四种方式之一启动:

  1. /etc/inittab file的条目。 这些服务在系统启动时被激活,并且取决于所使用的方法,如果被杀死,它们可能会自动重生。
  2. /etc/rc.tcpip文件中的条目。 此Shell脚本是在系统启动期间通过/etc/inittab的条目执行的,它负责启动大量标准网络守护程序。
  3. /etc/inetd.conf文件中的条目。 inetd守护程序(超级服务器)的此配置文件包含许多有用且可能必要的服务条目,但在安全环境中还包含许多可疑的价值。
  4. 通过用户手动调用命令。 绑定到大于1024的端口号并接受来自网络的连接的程序不必由root用户运行。 任何具有登录系统能力的用户都可以运行自己的网络服务。

如果要保护系统免受源自网络的攻击,则必须检查上述每种方法的不安全或不必要的服务。

/etc/inittab概述

以下清单是默认的/etc/inittab的节选。

init:2:initdefault:
brc::sysinit:/sbin/rc.boot 3 >/dev/console 2>&1 # Phase 3 of system boot
powerfail::powerfail:/etc/rc.powerfail 2>&1 | alog -tboot > /dev/console # Power Failure Detection
mkatmpvc:2:once:/usr/sbin/mkatmpvc >/dev/console 2>&1
atmsvcd:2:once:/usr/sbin/atmsvcd >/dev/console 2>&1
load64bit:2:wait:/etc/methods/cfg64 >/dev/console 2>&1 # Enable 64-bit execs
rc:2:wait:/etc/rc 2>&1 | alog -tboot > /dev/console # Multi-User checks
fbcheck:2:wait:/usr/sbin/fbcheck 2>&1 | alog -tboot > /dev/console # run /etc/firstboot
srcmstr:2:respawn:/usr/sbin/srcmstr # System Resource Controller
rcnetw:2:wait:/etc/rc.netware #start Netware
cnsview:2:wait:/usr/bin/cnsview -c "daemon start" >/dev/console 2>&1 # Start cnsview daemon
rctcpip:2:wait:/etc/rc.tcpip > /dev/console 2>&1 # Start TCP/IP daemons
rcnfs:2:wait:/etc/rc.nfs > /dev/console 2>&1 # Start NFS Daemons
cron:2:respawn:/usr/sbin/cron
piobe:2:wait:/usr/lib/lpd/pio/etc/pioinit >/dev/null 2>&1  # pb cleanup
qdaemon:2:wait:/usr/bin/startsrc -sqdaemon
writesrv:2:wait:/usr/bin/startsrc -swritesrv
uprintfd:2:respawn:/usr/sbin/uprintfd
logsymp:2:once:/usr/lib/ras/logsymptom # for system dumps
httpdlite:2:once:/usr/IMNSearch/httpdlite/httpdlite -r /etc/IMNSearch/httpdlite/httpdlite.conf \& >/dev/console 2>&1
diagd:2:once:/usr/lpp/diagnostics/bin/diagd >/dev/console 2>&1
imnss:2:once:/usr/IMNSearch/bin/imnss -start imnhelp >/dev/console 2>&1
imqss:2:once:/usr/IMNSearch/bin/imq_start >/dev/console 2>&1
pmd:2:wait:/usr/bin/pmd > /dev/console 2>&1 # Start PM daemon
dt:2:wait:/etc/rc.dt
cons:0123456789:respawn:/usr/sbin/getty /dev/console
l2:2:wait:/etc/rc.d/rc 2
l3:3:wait:/etc/rc.d/rc 3
l4:4:wait:/etc/rc.d/rc 4
l5:5:wait:/etc/rc.d/rc 5
l6:6:wait:/etc/rc.d/rc 6
l7:7:wait:/etc/rc.d/rc 7
l8:8:wait:/etc/rc.d/rc 8
l9:9:wait:/etc/rc.d/rc 9

与AIX中的大多数配置文件不同, 不能通过在行首放置井号(#)来禁用/etc/inittab条目。 要禁用inittab条目,必须将其从文件中删除,将冒号(:)作为该行的第一个字符,或者将操作字段的值设置为Off。 也可以通过chitab命令对/etc/inittab进行chitab 。 条目可以使用rmitab命令删除。

对此文件进行更改之前,请确保有一个良好的备份副本,因为inittab文件的问题可能会阻止系统启动。

编辑/etc/inittab条目

  • rcnetw:2:wait:/etc/rc.netware #start Netware

    rcnetw条目执行/etc/rc.netware脚本,该脚本反过来为Novell NetWare网络协议加载驱动程序。 如果NetWare将不与该系统一起使用,则可以安全地禁用或删除该条目。

    rctcpip:2:wait:/etc/rc.tcpip > /dev/console 2>&1 # Start TCP/IP daemons

    大多数独立网络守护程序都是从/etc/rc.tcpip shell脚本中启动的,该脚本在启动时通过inittab条目执行。 该脚本的内容和由其启动的服务将在本教程中进一步详细讨论。

  • rcnfs:2:wait:/etc/rc.nfs > /dev/console 2>&1 # Start NFS Daemons

    NIS / YP和NFS服务由/etc/rc.nfs脚本启动。 但是,默认情况下,启动NIS的行被注释掉,除非使用NIS,否则应保持禁用状态。

    在通过NFS挂载(作为客户端)或导出(作为服务器)文件系统的系统上,需要biod守护程序。

    rpc.statdrpc.lockd提供某些应用程序使用的锁定和崩溃恢复。 这两个守护程序都存在安全问题,导致系统受损。 尽管不知道最新发行的AIX附带的rpc.statdrpc.lockd版本是易受攻击的,但是这些守护程序通常是不必要的,并且通常可以被禁用,而对使用NFS挂载的文件系统没有不良影响。

    如果满足两个条件,则将启动NFS服务器功能:

    1. 程序/usr/sbin/nfsd存在并且可执行。
    2. 文件/etc/exports存在。

    如果系统不打算提供NFS服务,请通过从nfsd守护程序中删除可执行位或更改其名称,确保至少不满足列出的两个条件之一。 如果系统根本不使用NIS或NFS,则可以安全地禁用或删除/etc/inittab rcnfs的条目。

  • writesrv:2:wait:/usr/bin/startsrc -swritesrv

    writesrv条目使远程计算机上的用户能够使用write命令将消息发送给本地系统上的用户。 在连接到公共网络的任何系统上,都应禁用或删除此条目。 请注意,禁用writesrv服务不会阻止用户在本地系统上相互传递消息。

  • httpdlite:2:once:/usr/IMNSearch/httpdlite/httpdlite -r /etc/IMNSearch/httpdlite/httpdlite.conf & >/dev/console 2>&1
  • imnss:2:once:/usr/IMNSearch/bin/imnss -start imnhelp >/dev/console 2>&1
  • imqss:2:once:/usr/IMNSearch/bin/imq_start >/dev/console 2>&1

    上面的三个inittab条目包括AIX文档搜索服务,它提供了一个用于浏览和搜索AIX文档的网站界面。 不必在网络中的所有系统上运行此服务,并且IBM随该服务器提供的Web服务器的功能受到很大限制。 这些条目应被禁用或从/etc/inittab删除。

  • dt:2:wait:/etc/rc.dt

    /etc/rc.dt程序启动CDE图形窗口服务器。 除了耗尽宝贵的资源之外,过去,通用桌面环境还是许多安全漏洞的来源。 尽管最新版本没有已知问题,但除非特别需要CDE,否则应禁用或删除此条目。

  • l2:2:wait:/etc/rc.d/rc 2
  • l3:3:wait:/etc/rc.d/rc 3
  • l4:4:wait:/etc/rc.d/rc 4
  • l5:5:wait:/etc/rc.d/rc 5
  • l6:6:wait:/etc/rc.d/rc 6
  • l7:7:wait:/etc/rc.d/rc 7
  • l8:8:wait:/etc/rc.d/rc 8
  • l9:9:wait:/etc/rc.d/rc 9

IBM将上述inittab条目添加到AIX 4.3.3,以使AIX对Linux和Solaris系统的管理员更加友好。 它们提供了一组目录,应用程序启动脚本可以放入这些目录,并在进入给定的运行级别(即基于System-V的Unix系统)时调用。 尽管缺省情况下在AIX 4.3.3上没有由这些条目启动的服务,但是系统管理员必须知道它们存在,并且可能被系统上具有root访问权的其他人意外使用。

除非有计划将这种System-V改编用于AIX启动过程,否则应禁用这些条目或从inittab删除这些条目,并且应删除或重​​命名目录/etc/rc.d以避免误解。

/etc/rc.tcpip的概述

/etc/rc.tcpip脚本的以下摘录指示在默认AIX安装中启动或禁用的服务。

echo "Starting tcpip daemons:"
trap 'echo "Finished starting tcpip daemons."' 0# Start up dhcpcd daemon
#start /usr/sbin/dhcpcd "$src_running"# Start up autoconf6 process
#start /usr/sbin/autoconf6 "" # Start up ndpd-host daemon
#start /usr/sbin/ndpd-host "$src_running"# Start up the ndpd-router daemon
#start /usr/sbin/ndpd-router "$src_running"# Start up syslog daemon (for error and event logging)
start /usr/sbin/syslogd "$src_running"# Start up print daemon
#start /usr/sbin/lpd "$src_running"# Start up routing daemon (only start ONE)
#start /usr/sbin/routed "$src_running" -q
#start /usr/sbin/gated "$src_running"# Start up the sendmail daemon.qpi=30m  # 30 minute intervalstart /usr/lib/sendmail "$src_running" "-bd -q${qpi}"# Start up Portmapper
start /usr/sbin/portmap "$src_running"# Start up socket-based daemons
start /usr/sbin/inetd "$src_running"# Start up Domain Name daemon
#start /usr/sbin/named "$src_running"# Start up time daemon
#start /usr/sbin/timed "$src_running"# Start up Network Time Protocol (NTP) daemon
#start /usr/sbin/xntpd "$src_running"# Start up rwhod daemon (a time waster)
#start /usr/sbin/rwhod "$src_running"# Start up the Simple Network Management Protocol (SNMP) daemon
start /usr/sbin/snmpd "$src_running"# Start up the DHCP Server
#start /usr/sbin/dhcpsd "$src_running"# Start up the DHCP Relay Agent
#start /usr/sbin/dhcprd "$src_running"# Start up the DPID2 daemon
start /usr/sbin/dpid2 "$src_running"# Start up the mrouted daemon
#start /usr/sbin/mrouted "$src_running"# Start up the atm subagnet daemon muxatmd
#start /usr/sbin/muxatmd "$src_running"
/usr/lpp/x_st_mgr/bin/x_st_mgrd -b /usr/lpp/x_st_mgr/bin/x_st_mgrd.cf -s x_st_mgrd

由于/etc/rc.tcpip是Korn Shell脚本,因此可以通过在行首放置井号(#)或完全删除该行来禁用项。

配置/etc/rc.tcpip

  • start /usr/sbin/syslogd "$src_running"

    syslog守护程序提供了一种用于处理来自系统上运行的各种应用程序的消息和错误的工具。 Syslogd默认在AIX上启动; 这是一件好事。 不幸的是,默认配置不会记录守护程序收到的任何消息。 本教程后面将讨论配置syslog守护程序。

  • start /usr/lib/sendmail "$src_running" "-bd -q${qpi}"

    通过/etc/rc.tcpip脚本以守护程序模式启动Sendmail; 在此缺省配置中,AIX系统提供SMTP服务,没有任何限制或认证。 除非系统管理员纠正这一不幸的事实,否则该系统将用作中继,将大量垃圾邮件路由到整个Internet上的用户,并引起所述邮件收件人的愤怒。 本教程后面将讨论以安全方式运行sendmail。 在读者准备好解决正确配置的问题之前,应通过在rc.tcpip将此行注释掉来禁用sendmail。

  • start /usr/sbin/portmap "$src_running"

    portmap守护程序负责报告系统上运行的所有远程过程调用(RPC)服务器正在使用的端口号。 一些常见的RPC服务器包括NFS中涉及的服务器(客户端和服务器),以及inetd守护程序启动的许多项目,包括rstatdrexd以及其他具有可疑价值和高安全漏洞风险的项目。 如果在查看系统上正在使用的活动服务之后,管理员确定没有使用RPC的服务,则应将该守护程序注释掉或从rc.tcpip脚本中删除。

  • start /usr/sbin/inetd "$src_running"

    inetd服务器是超级服务器,它负责侦听多个端口并通过生成适当的程序来响应对网络服务的请求,如配置文件/etc/inetd.conf所指定。 inetd以其默认配置提供的大量服务不应在连接到公共网络的系统上运行,因为该服务使用的身份验证和授权方法存在缺陷,或者是由于应用程序中存在安全问题的历史记录提供服务。 本教程的稍后部分将介绍inetd正确配置。 如果在查看了inetd提供的服务之后,管理员确定系统可以正常运行的项目需要更好的替代品,则可以通过注释掉或从rc.tcpip脚本中删除该条目来禁用inetd守护程序。

  • start /usr/sbin/snmpd "$src_running"
  • start /usr/sbin/dpid2 "$src_running"

    snmpddpid2守护程序均提供简单网络管理协议(SNMP)服务,该服务可用于监视系统状态,但它们的设计没有良好的安全模型,并且具有多个已知漏洞。 除非系统在将SNMP请求限制在本地网络的防火墙后面保护安全,否则应通过注释掉或删除rc.tcpip的条目来禁用这两项服务。

    特别是,应该始终禁用dpid2守护程序,因为它是早期SNMP开发的过时保留,并且不再提供任何有用的服务。

  • /usr/lpp/x_st_mgr/bin/x_st_mgrd -b /usr/lpp/x_st_mgr/bin/x_st_mgrd.cf -s x_st_mgrd

    通过安装文件集X11.x_st_mgr.rte将以上命令添加到/etc/rc.tcpip脚本中,并且该命令为IBM Xstation图形工作站提供服务。 除非RS / 6000向Xstation提供这些服务,否则应从rc.tcpip文件中删除该条目,并应从系统中删除X11.x_st_mgr.rte文件集。

/etc/inetd.conf概述

以下摘自/etc/inetd.conf列表摘录了AIX缺省安装中所有活动的服务:

ftp     stream  tcp6    nowait  root    /usr/sbin/ftpd         ftpd
telnet stream  tcp6    nowait  root    /usr/sbin/telnetd      telnetd -a
shell stream  tcp6    nowait  root    /usr/sbin/rshd         rshd
kshell stream  tcp     nowait  root    /usr/sbin/krshd        krshd
login stream  tcp6    nowait  root    /usr/sbin/rlogind      rlogind
klogin stream  tcp     nowait  root    /usr/sbin/krlogind     krlogind
exec stream  tcp6    nowait  root    /usr/sbin/rexecd       rexecd
bootps  dgram   udp     wait    root    /usr/sbin/bootpd       bootpd /etc/bootptab
tftp     dgram  udp6    SRC     nobody  /usr/sbin/tftpd         tftpd -n
ntalk   dgram   udp     wait    root    /usr/sbin/talkd         talkd
rstatd   sunrpc_udp     udp     wait    root    /usr/sbin/rpc.rstatd rstatd 100001 1-3
rusersd sunrpc_udp      udp     wait    root    /usr/lib/netsvc/rusers/rpc.rusersd rusersd 100002 1-2
rwalld   sunrpc_udp     udp     wait    root    /usr/lib/netsvc/rwall/rpc.rwalld rwalld 100008 1
sprayd   sunrpc_udp     udp     wait    root    /usr/lib/netsvc/spray/rpc.sprayd sprayd 100012 1
pcnfsd   sunrpc_udp     udp     wait    root    /usr/sbin/rpc.pcnfsd pcnfsd 150001 1-2
echo    stream  tcp     nowait  root    internal
discard stream  tcp     nowait  root    internal
chargen stream  tcp     nowait  root    internal
daytime stream  tcp     nowait  root    internal
time    stream  tcp     nowait  root    internal
echo    dgram   udp     wait    root    internal
discard dgram   udp     wait    root    internal
chargen dgram   udp     wait    root    internal
daytime dgram   udp     wait    root    internal
time    dgram   udp     wait    root    internal
ttdbserver      sunrpc_tcp      tcp     wait    root    /usr/dt/bin/rpc.ttdbserver rpc.ttdbserver 100083 1
ssalld  sunrpc_tcp      tcp     wait    root    /usr/sbin/rpc.ssalld rpc.ssalld 300667 1
instsrv stream  tcp     nowait  netinst /home/netinst/bin/instsrv instsrv -r        /tmp/netinstalllog /home/netinst/scripts
dtspc   stream  tcp     nowait  root    /usr/dt/bin/dtspcd /usr/dt/bin/dtspcd
cmsd    sunrpc_udp      udp     wait    root    /usr/dt/bin/rpc.cmsd cmsd 100068 2-5

要禁用/etc/inetd.conf文件中列出的服务,请删除该行或将井号(#)作为该行的第一个字符。 对inetd.conf更改将不生效,直到通过向进程的PID发送HUP信号或以root身份执行命令refresh -s inetd重新启动inetd守护程序为止。

配置/etc/inetd.conf

  • ftp stream tcp6 nowait root /usr/sbin/ftpd ftpd

    此项提供FTP(文件传输协议)服务,使FTP客户端可以上传和下载文件。 通常,FTP不被视为安全协议,因为它以明文形式传输用户ID,密码和数据,并且不进行加密。 可以使用安全替代方案,例如OpenSSH附带的sftp-server ,尽管它们要求使用不同的客户端程序。

    如果可以接受更安全的选择,或者不需要为系统提供下载和上传功能,则应通过删除/注释掉/etc/inetd.conf文件中的条目来禁用FTP服务器。 如果需要FTP服务,则在本教程的后面部分讨论提高服务的安全性。

  • telnet stream tcp6 nowait root /usr/sbin/telnetd telnetd -a

    telnet服务使用户能够使用标准telnet客户端远程登录系统。 与FTP服务一样,telnet协议本质上是不安全的,因为它传递的用户ID,密码和数据未经加密。 一种常见的安全替代方法是OpenSSH应用程序包的sshd组件。 如果需要提供telnet服务,则可以通过本教程后面讨论的技术来实现某种程度的安全性。

  • shell stream tcp6 nowait root /usr/sbin/rshd rshd
  • kshell stream tcp nowait root /usr/sbin/krshd krshd

    shellkshell条目都为rcprsh客户端程序提供服务。 但是,不同守护程序提供的服务的安全性存在很大差异。 由krshd守护程序提供的kshell服务使用Kerberos验证客户端的身份并验证用户身份。 但是, shell服务使用的认证方法非常弱,除非系统未连接到公共网络,否则不应启用它。

    如果组织使用Kerberos,请禁用或删除shell条目,因为其可用性抵消了部署Kerberos所获得的任何好处。 如果不使用Kerberos,则OpenSSH应用程序包的sshd组件将为rshd守护程序提供更安全的直接替换。 在这种情况下,应禁用两个条目。

  • login stream tcp6 nowait root /usr/sbin/rlogind rlogind
  • klogin stream tcp nowait root /usr/sbin/krlogind krlogind

    shell/kshell服务一样, loginklogin条目都提供类似的服务:远程用户无需指定密码即可登录系统的能力。 同样, krlogind守护程序使用Kerberos进行身份验证和加密,而标准rlogind使用与外壳程序服务相同的不安全方法进行用户身份验证,并且不对通过网络传递的数据进行加密。

    login服务应该被禁用或从inetd.conf删除,因为Kerberized klogin服务更加安全。 如果网站上未使用Kerberos,请禁用这两种服务并使用ssh。

  • exec stream tcp6 nowait root /usr/sbin/rexecd rexecd

    exec服务是自网络友好以来的又一个保留时间,安全并不是首要考虑的问题。 rexecd守护程序使远程用户能够在系统上运行命令,而身份验证很差,并且不对密码或数据进行加密。 应禁用此条目,因为此服务有许多安全的替代方法。

  • bootps dgram udp wait root /usr/sbin/bootpd bootpd /etc/bootptab
  • tftp dgram udp6 SRC nobody /usr/sbin/tftpd tftpd -n

    bootpdtftpd守护程序使远程系统可以进行网络引导。 除非要求系统提供此服务, bootps应禁用或删除bootpstftp inetd.conf条目。

  • ntalk dgram udp wait root /usr/sbin/talkd talkd

    在目的上类似writesrv从开始服务/etc/inittab中, talkd守护程序接收来自用户的远程系统上的信息,对本地用户的终端显示它们。 该守护程序过去已被成功利用,应禁用。

  • rstatd sunrpc_udp udp wait root /usr/sbin/rpc.rstatd rstatd 100001 1-3
  • rusersd sunrpc_udp udp wait root /usr/lib/netsvc/rusers/rpc.rusersd rusersd 100002 1-2

    rstatdrusersd服务提供有关系统和用户的信息。 此信息不应在本地网络外部可用。 如果系统连接到公共网络,则应同时禁用它们。

  • rwalld sunrpc_udp udp wait root /usr/lib/netsvc/rwall/rpc.rwalld rwalld 100008 1

    rwalld守护程序接受传入的消息,并将消息写入所有已登录用户的终端。 此inetd.conf条目应被禁用或删除。

  • sprayd sunrpc_udp udp wait root /usr/lib/netsvc/spray/rpc.sprayd sprayd 100012 1

    sprayd守护程序与spray命令一起可以提供网络性能统计信息。 它还可以提供用于拒绝服务攻击的平台。 应该禁用或删除它。

  • pcnfsd sunrpc_udp udp wait root /usr/sbin/rpc.pcnfsd pcnfsd 150001 1-2

    rpc.pcnfsd守护程序从个​​人计算机网络文件系统(PC-NFS)客户端接收连接。 此服务主要用于从具有非基于Unix操作系统的台式计算机进行打印,以打印AIX服务器上的线轴。 该守护程序中存在多个漏洞,并且还有更现代,更安全的替代方法。

    除非环境要求使用PC-NFS,否则应禁用此inetd.conf条目。

  • echo stream tcp nowait root internal
  • discard stream tcp nowait root internal
  • chargen stream tcp nowait root internal
  • daytime stream tcp nowait root internal
  • time stream tcp nowait root internal
  • echo dgram udp wait root internal
  • discard dgram udp wait root internal
  • chargen dgram udp wait root internal
  • daytime dgram udp wait root internal
  • time dgram udp wait root internal

    以上服务由inetd守护程序在内部处理。 尽管没有一个内部服务成为大漏洞的根源,但是每个条目都代表另一个开放端口,并且是承载拒绝服务攻击的机会。 因此,除非特别需要它们提供的服务,否则请禁用这些条目。

  • ttdbserver sunrpc_tcp tcp wait root /usr/dt/bin/rpc.ttdbserver rpc.ttdbserver 100083 1

    ToolTalk数据库服务器( rpc.ttbdserver )是rpc.ttbdserver使用的通用桌面环境(CDE)的组件。 该守护程序具有安全漏洞的历史记录,应该禁用它,因为服务器不太可能需要CDE的可用性。

  • ssalld sunrpc_tcp tcp wait root /usr/sbin/rpc.ssalld rpc.ssalld 300667 1

    rpc.ssalld守护程序是IBM StorWatch串行存储专家(StorX)应用程序的SSA网络代理的一部分。 除非使用StorX并正在监视该主机, ssalld应该禁用ssalld条目或从/etc/inetd.conf删除该条目。

  • instsrv stream tcp nowait netinst /home/netinst/bin/instsrv instsrv -r /tmp/netinstalllog /home/netinst/scripts

    instsrv服务是网络安装工具的一部分,仅用于为运行AIX 3.2或更早版本的RS / 6000提供服务。 应该禁用此inetd.conf条目,并且应将与之关联的文件集boos.compt.Netinst从系统中删除。

  • dtspc stream tcp nowait root /usr/dt/bin/dtspcd /usr/dt/bin/dtspcd
  • cmsd sunrpc_udp udp wait root /usr/dt/bin/rpc.cmsd cmsd 100068 2-5

    dtspcd守护程序和rpc.cmsd守护程序都是Common Desktop Environment的一部分。 dtspc允许从远程主机启动应用程序。 cmsd服务与dtcm客户端日历应用程序通信。 这些服务都不应该处于活动状态。

确保剩余服务

syslogd守护程序

确保系统保持安全的关键是不断监视各种系统守护程序和其他程序发布的消息。 这些程序大多数都通过syslogd守护程序报告错误和其他消息,该守护程序负责根据消息的严重性和功能(或来源)调度这些消息。 虽然syslogd守护程序在AIX中默认为活动状态,但是syslogd的配置不会记录接收到的任何消息,而是将其静默丢弃。

Syslogd :设施,优先级和目的地

/etc/syslog.conf配置文件确定如何处理来自特定来源和设置了优先级的消息。 每个使用syslogd系统程序都将在预定义的设备上传输消息。 这些设施是:

内核消息
user 各种用户级程序
mail 发送邮件
daemon 系统守护程序,包括ftpd
auth 授权消息
authpriv 授权消息,其查看应仅限于root用户
syslog syslog守护程序内部生成的消息
lpr lpd(打印机子系统)
news nntp(新闻)服务器消息
uucp uucp子系统消息
cron crond消息
local0 - local7 可用于管理员定义的功能

发送给syslogd每条消息还具有附加的严重性或优先级。 这些优先级从高到低从高到低依次为:

守护程序或子系统故障已发生或未决
alert 需要立即采取行动以防止失败
crit 发生了严重情况
err 发生了错误
warning 发生警告
notice 发生了正常但重大的事件
info 信息性消息
debug 调试级别的消息

syslogd守护程序根据/etc/syslogd.conf配置文件中的配置将消息调度到给定的目的地。 目的地可能是:

将消息记录在指定的日志文件中
@hostname 将消息传输到在指定主机名上运行的syslogd守护程序
user 将消息写到指定用户名的终端
* 将消息写入所有已登录用户的终端
errlog 将消息发送到AIX错误记录工具(errdemon)以包含在errpt中

syslog.conf文件的配置

没有配置syslogd守护程序的正确方法。 管理员需要根据其组织使用的标准做法来确定站点的配置。 但是,以下示例将提供一个很好的起点。

#######################################################################
## /etc/syslog.conf                                                  ##
######################################################################## record messages from all facilities at severity "alert" or higher in
# the AIX errlog ...*.alert                                       errlog# record messages from all facilities at severity "err" or higher in
# the log file /var/adm/errorlog*.err                                         /var/adm/errorlog# record messages from the "mail" facility at severity "info" or
# higher in the log file /var/adm/mail.logmail.info                                   /var/adm/mail.log# record messages from the "auth" and "authpriv" facilities at
# severity "info" or higher in the log file /var/adm/auth.logauth,authpriv.info                           /var/adm/auth.log# record messages from the "daemon" facility at severity "info" or
# higher in the log file /var/adm/daemon.logdaemon.info                                  /var/adm/daemon.log#######################################################################

如果syslogd守护程序尚不存在,它将不会写入文件,因此请确保触摸已指定的所有日志文件。 另外,请确保设置了日志文件的权限,以便只有授权用户才能查看其内容。 对syslog.conf文件进行更改后,必须通过输入refresh -s syslogd重新启动syslogd守护程序。 定期修剪日志文件很重要,否则它们会不断增长,直到文件系统被填满。 日志文件的修剪或轮换应通过每日清理脚本来处理。

强化sendmail

sendmail邮件传输程序的声誉是成为软件的瑞士奶酪,充满了可利用的漏洞。 实际上,计算机紧急响应小组(CERT)在1997年发布的第一份咨询涉及到sendmail和ftpd的问题。

幸运的是,当前版本的sendmail具有更好的安全性记录,发现的任何问题都会由sendmail应用程序的开发人员和IBM及时处理。 AIX 4.3.3随附sendmail 8.9.3( bos.net.tcp.client文件集的一部分),虽然它不是最新的可用版本,但它是稳定且相对安全的。

为了完全保护sendmail服务,必须对默认配置进行几处更改。

禁用SMTP服务

保护sendmail的第一步是确定是否甚至有必要在特定主机上运行sendmail。 许多组织将其电子邮件服务集中化,以便将所有传入邮件路由到专用于接收和路由传入邮件的少数系统。 如果是这种情况,则sendmail不应在其他主机上作为守护程序运行。

Sendmail是从文件/etc/rc.tcpip启动的; 按照本教程中的步骤进行操作,意味着应该通过注释掉以下行来禁用自动启动:

start /usr/lib/sendmail "$src_running" "-bd -q${qpi}"

/etc/rc.tcpip 。 通过发出命令lssrc -s sendmail确保它没有运行; 输出应类似于:

Subsystem        Group        PID        Status
sendmail         mail                    inoperative

禁用sendmail后,主机将不再接受端口25上的连接。但是,从该系统生成的电子邮件将不再发送到目的地。 它们将保留在假脱机目录中,直到手动处理了邮件队列。 以下行应添加到root的crontab文件中:

# process the outgoing mail queue twice an hour.
10,40 * * * * /usr/lib/sendmail -q > /dev/null 2>&1

上面的cron作业将在queue-processing模式下每小时两次,分别在每小时的10分钟和40分钟后调用sendmail。 在这种模式下,Sendmail将不接受传入的网络连接,但是它将通过邮件队列并分派它找到的所有消息。

关闭断开的继电器

在组织内的每个系统上禁用传入邮件服务可能是不可行的。 如果已将系统指定为邮件服务器,则可以采取一些步骤来确保不使用该系统来路由非组织生成或发往组织的邮件。

AIX 4.3.3中sendmail的默认行为允许所谓的开放中继 。 基本上,这意味着邮件服务器将接受并处理从组织外部发送到该组织外部地址的邮件。 利用开放中继是垃圾邮件发送者用来将电子邮件发送到成千上万个地址的最常见技术,所有这些地址均来自单个邮件服务器。

在以守护程序模式启用sendmail之前(假定已按照本教程前面的说明将其禁用),必须修改sendmail配置文件以防止滥用给定系统。 以下步骤详细说明了生成更新的sendmail.cf配置文件的过程:

  1. 确保已安装文件集bos.net.tcp.adtbos.adt.base
  1. 将当前工作目录更改为/usr/samples/tcpip/sendmail/cf ,并创建文件aix433.mc的备份。
  1. 编辑文件aix433.mc ,进行下表中详细的更改:
转移(0)dnl 此行不应更改。
OSTYPE(aix43)dnl 该行包含错误; 将括号内的文本从aix43aix433
功能(通用)dnl 除非需要genericstable功能,否则应删除此行。
功能(可邮寄)dnl 除非需要可邮寄的功能,否则应删除此行。
功能(虚拟用户可使用)dnl 除非需要virtualusertable功能,否则应删除此行。
功能(域表)dnl 除非需要域表功能,否则应删除此行。
功能(假面舞会)dnl 除非需要所有化妆舞会功能,否则应删除此行。
功能(promiscuous_relay)dnl 删除此行以禁用开放中继。
功能(accept_unresolvable_domains)dnl 删除此行以提高安全性。
功能(accept_unqualified_senders)dnl 删除此行以提高安全性。
DOMAIN(通用)dnl 如果没有组织特定的domain.m4文件,则不应更改此行。
MAILER(本地)dnl 此行不应更改。
MAILER(smtp)dnl 此行不应更改。
邮件(uucp) 除非需要通过UUCP路由邮件,否则应删除此行。

完成上述更改并保存文件后, aix433.mc文件的内容应类似于:

divert(0)dnlOSTYPE(aix433)dnlDOMAIN(generic)dnlMAILER(local)dnlMAILER(smtp)dnl
  1. 通过执行以下命令来构建新的sendmail配置文件:

    m4 ../m4/cf.m4 aix433.mc > /tmp/sendmail.cf.new

  2. 通常,通过使用域名服务器配置(DNS)中的邮件交换(MX)记录,几个邮件主机会收到组织中所有其他系统的传入邮件。 在这种情况下,请创建文件/etc/sendmail.cw ,并将该主机将为其处理传入邮件的每个系统的主机名添加到该文件中。 请注意,如果该主机具有多个主机名(由于别名或多个IP地址),则这些名称中的每个名称也必须在此文件中列出,否则以这些主机名发送到地址的邮件将被退回。

    如果sendmail.cw文件中没有主机名,则无论如何都要创建该文件(将其保留为空),或者编辑/tmp/sendmail.cf.new文件并/tmp/sendmail.cf.new中用井号(#)注释掉:

    Fw/etc/sendmail.cw
  1. 如果存在需要允许中继的特定域,请创建目录/etc/mail ,并创建文件/etc/mail/relay-domains ,然后将这些域的名称添加到该文件中。

    如果没有允许中继的域,请编辑/tmp/sendmail.cf.new文件,并/tmp/sendmail.cf.new中用井号(#)注释掉:

    FR-o /etc/mail/relay-domains
  1. 通过运行以下命令,确认新的sendmail配置文件中没有错误:

    endmail -C/tmp/sendmail.cf.new -bt < /dev/null
    echo $?

    如果sendmail命令以0(零)代码退出(在echo $?命令的输出中反映),则可以使用新的配置文件。

  1. 备份文件/etc/sendmail.cf ,并将文件/tmp/sendmail.cf.new复制到/etc/sendmail.cf
  1. 通过运行以下命令以守护程序模式启动sendmail:

    startsrc -s sendmail -a "-bd -q30m"
  1. 通过删除/etc/rc.tcpip注释的sendmail条目,在系统启动时重新启用sendmail的启动。

Sendmail将不再允许将邮件从域外的主机中继到不在该域中的地址。

改善FTP安全性

与sendmail一起,文件传输协议(FTP)守护程序是Unix服务器上最常用的应用程序。 但是,与sendmail不同,在AIX 4.3.3中包含的版本中发现了ftpd漏洞,这些漏洞可导致完全的系统破坏。 由于这个原因(和其他原因),除非绝对有必要提供FTP服务,否则应在/etc/inetd.conf中将其完全禁用。

如果服务要求规定了FTP的可用性,则可以采取许多步骤来减少(如果不能消除)该协议固有的风险。

  1. 通过运行命令instfix -ik IY04477确保AIX修订IY04477已完全安装在系统上。

    如IBM紧急响应服务安全漏洞警报编号ERS-SVA-E01-1999:004.1所述,此修复程序关闭了已被广泛报道的漏洞。 该APAR包含在维护级别(ML)02中,因此应安装在当前不在此ML级别的任何系统上。

  1. 确保有不允许使用FTP服务的帐户的用户名在文件中列出/etc/ftpusers 。 此列表(每行一个用户名)应包括root以及所有预定义的管理帐户: daemon, bin, sys, adm, uucp, guest, nobody, lpd, invscout, imnadm, ipsec, nwroot, nwuser, nwprint, nwldap, ldap, nuucp,netinst
  1. 修改/etc/inetd.conf ftpd服务器的条目,并添加以下参数:

    ftp     stream  tcp6    nowait  root    /usr/sbin/ftpd   ftpd -l -u077

    -l启用ftpd守护程序以优先级info进行日志记录,而-u077掩码将缺省值027更改上载文件的权限。

强烈建议您提供匿名FTP服务。 However, if this service is required, use the shell script /usr/samples/tcpip/anon.ftp (installed as part of the bos.net.tcp.client fileset) to properly set up the anonymous FTP user account and directories.

Setting network options

Though not specific to a particular service, there are options that can be set to control how certain network protocols behave on an AIX system. These network options are displayed and set using the no command. Several of these network options should be changed from their default settings on any system that is connected to a public network (such as the Internet).

Network options need to be set at each system boot, as they do not "stick" across reboots. There is no official method of setting these options; the script below offers one possible method:

  1. Create the following script and save it as /etc/rc.no .

    #!/bin/ksh# ---------------------------------------------------------------------# /etc/rc.no : sets network options to improve performance and security# ---------------------------------------------------------------------echo "Setting network options"# protection against SYN flood attacks .../usr/sbin/no -o clean_partial_conns=1# protection against ICMP redirects .../usr/sbin/no -o ipignoreredirects=1# protection against illegal access via source routing .../usr/sbin/no -o ipsendredirects=0/usr/sbin/no -o ipsrcroutesend=0/usr/sbin/no -o ipsrcrouteforward=0/usr/sbin/no -o ip6srcrouteforward=0/usr/sbin/no -o tcp_pmtu_discover=0/usr/sbin/no -o udp_pmtu_discover=0
  2. Create an entry in /etc/inittab to run the above script directly after the brc entry, by manually editing the inittab file or by running the command mkitab -i brc no:2:once:"/etc/rc.no > /dev/console 2>&1"
  3. Execute the rc.no command manually, so that its settings take effect for the current system environment.

摘要

Reviewing the hardened system

Reviewing the hardened system

On the example system used for this tutorial, these changes have been made:

  • In /etc/inittab :

    • The following entries were disabled: rcnetw , writesrv , httpdlite , imnss , imqss , dt , and lines l2 through l9 which referenced the System V script directories.
    • The /etc/rc.nfs script was modified to prevent the startup of the rpc.statd and rpc.lockd daemons.
    • An entry was added to execute the /etc/rc.no script, setting network options.
  • In /etc/rc.tcpip :
    • The lines of the script responsible for starting the snmpd , dpid2 , and x_st_mgrd daemons were disabled.
  • In /etc/inetd.conf :
    • The following services were disabled: shell , kshell , login , klogin , exec , bootps , tftp , rstatd , rusersd , rwalld , sprayd , pcnfsd , echo , discard , chargen , daytime , time , ttdbserver , ssalld , instsrv , dtspc , and cmsd .
    • The entry for ftp was modified to invoke the ftp daemon with the arguments -l -u077 .
  • Sendmail configuration was modified to prevent the open relaying of third-party mail.

As a result of those changes, the number of open ports on the system was reduced significantly:

端口号 协议 Well-Known Name Daemon/Application Started from
21 tcp ftp /usr/sbin/ftpd /etc/inetd.conf
23 tcp telnet /usr/sbin/telnetd /etc/inetd.conf
25 tcp smtp /usr/sbin/sendmail /etc/rc.tcpip
111 tcp sunrpc /usr/sbin/portmap /etc/rc.tcpip
111 udp sunrpc /usr/sbin/portmap /etc/rc.tcpip
514 udp syslog /usr/sbin/syslogd /etc/rc.tcpip

Am I secure now?

Unfortunately, the answer to that question is "no". It is not enough to simply turn off some services and hope that what remains is secure. Constant monitoring of system logs and network services is required to guard against attempts at compromise and to check for signs of successful intrusion.

The steps outlined in this tutorial cover only what is possible with the tools provided by the operating system. No advantage was taken of the many open source and other free tools available. These software applications include OpenSSH , which provides secure replacements for so many of the insecure default services, and other tools like nmap , useful in determining the network footprint of a system and detecting unauthorized services that may be active.

Network security cannot be achieved by just keeping outsiders at bay. A truly safe system must have safeguards against illegitimate user activity, improper file access control, and a host of other issues. The steps outlined in this tutorial provide a necessary start to the never-ending process of developing a safe, secure, and productive computing environment.

A footnote on network security

Within the six days that the example system used in this tutorial was up and running, there were four distinct attempts at unauthorized access. System administrators who don't believe an attack is possible are not monitoring their logs close enough.


翻译自: https://www.ibm.com/developerworks/aix/tutorials/aix/aix.html

aix nfs aix_保护AIX网络服务相关推荐

  1. Solaris 10网络服务

    作者:田逸(sery@163.com) <开放系统世界> 2006年10期 多年前,sun 微系统公司提出"网络就是计算机"这一著名的口号,从而使得网络的概念逐渐为世人 ...

  2. Linux云计算网络服务CentOS7.5

    这里写目录标题 配置Linux网络 远程管理Linux主机 远程登录工具 ssh 使用scp远程复制工具 实现ssh无密码登录验证 远程管理进阶与Xshell 常用的网络工具 IP命令的使用 ss与n ...

  3. 尚硅谷 Linux网络服务数据库 笔记

    目录 网络基础服务 CentOS6与CentOS7区别 常见的网络协议与端口 网关和路由 网络管理命令 SSH管理 TCP Wrappers 简单防火墙 DHCP服务 DHCP的工作原理 DHCP服务 ...

  4. 保护SNMP协议服务安全的三个步骤

    在启用了SNMP协议服务 情况下,我们如何来确保这个协议的安全呢?首先我们要及时更新这个协议的补 丁,之后还要对这个协议的流程进行过滤.那么具体的实施情况请从下文我们来了解一下吧. 保障SNMP的安全 ...

  5. windows的服务中的登录身份本地系统账户、本地服务账户和网络服务账户修改

    以一个redis服务为例: 一个redis注册服务后一般是网络服务账户,但是当系统不存在网络服务账户时,就会导致redis服务无法正常启动.接下来修改redis服务的登录身份. cmd下输入如下命令: ...

  6. openstack第四章:neutron— 网络服务

    第四篇neutron- 网络服务 一.neutron 介绍:   Neutron 概述 传统的网络管理方式很大程度上依赖于管理员手工配置和维护各种网络硬件设备:而云环境下的网络已经变得非常复杂,特别是 ...

  7. 一文读懂云上用户如何灵活应用定制化网络服务

    简介:在将传统数据中心业务迁移上云的过程中,如何将云下基于不同业务场景和设备角色灵活变化的网络配置基于云上网络统一服务能力进行转换,用户及其业务架构通常会面临诸多的挑战.阿里云混合云网络技术团队和阿里 ...

  8. 高性能并发TCP网络服务-IOCP框架修正VC2008版本

    From: http://blog.csdn.net/lsfa1234/article/details/6223635 高性能并发TCP网络服务IOCP框架修正VC2008版本 从Source Cod ...

  9. Spring Cloud构建微服务架构:服务容错保护(Hystrix服务降级)【Dalston版】

    前言 在微服务架构中,我们将系统拆分成了一个个的服务单元,各单元应用间通过服务注册与订阅的方式互相依赖.由于每个单元都在不同的进程中运行,依赖通过远程调用的方式执行,这样就有可能因为网络原因或是依赖服 ...

最新文章

  1. cacti cmd.php 解析,CACTI搭建 - Linux论坛 - 51CTO技术论坛_中国领先的IT技术社区
  2. 最初学习ASP.net的时候常会遇到的问题
  3. HTML基础知识(常见元素、列表、链接元素、图片元素)
  4. 国内各大音乐平台歌曲分享
  5. 计算机技术应用于教学案例,中职计算机教学中案例教学方法的运用
  6. 当翻译变成了文本编辑。。。
  7. 伪分布式Hbase安装和配置
  8. WPF中加载高分辨率图片性能优化
  9. 文件后缀名查询(全)
  10. element el-table表格数据合并
  11. LateX各种命令符号
  12. csgo跑图文件_一键跑图!极为方便的CSGO跑图工具(附2020年5月28日更新)
  13. Linux源码编译-编译哪些设备树
  14. DS18B20高精度温度传感器,使用介绍【400字】【原创】
  15. poj3179 Corral the Cows(二分)(双指针)
  16. Linux 之父是个果粉:给自用 M2 Mac 装上 Fedora Linux,除图形加速和 Chrome 都搞定了...
  17. 微信开发(八)自动回复和多客服开发
  18. 【EXCEL】详解使用python读写EXCEL文件(xlrd,xlwt)
  19. 如何将程序中的注释、空格去掉,软件著作权申请时要用
  20. 三十而立,人生新起点

热门文章

  1. 考取执业药师证前景如何,“吃香”吗?
  2. 怎么找到网站的出站链接及删除修改?
  3. python函数详解_INDEX函数
  4. h3c 维护服务器,H3C R4800 G2服务器 维护指南-6W100
  5. 如果分账延迟就创建定时器核验分账结果
  6. 使用ajax爬取网站图片()
  7. [文明6] 最大化利用工厂等影响6格建筑的六边形网格规划(2016-10-27增加五、六节,19城+133锤方案,37城+259锤方案)...
  8. C++字符串定义与操作
  9. 如何使用数据分析进行风险评估?
  10. 雷神FFMpeg源码学习笔记