security.xml 10.6 KB
Newer Older
1
<?xml version="1.0"?>
2 3 4 5 6 7 8
<!-- This Source Code Form is subject to the terms of the Mozilla Public
     License, v. 2.0. If a copy of the MPL was not distributed with this
     file, You can obtain one at http://mozilla.org/MPL/2.0/.

     This Source Code Form is "Incompatible With Secondary Licenses", as
     defined by the Mozilla Public License, v. 2.0.
-->
9 10 11 12 13
<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
                      "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [
    <!ENTITY % myents SYSTEM "bugzilla.ent">
    %myents;
]>
14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62

<chapter id="security">
<title>Bugzilla Security</title>

  <para>While some of the items in this chapter are related to the operating
  system Bugzilla is running on or some of the support software required to
  run Bugzilla, it is all related to protecting your data. This is not
  intended to be a comprehensive guide to securing Linux, Apache, MySQL, or
  any other piece of software mentioned. There is no substitute for active
  administration and monitoring of a machine. The key to good security is
  actually right in the middle of the word: <emphasis>U R It</emphasis>.
  </para>
  
  <para>While programmers in general always strive to write secure code,
  accidents can and do happen. The best approach to security is to always
  assume that the program you are working with isn't 100% secure and restrict
  its access to other parts of your machine as much as possible.
  </para>
 
  <section id="security-os">
  <title>Operating System</title>
  
    <section id="security-os-ports">
    <title>TCP/IP Ports</title>
    
      <!-- TODO: Get exact number of ports -->
      <para>The TCP/IP standard defines more than 65,000 ports for sending
      and receiving traffic. Of those, Bugzilla needs exactly one to operate
      (different configurations and options may require up to 3). You should
      audit your server and make sure that you aren't listening on any ports
      you don't need to be. It's also highly recommended that the server
      Bugzilla resides on, along with any other machines you administer, be
      placed behind some kind of firewall.
      </para>
    
    </section>
    
    <section id="security-os-accounts">
    <title>System User Accounts</title>
    
      <para>Many <glossterm linkend="gloss-daemon">daemons</glossterm>, such
      as Apache's <filename>httpd</filename> or MySQL's
      <filename>mysqld</filename>, run as either <quote>root</quote> or
      <quote>nobody</quote>. This is even worse on Windows machines where the
      majority of <glossterm linkend="gloss-service">services</glossterm>
      run as <quote>SYSTEM</quote>. While running as <quote>root</quote> or
      <quote>SYSTEM</quote> introduces obvious security concerns, the
      problems introduced by running everything as <quote>nobody</quote> may
      not be so obvious. Basically, if you run every daemon as
63 64
      <quote>nobody</quote> and one of them gets compromised it can
      compromise every other daemon running as <quote>nobody</quote> on your
65 66 67 68 69 70
      machine. For this reason, it is recommended that you create a user
      account for each daemon.
      </para>
    
      <note>
        <para>You will need to set the <option>webservergroup</option> option
71
        in <filename>localconfig</filename> to the group your web server runs
72 73 74 75 76 77 78 79 80 81
        as. This will allow <filename>./checksetup.pl</filename> to set file
        permissions on Unix systems so that nothing is world-writable.
        </para>
      </note>
    
    </section>
    
    <section id="security-os-chroot">
    <title>The <filename>chroot</filename> Jail</title>
    
82 83 84 85 86 87 88
      <para>
        If your system supports it, you may wish to consider running
        Bugzilla inside of a <filename>chroot</filename> jail. This option
        provides unprecedented security by restricting anything running
        inside the jail from accessing any information outside of it. If you
        wish to use this option, please consult the documentation that came
        with your system.
89 90 91 92 93 94 95
      </para>
      
    </section>
  
  </section>

  <section id="security-webserver">
96
  <title>Web server</title>
97 98 99 100

    <section id="security-webserver-access">
    <title>Disabling Remote Access to Bugzilla Configuration Files</title>
    
101 102 103 104 105 106 107 108
      <para>
        There are many files that are placed in the Bugzilla directory
        area that should not be accessible from the web server. Because of the way
        Bugzilla is currently layed out, the list of what should and should not
        be accessible is rather complicated. A quick way is to run
        <filename>testserver.pl</filename> to check if your web server serves
        Bugzilla files as expected. If not, you may want to follow the few
        steps below.
