呼啸而来 發表於 2023-5-9 00:00:00

linux NFS 服务安全加固方法

<p>
        NFS(Network File System)是 FreeBSD 支持的一种文件系统,它允许网络中的计算机之间通过 TCP/IP 网络共享资源。不正确的配置和使用 NFS,会带来安全问题。</p>
<h3>
        概述</h3>
<p>
        NFS 的不安全性,主要体现于以下 4 个方面:</p>
<ul>
<li>
                缺少访问控制机制</li>
        <li>
                没有真正的用户验证机制,只针对 RPC/Mount 请求进行过程验证</li>
        <li>
                较早版本的 NFS 可以使未授权用户获得有效的文件句柄</li>
        <li>
                在 RPC 远程调用中, SUID 程序具有超级用户权限</li>
</ul>
<h3>
        加固方案</h3>
<p>
        为有效应对以上安全隐患,推荐您使用下述加固方案。</p>
<h4>
        配置共享目录(/etc/exports)</h4>
<p>
        使用 anonuid,anongid 配置共享目录,这样可以使挂载到 NFS 服务器的客户机仅具有最小权限。不要使用 no_root_squash。</p>
<h4 id="h4-u4F7Fu7528u7F51u7EDCu8BBFu95EEu63A7u5236">
        使用网络访问控制</h4>
<p>
        使用 安全组策略 或 iptable 防火墙限制能够连接到 NFS 服务器的机器范围。</p>
<div class="jb51code">
        <div>
                <div class="syntaxhighlighterbash" id="highlighter_686877">
                        <div class="toolbar">
                                <span>?</span>
</div>
                        <table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
                                                        <div class="line number1 index0 alt2">
                                                                1</div>
                                                        <div class="line number2 index1 alt1">
                                                                2</div>
                                                        <div class="line number3 index2 alt2">
                                                                3</div>
                                                        <div class="line number4 index3 alt1">
                                                                4</div>
                                                </td>
                                                <td class="code">
                                                        <div class="container">
                                                                <div class="line number1 index0 alt2">
                                                                        <code class="bash plain">iptables -A INPUT -i eth0 -p TCP -s 192.168.0.0</code><code class="bash plain">/24</code> <code class="bash plain">--dport 111 -j ACCEPT</code>
</div>
                                                                <div class="line number2 index1 alt1">
                                                                        <code class="bash plain">iptables -A INPUT -i eth0 -p UDP -s 192.168.0.0</code><code class="bash plain">/24</code> <code class="bash plain">--dport 111 -j ACCEPT</code>
</div>
                                                                <div class="line number3 index2 alt2">
                                                                        <code class="bash plain">iptables -A INPUT -i eth0 -p TCP -s 140.0.0.0</code><code class="bash plain">/8</code> <code class="bash plain">--dport 111 -j ACCEPT</code>
</div>
                                                                <div class="line number4 index3 alt1">
                                                                        <code class="bash plain">iptables -A INPUT -i eth0 -p UDP -s 140.0.0.0</code><code class="bash plain">/8</code> <code class="bash plain">--dport 111 -j ACCEPT</code>
</div>
                                                        </div>
                                                </td>
                                        </tr></tbody></table>
</div>
        </div>
        <div class="codetool" id="codetool">
                <div class="code_n">
                        <textarea></textarea>
</div>
        </div>
</div>
<p>
        <strong>账号验证</strong><br>
        使用 Kerberos V5 作为登录验证系统,要求所有访问人员使用账号登录,提高安全性。</p>
<p>
        <strong>设置 NFSD 的 COPY 数目</strong></p>
<p>
        在 Linux 中,NFSD 的 COPY 数目定义在启动文件<code> /etc/rc.d/init.d/nfs </code>中,默认值为 8。</p>
<p>
        最佳的 COPY 数目一般取决于可能的客户机数目。您可以通过测试来找到 COPY 数目的近似最佳值,并手动设置该参数。</p>
<p>
        <strong>选择传输协议</strong></p>
<p>
        对于不同的网络情况,有针对地选择 UDP 或 TCP 传输协议。传输协议可以自动选择,也可以手动设置。</p>
<blockquote>
        <p>
                mount -t nfs -o sync,tcp,noatime,rsize=1024,wsize=1024 EXPORT_MACHINE:/EXPORTED_DIR /DIR</p>
</blockquote>
<p>
        UDP 协议传输速度快,非连接传输时便捷,但其传输稳定性不如 TCP,当网络不稳定或者黑客入侵时很容易使 NFS 性能大幅降低,甚至导致网络瘫痪。一般情况下,使用 TCP 的 NFS 比较稳定,使用 UDP 的 NFS 速度较快。</p>
<ul>
<li>
                在机器较少,网络状况较好的情况下,使用 UDP 协议能带来较好的性能。</li>
        <li>
                当机器较多,网络情况复杂时,推荐使用 TCP 协议(V2 只支持 UDP 协议)。</li>
        <li>
                在局域网中使用 UDP 协议较好,因为局域网有比较稳定的网络保证,使用 UDP 可以带来更好的性能。</li>
        <li>
                在广域网中推荐使用 TCP 协议,TCP 协议能让 NFS 在复杂的网络环境中保持最好的传输稳定性。</li>
</ul>
<p>
        <strong>限制客户机数量</strong></p>
<p>
        修改 <code>/etc/hosts.allow </code>和 <code>/etc /hosts.deny </code>来限制客户机数量。</p>
<blockquote>
        <p>
                /etc/hosts.allow<br>
                portmap: 192.168.0.0/255.255.255.0 : allow<br>
                portmap: 140.116.44.125 : allow<br>
                /etc/hosts.deny<br>
                portmap: ALL : deny</p>
</blockquote>
<p>
        <strong>改变默认的 NFS 端口</strong><br>
        NFS 默认使用的是 111 端口,使用 port 参数可以改变这个端口值。改变默认端口值能够在一定程度上增强安全性。</p>
<p>
        <strong>配置 nosuid 和 noexec</strong><br>
        SUID (Set User ID) 或 SGID (Set Group ID) 程序可以让普通用户以超过自己权限来执行。很多 SUID/SGID 可执行程序是必须的,但也可能被一些恶意的本地用户利用,获取本不应有的权限。</p>
<p>
        尽量减少所有者是 root,或是在 root 组中却拥有 SUID/SGID 属性的文件。您可以删除这样的文件或更改其属性,如:</p>
<p>
        使用 nosuid 选项禁止 set-UID 程序在 NFS 服务器上运行,可以在<code> /etc/exports </code>加入一行:</p>
<blockquote>
        <p>
                /www www.abc.com(rw, root_squash, nosuid)</p>
</blockquote>
<p>
        使用 noexec 禁止直接执行其中的二进制文件。</p>
頁: [1]
查看完整版本: linux NFS 服务安全加固方法