扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
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领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者