109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209
      </para>
      
      <tip>
        <para>Bugzilla ships with the ability to create
        <glossterm linkend="gloss-htaccess"><filename>.htaccess</filename></glossterm>
        files that enforce these rules. Instructions for enabling these
        directives in Apache can be found in <xref linkend="http-apache"/>
        </para>
      </tip>
        
      <itemizedlist spacing="compact">
        <listitem>
          <para>In the main Bugzilla directory, you should:</para>
          <itemizedlist spacing="compact">
            <listitem>
              <para>Block:
              <simplelist type="inline">
                <member><filename>*.pl</filename></member>
                <member><filename>*localconfig*</filename></member>
              </simplelist>
              </para>
            </listitem>
          </itemizedlist>
        </listitem>

        <listitem>
          <para>In <filename class="directory">data</filename>:</para>
          <itemizedlist spacing="compact">
            <listitem>
              <para>Block everything</para>
            </listitem>
          </itemizedlist>
        </listitem>

        <listitem>
          <para>In <filename class="directory">data/webdot</filename>:</para>
          <itemizedlist spacing="compact">
            <listitem>
              <para>If you use a remote webdot server:</para>
              <itemizedlist spacing="compact">
                <listitem>
                  <para>Block everything</para>
                </listitem>
                <listitem>
                  <para>But allow
                  <simplelist type="inline">
                    <member><filename>*.dot</filename></member>
                  </simplelist>
                  only for the remote webdot server</para>
                </listitem>
              </itemizedlist>
            </listitem>
            <listitem>
              <para>Otherwise, if you use a local GraphViz:</para>
              <itemizedlist spacing="compact">
                <listitem>
                  <para>Block everything</para>
                </listitem>
                <listitem>
                  <para>But allow:
                  <simplelist type="inline">
                    <member><filename>*.png</filename></member>
                    <member><filename>*.gif</filename></member>
                    <member><filename>*.jpg</filename></member>
                    <member><filename>*.map</filename></member>
                  </simplelist>
                  </para>
                </listitem>
              </itemizedlist>
            </listitem>
            <listitem>
              <para>And if you don't use any dot:</para>
              <itemizedlist spacing="compact">
                <listitem>
                  <para>Block everything</para>
                </listitem>
              </itemizedlist>
            </listitem>
          </itemizedlist>
        </listitem>

        <listitem>
          <para>In <filename class="directory">Bugzilla</filename>:</para>
          <itemizedlist spacing="compact">
            <listitem>
              <para>Block everything</para>
            </listitem>
          </itemizedlist>
        </listitem>

        <listitem>
          <para>In <filename class="directory">template</filename>:</para>
          <itemizedlist spacing="compact">
            <listitem>
              <para>Block everything</para>
            </listitem>
          </itemizedlist>
        </listitem>
      </itemizedlist>

      <para>Be sure to test that data that should not be accessed remotely is
210
      properly blocked. Of particular interest is the localconfig file which
211 212
      contains your database password. Also, be aware that many editors
      create temporary and backup files in the working directory and that
213
      those should also not be accessible. For more information, see
214 215 216
      <ulink url="http://bugzilla.mozilla.org/show_bug.cgi?id=186383">bug 186383</ulink>
      or
      <ulink url="http://online.securityfocus.com/bid/6501">Bugtraq ID 6501</ulink>.
217
      To test, simply run <filename>testserver.pl</filename>, as said above.
218 219 220 221
      </para>
      
      <tip>
        <para>Be sure to check <xref linkend="http"/> for instructions
222
        specific to the web server you use.
223 224 225 226 227 228 229 230 231 232 233 234 235 236 237
        </para>
      </tip>
    
    </section>

      
  </section>
  
  
  <section id="security-bugzilla">
  <title>Bugzilla</title>

    <section id="security-bugzilla-charset">
    <title>Prevent users injecting malicious Javascript</title>

238 239 240
      <para>If you installed Bugzilla version 2.22 or later from scratch,
      then the <emphasis>utf8</emphasis> parameter is switched on by default.
      This makes Bugzilla explicitly set the character encoding, following
241
      <ulink
242 243 244 245
      url="http://www.cert.org/tech_tips/malicious_code_mitigation.html#3">a
      CERT advisory</ulink> recommending exactly this.
      The following therefore does not apply to you; just keep
      <emphasis>utf8</emphasis> turned on.
246 247
      </para>

248 249 250 251 252 253 254 255 256
      <para>If you've upgraded from an older version, then it may be possible
      for a Bugzilla user to take advantage of character set encoding
      ambiguities to inject HTML into Bugzilla comments.
      This could include malicious scripts. 
      This is because due to internationalization concerns, we are unable to
      turn the <emphasis>utf8</emphasis> parameter on by default for upgraded
      installations.
      Turning it on manually will prevent this problem.
      </para>
257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281
    </section>    
    
  </section>

</chapter> 

<!-- Keep this comment at the end of the file 
Local variables: 
mode: sgml 
sgml-always-quote-attributes:t
sgml-auto-insert-required-elements:t
sgml-balanced-tag-edit:t
sgml-exposed-tags:nil
sgml-general-insert-case:lower
sgml-indent-data:t 
sgml-indent-step:2 
sgml-local-catalogs:nil
sgml-local-ecat-files:nil 
sgml-minimize-attributes:nil
sgml-namecase-general:t 
sgml-omittag:t
sgml-parent-document:("Bugzilla-Guide.xml" "book" "chapter")
sgml-shorttag:t 
sgml-tag-region-if-active:t 
End: -->