科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网网络频道路由交换通过服务管理工具(SMF)实现系统保护

通过服务管理工具(SMF)实现系统保护

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

Solaris 10系统上的所有设备都由服务管理工具(SMF)控制。在SMF具有许多优势,包括附属服务的自动启动和从服务损耗中恢复的功能等,后者使用的是SMF中基于角色的权限控制(RBAC)。

来源:chinaitlab 2010年4月18日

关键字: 网络技术 网络管理

  • 评论
  • 分享微博
  • 分享邮件

  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命令完成自定义配置。这些命令可直接修改存储库和配置文件,而更改后的配置也会在下一次启动时被保存。

  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. 测试并使用服务。

  在下列示例中,我们要配置一个系统作为帮助文档。该文件的属性必须是只读共享。

  # svcs -a | grep nfs

  disabled Jan_10 svc:/network/nfs/server:default

  # vi /etc/dfs/dfstab

  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: nfsd(1M)

  See: /var/svc/log/network-nfs-server:default.log

  Impact: None

  如果我们在没有支持文件的情况下启用了一个服务,查看记录文件确定问题出自哪里:

  # 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: http://sun.com/msg/SMF-8000-1S

  See: nfsd(1M)

  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

  ...

  3.3.2 配置IP过滤服务

  和NFS服务一样,IP过滤服务只有在我们创建配置文件后才会被启用。网页的安全要求指示你在文件中放入的配置规则。某些服务,如IPsec,需要每个相连的系统都具备一个配置文件。可执行如下操作启用一个需要配置文件的服务:

  1. 创建配置文件。如果不知道配置文件名称,可查阅服务名称手册页,然后阅读相关句法。

  2. 如果有可用的验证句法,应验证文件的句法。

  3. 如果服务需要在两个系统上运行,如IPsec服务,可对第二个系统进行配置。

  4. 在一个或两个系统上启用服务。

  5. 验证服务是否正常运行。

  在下列例子中,我们要保护那些包含非全局区域的系统。IP过滤程序的规则保护了全局区域和Web服务器区域。你首先要向/etc/ipf/ipf.配置文件创建并添加规则。

  # vi /etc/ipf/ipf.conf

  set intercept_loopback true;

  # *** GLOBAL ZONE: (IN: TCP/22, OUT: ANYTHING)

  pass in quick proto tcp from any to global-zone port = 22

  keep state keep frags

  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

  keep state keep frags

  block out quick from websvc to any

  # *** DEFAULT DENY

  block in log all

  block in from any to 255.255.255.255

  block in from any to 127.0.0.1/32

  然后在启用服务前要验证配置文件的句法。

  # ipf /etc/ipf/ipf.conf

  # svcs -a | grep ipf

  disabled Dec_10 svc:/network/ipfilter:default

  # svcadm enable svc:/network/ipfilter:default

  # svcs ipfilter

  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

  keep state keep frags

  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

  keep state keep frags

  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

  keep state keep frags

  pass out quick from webdat to any keep state keep frags

  # *** DEFAULT DENY

  block in log all

  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/entities fmri file://localhost/etc/ipf/ipf.conf

  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

  config/entities fmri file://localhost/etc/ipf/testipf.conf

  测试完成后,可保存原始文件。

  # svccfg -s /network/ipfilter \

  setprop config/entities=file://localhost/etc/ipf/ipf.conf

  # svcadm refresh ipfilter

  # svcadm restart ipfilter

  # svcprop ipfilter | grep etc

  config/entities fmri file://localhost/etc/ipf/ipf.conf

  3.3.3 配置ftp服务

  ftp服务由inetd命令控制。通常,网页安全策略要求FTP服务器记录所有FTP连接的详细信息。在下列两个示例中,我们需要配置ftp服务的属性,该ftp服务记录了连接信息并启用了调试。

  为了对要求你更改服务属性的服务进行配置,需要执行以下步骤:

  1. 列出服务状态。

  2. 列出服务属性。

  3. 更改服务的一个或多个属性。

  4. 验证服务属性是否被更改。

  5. 启用服务。

  6. 验证属性更改是否生效。

  在这个示例的第一部分,我们可以将FTP配置为记录FTP服务器系统A上的每次登录。注意该ftp服务在系统A上的初始状态为禁用。

  A # svcs ftp

  STATE STIME FMRI

  disabled Jan_10 svc:/network/ftp:default

  A # inetadm -l svc:/network/ftp:default

  SCOPE NAME=VALUE

  name="ftp"

  endpoint_type="stream"

  proto="tcp6"

  isrpc=FALSE

  wait=FALSE

  exec="/usr/sbin/in.ftpd -a"

  user="root"

  ...

  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

  SCOPE NAME=VALUE

  name="ftp"

  tcp_trace=TRUE

  A # svcadm enable svc:/network/ftp:default

  A # svcs ftp

  STATE STIME FMRI

  online 07:07:07 svc:/network/ftp:default

  而后,以普通用户身份在B机上运行ftp命令

  B $ ftp A

  Connected to A.

  220 A FTP server ready.

  Name (A:testftp):

  331 Password required for testftp.

  Password:

  230 User testftp logged in.

  Remote system type is UNIX.

  Using binary mode to transfer files.

  ftp>

  作为超级用户,再检查A机上记录文件中的注册记录。

  A # tail -1 /var/adm/messages

  Jan 10 07:20:20 A inetd[16208]: [ID 317013 daemon.notice] ftp[6036] from B 49822

  要继续这一示例,应禁用该服务。假设你想在服务上线前创建监控。

  A # svcadm disable ftp

  A # svcs -x ftp

  svc:/network/ftp:default (FTP server)

  State: disabled since January 20, 2009 07:20:22 AM PST

  Reason: Disabled by an administrator.

  See: http://sun.com/msg/SMF-8000-05

  See: in.ftpd(1M)

  See: ftpd(1M)

  Impact: This service is not running.

  用于ftp服务的exec属性包含启动服务的命令。该命令的手册页描述了命令可接受的参数。我们可以选择参数添加到exec属性中,以便该服务启动时,命令按这些参数运行。因此,若想修改运行服务的命令,可按照如下步骤操作:

  1. 列出服务的exec属性。

  2. 在手册页,确定要加入exec命令的参数。

  3. 将选定参数添加到服务的exec属性。

  4. 验证exec属性是否更改。

  5. 启用服务。

  6. 测试并使用服务。

  在下列示例中,我们可以修改ftp服务,以提供调试信息和每次连接的详细记录。若想修改ftp服务的exec属性,首先要列出exec属性,然后阅读exec命令的手册页以确定要添加的参数。

  # inetadm -l svc:/network/ftp:default | grep exec

  exec="/usr/sbin/in.ftpd -a"

  # man in.ftpd

  在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

  A # svcs ftp

  STATE STIME FMRI

  online 07:07:07 svc:/network/ftp:default

  以普通用户的身份,将一个文件放入FTP存储库中。

  B $ ftp A

  Connected to A.

  220 A FTP server ready.

  Name (A:testftp):

  331 Password required for testftp.

  Password:

  230 User testftp logged in.

  Remote system type is UNIX.

  Using binary mode to transfer files.

  ftp> mput design.tar

  mput design.tar? y

  200 PORT command successful.

  150 Opening BINARY mode data connection for design.tar.

  226 Transfer complete.

  ^D

  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.

  221 Goodbye.

  B $

  以超级用户身份,检查xferlog文件中的记录。该记录表明用户将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服务的默认状态时禁用。

  # svcs 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帐户启动。

  # svccfg -s apache2

  ... 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

  ... apache2> end

  # 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.

  # svcs apache2

  STATE STIME FMRI

  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

  ...

  # ppriv -S 5559

  5559: /usr/apache2/bin/httpd -k start

  flags =

  E: net_privaddr,proc_exec,proc_fork

  I: net_privaddr,proc_exec,proc_fork

  P: net_privaddr,proc_exec,proc_fork

  L: limit

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章