Solaris 10系统上的所有设备都由服务管理工具(SMF)控制。本文向大家展示了如何将NFS,IP过滤程序,FTP和Apache2 Web服务器配置成为SMF服务的方法。
Solaris 10系统上的所有设备都由服务管理工具(SMF)控制。在SMF具有许多优势,包括附属服务的自动启动和从服务损耗中恢复的功能等,后者使用的是SMF中基于角色的权限控制(RBAC)。使用基于角色的权限控制,程序能以准确的权限和所需授权运行。本文向大家展示了如何将NFS,IP过滤程序,FTP和Apache2 Web服务器配置成为SMF服务的方法。
3.1服务管理工具(SMF)
与传统UNIX运行控制脚本相比,SMF为Solaris服务提供的管理界面更加强大。
Solaris服务,如系统进程,无交互后台程序,应用和脚本都是可执行的。数据库软件,Web服务器软件和特定网页脚本都可以通过SMF控制。SMF通过以下功能为我们提供简单,快速和可视性的管理。
1. 可用管理命令svcadm启用,禁用或重启服务。
2. 失败的服务会被附属命令自动重启。而且启动失败的源代码不会影响自动重启。
3. 可通过svcs, svcadm和svccfg等命令查看和管理服务对象。
4. 服务调试很简单。svcs-x命令可以对服务无法正常运行作出解释,且每个服务的记录文件也简化了调试过程。
5. 由于配置状态保留在服务清单中,所以可轻松对服务的某一特定配置进行测试,备份和恢复。
6. 因为服务按照若干服务之间的附属关系启动和停止,所以系统启动和关闭速度更快。多个服务可同时启动。
7. 管理员可通过RBAC权限文件,角色,授权认可或特权等方式,将任务放心委任给那些被许可使用特定管理服务的非根用户。
8. SMF对系统初始化状态作出响应,如多用户运行级别。
9. SMF同样适用于使用传统UNIX rc脚本的系统。虽然我们不推荐大家这样做,但是用户仍然可将传统脚本用于某些服务,欲了解相关详情,可查看smf(5), svcadm(1M), svcs(1)和svccfg(1M)的介绍。
每个服务的清单都保存在中心存储库中。我们可以定义大量被称为配置文件的清单集。
3.2 SMF配置如何
服务和SMF清单一起发送。清单格式是/var/svc/manifest/ 目录下的XML文件。如果服务被启用或禁用,那么其他基本配置和默认信息,该清单会包含服务附属信息。在系统启动期间,该清单会被输入到SMF存储库中。存储库是/etc/svc/ 目录下的一个数据库。
你可以拥有每个服务的多个清单或截图。在启动时,配置文件已被选定。配置文件会启用或禁用每个Solaris服务。启动期间,当配置文件初始化系统后,管理员便可以进一步用SMF命令完成自定义配置。这些命令可直接修改存储库和配置文件,而更改后的配置也会在下一次启动时被保存。#p#
3.3修改Solaris服务默认设置
在被限定配置文件强化的Solaris系统上,你想在特定系统上使用的网络服务可能被禁用了。例如,ftp服务和NFS文件共享都被禁用了。需要配置的服务,如IP过滤程序和IPsec的默认状态都是禁用。
下面提供几种用SMF完成某些特殊系统配置的举例。一旦你配置完系统,清单就会出现在存储库中。当系统重启时,其配置也会被保存。请看:
1. 必须通过配置文件进行配置的服务会在该文件被配置完成后启用。如果你没有配置文件或者该文件不能被读取,那么这种情况也会记录在案。
2. 或许你想对一项服务尝试不同配置。使用不同的配置文件,就可以创建测试环境。最终的配置状态会在重启时保存下来。
3. 某些服务,如FTP,是必需的但却不要求监控。你可以在将其联网前,创建监控服务,如此一来,就可确保该服务首次使用时符合网页的安全条款。
4. 如果你想限定一项网络服务的攻击面。可对Apache2 Web服务进行配置,令其使用RBAC来限定服务所使用的权限。或者你也可以请求一个比root更受局限的帐户运行该服务。
3.3.1配置NFS服务
为了配置一个要求你自定义配置文件的服务,可执行如下操作:
1. 列出服务的状态。
2. 修改或创建配置文件。
3. 启用服务。
4. 验证服务是否在线。
5. 如果系统出具错误报告,请读取服务记录,然后修复错误。
6. 测试并使用服务。
在下列示例中,我们要配置一个系统作为帮助文档。该文件的属性必须是只读共享。
复制 disabled Jan_10 svc:/network/nfs/server:default
复制 share -F nfs -o ro /export/helpdocs
复制 # svcadm enable svc:/network/nfs/server
复制 # svcs -x svc:/network/nfs/server:default
复制 State: online since Tue Jan 20 5:15:05 2009
复制 See: /var/svc/log/network-nfs-server:default.log
如果我们在没有支持文件的情况下启用了一个服务,查看记录文件确定问题出自哪里:
复制 # svcs -x svc:/network/nfs/server:default (NFS server)
复制 State: disabled since Tue Jan 20 5:10:10 2009
复制 Reason: Temporarily disabled by an administrator.
复制 See: /var/svc/log/network-nfs-server:default.log
复制 Impact: This service is not running.
复制 # vi /var/svc/log/network-nfs-server:default.log
复制 No NFS filesystems are shared
#p#
3.3.2 配置IP过滤服务
和NFS服务一样,IP过滤服务只有在我们创建配置文件后才会被启用。网页的安全要求指示你在文件中放入的配置规则。某些服务,如IPsec,需要每个相连的系统都具备一个配置文件。可执行如下操作启用一个需要配置文件的服务:
1. 创建配置文件。如果不知道配置文件名称,可查阅服务名称手册页,然后阅读相关句法。
2. 如果有可用的验证句法,应验证文件的句法。
3. 如果服务需要在两个系统上运行,如IPsec服务,可对第二个系统进行配置。
4. 在一个或两个系统上启用服务。
5. 验证服务是否正常运行。
在下列例子中,我们要保护那些包含非全局区域的系统。IP过滤程序的规则保护了全局区域和Web服务器区域。你首先要向/etc/ipf/ipf.配置文件创建并添加规则。
复制 set intercept_loopback true;
复制 # *** GLOBAL ZONE: (IN: TCP/22, OUT: ANYTHING)
复制 pass in quick proto tcp from any to global-zone port = 22
复制 pass out quick from global-zone to any keep state keep frags
复制 # *** Web Server ZONE: (IN: TCP/80, OUT: NOTHING)
复制 pass in quick proto tcp from any to websvc port = 80
复制 block out quick from websvc to any
复制 block in from any to 255.255.255.255
复制 block in from any to 127.0.0.1/32
然后在启用服务前要验证配置文件的句法。
复制 # ipf /etc/ipf/ipf.conf
复制 disabled Dec_10 svc:/network/ipfilter:default
复制 # svcadm enable svc:/network/ipfilter:default
复制 enabled Jan_10 svc:/network/ipfilter:default
为了测试不同配置,你可以创建另一个配置文件,验证文件句法更改config/entities属性以指向新的文件。测试文件为Web数据区域添加了规则。
复制 # vi /etc/ipf/testipf.conf
复制 set intercept_loopback true;
复制 # *** GLOBAL ZONE: (IN: TCP/22, OUT: ANYTHING)
复制 pass in quick proto tcp from any to global-zone port = 22
复制 pass out quick from global-zone to any keep state keep frags
复制 # *** Web Server ZONE: (IN: TCP/80, OUT: NOTHING)
复制 pass in quick proto tcp from any to websvc port = 80
复制 block out quick from websvc to any
复制 # *** Web Data ZONE: (IN: TCP/22, OUT: ANYTHING)
复制 pass in quick proto tcp from any to webdat port = 22
复制 pass out quick from webdat to any keep state keep frags
复制 block in from any to 255.255.255.255
复制 block in from any to 127.0.0.1/32
复制 # ipf /etc/ipf/testipf.conf
复制 # svcprop ipfilter | grep config
复制 config/grouping astring require_all
复制 config/restart_on astring restart
复制 config/type astring path
复制 # svccfg -s /network/ipfilter \
复制 setprop config/entities=file://localhost/etc/ipf/testipf.conf
刷新重启服务后,要验证是否已经设置该属性。
复制 # svcadm refresh ipfilter
复制 # svcadm restart ipfilter
复制 # svcprop ipfilter | grep etc
测试完成后,可保存原始文件。
复制 # svccfg -s /network/ipfilter \
复制 setprop config/entities=file://localhost/etc/ipf/ipf.conf
复制 # svcadm refresh ipfilter
复制 # svcadm restart ipfilter
复制 # svcprop ipfilter | grep etc
#p#
3.3.3 配置ftp服务
ftp服务由inetd命令控制。通常,网页安全策略要求FTP服务器记录所有FTP连接的详细信息。在下列两个示例中,我们需要配置ftp服务的属性,该ftp服务记录了连接信息并启用了调试。
为了对要求你更改服务属性的服务进行配置,需要执行以下步骤:
1. 列出服务状态。
2. 列出服务属性。
3. 更改服务的一个或多个属性。
4. 验证服务属性是否被更改。
5. 启用服务。
6. 验证属性更改是否生效。
在这个示例的第一部分,我们可以将FTP配置为记录FTP服务器系统A上的每次登录。注意该ftp服务在系统A上的初始状态为禁用。
复制 disabled Jan_10 svc:/network/ftp:default
复制 A # inetadm -l svc:/network/ftp:default
复制 exec="/usr/sbin/in.ftpd -a"
复制 default tcp_trace=FALSE
复制 default tcp_wrappers=FALSE
复制 default connection_backlog=10
用于ftp服务的注册记录属性是tcp-trace。我们可以将其值从FALSE改为TURE,然后启用该服务并验证服务是否在线。
复制 A # inetadm -m svc:/network/ftp:default tcp_trace=TRUE
复制 A # inetadm -l svc:/network/ftp:default
复制 A # svcadm enable svc:/network/ftp:default
复制 online 07:07:07 svc:/network/ftp:default
而后,以普通用户身份在B机上运行ftp命令
复制 220 A FTP server ready.
复制 331 Password required for testftp.
复制 230 User testftp logged in.
复制 Remote system type is UNIX.
复制 Using binary mode to transfer files.
作为超级用户,再检查A机上记录文件中的注册记录。
复制 A # tail -1 /var/adm/messages
复制 Jan 10 07:20:20 A inetd[16208]: [ID 317013 daemon.notice] ftp[6036] from B 49822
要继续这一示例,应禁用该服务。假设你想在服务上线前创建监控。
复制 svc:/network/ftp:default (FTP server)
复制 State: disabled since January 20, 2009 07:20:22 AM PST
复制 Reason: Disabled by an administrator.
复制 Impact: This service is not running.
用于ftp服务的exec属性包含启动服务的命令。该命令的手册页描述了命令可接受的参数。我们可以选择参数添加到exec属性中,以便该服务启动时,命令按这些参数运行。因此,若想修改运行服务的命令,可按照如下步骤操作:
1. 列出服务的exec属性。
2. 在手册页,确定要加入exec命令的参数。
3. 将选定参数添加到服务的exec属性。
4. 验证exec属性是否更改。
5. 启用服务。
6. 测试并使用服务。#p#
在下列示例中,我们可以修改ftp服务,以提供调试信息和每次连接的详细记录。若想修改ftp服务的exec属性,首先要列出exec属性,然后阅读exec命令的手册页以确定要添加的参数。
复制 # inetadm -l svc:/network/ftp:default | grep exec
复制 exec="/usr/sbin/in.ftpd -a"
在in.ftpd(1M)手册页,选择提供详细信息的选项。
-v为syslogd(1M)写调试信息。
-w 记录wtmpx(4) file中每位用户登录,登出的记录。
-i记录FTP服务器到xferlog(4)所接收的所有文件名。
修改exec属性,验证属性是否更改成功。
复制 # inetadm -m ftp exec="/usr/sbin/in.ftpd -a -i -v -w"
复制 # inetadm -l ftp | grep exec
复制 exec="/usr/sbin/in.ftpd -a -i -v -w"
测试属性更改是否生效。首先,启用服务。然后以普通用户的身份发送一个文件。最后验证记录文件是否被更新。
复制 A # svcadm enable svc:/network/ftp:default
复制 online 07:07:07 svc:/network/ftp:default
以普通用户的身份,将一个文件放入FTP存储库中。
以超级用户身份,检查xferlo
复制 220 A FTP server ready.
复制 331 Password required for testftp.
复制 230 User testftp logged in.
复制 Remote system type is UNIX.
复制 Using binary mode to transfer files.
复制 200 PORT command successful.
复制 150 Opening BINARY mode data connection for design.tar.
复制 ftp> 221-You have transferred 0 bytes in 0 files.
复制 221-Total traffic for this session was 361 bytes in 0 transfers.
复制 221-Thank you for using the FTP service on A.
g文件中的记录。该记录表明用户将design.tar文件从B机发送到A机的操作不成功。
复制 A # cat /var/log/xferlog
复制 Sat Jan 20 07:18:10 2009 1 B.mydomain.com
复制 0 /home/test/design.tar b _ i r test ftp 0 * c
3.3.4 配置Apache2 Web服务
Apache2 Web服务程序是Solaris操作系统的一部分。Web服务器通常是攻击者的目标。我们可使用RBAC来减少服务器的漏洞。其他Solaris功能,如区域,在创建网络服务的时候也能发挥作用。
可执行以下步骤来配置使用RBAC的服务:
1. 列出服务属性。
2. 创建一个权限文件或一个角色,或者是用于服务的授权许可。
3. 为服务添加权限或删除权限。
4. 验证服务属性是否更改成功。
5. 启用服务。
6. 验证属性更改是否生效。
SUNWapch2r和SUNWapch2u数据包提供了Apache2 Web服务器程序。Apache2服务的默认状态时禁用。
复制 disabled 11:11:10 svc:/network/http:apache2
默认状态下,服务是通过root帐户启动。但是Apache2服务的http.conf文件创建了一个无交互后台程序webservd来运行该服务。当你用默认文件配置服务时,该服务会在root帐户下启动,切换到webservd帐户,通过所有权限运行。
执行下列操作可减少Apache2服务器的权限,并用webservd启动该服务。
◆删除服务不需要的基本权限,proc_session, proc_info和file_link_any。
◆添加服务使用特权端口时所需要的网络优先权, net_privaddr。
◆不要更改限定设置。
◆将用户和组设置为webservd。那么在SMF清单中设置完用户和组后,服务以webservd启动而不是以root帐户启动。
复制 ... apache2> setprop start/user = astring: webservd
复制 ... apache2> setprop start/group = astring: webservd
复制 ... apache2> setprop start/privileges = astring:
复制 basic,!proc_session,!proc_info,!file_link_any,net_privaddr
复制 # svcadm -v refresh apache2
复制 Action refresh set for svc:/network/http:apache2.
欲验证该配置是否已经被成功设置,可检验服务的启动属性。
复制 # svcprop -v -p start apache2
复制 start/exec astring /lib/svc/method/http-apache2\ start
复制 start/user astring webservd
复制 start/group astring webservd
复制 start/privileges astring
复制 basic,!proc_session,!proc_info,!file_link_any,net_privaddr
复制 start/limit_privileges astring :default
复制 start/use_profile boolean false
注意,如果你创建的权限文件包含在服务的特权中,那么你可以输入权限文件的名称,并将其作为use_profile属性的值,这样可免去设置特权的麻烦。
现在,我们可以启用服务。验证服务是否在webservd帐户下开启,且是否具备受限特权。
复制 # svcadm -v enable -s apache2
复制 svc:/network/http:apache2 enabled.
复制 online 12:02:21 svc:/network/http:apache2
复制 # ps -aef | grep apache | grep -v grep
复制 webservd 5568 5559 0 12:02:22 ? 0:00 /usr/apache2/bin/httpd -k start
复制 5559: /usr/apache2/bin/httpd -k start
复制 E: net_privaddr,proc_exec,proc_fork
复制 I: net_privaddr,proc_exec,proc_fork
复制 P: net_privaddr,proc_exec,proc_fork
【编辑推荐】
IIS安全:配置web服务器权限更好地实现访问控制
精心配置IIS打造安全Web服务器