]> git.sur5r.net Git - bacula/docs/blob - docs/manual-fr/security.tex
Update web site fix French site; fix compile of French manual
[bacula/docs] / docs / manual-fr / security.tex
1 %%
2 %%
3
4 \section*{Consid\'erations sur la s\'ecurit\'e de Bacula}
5 \label{_ChapterStart14}
6 \index[general]{Bacula!Consid\'erations sur la s\'ecurit\'e de}
7 \index[general]{Consid\'erations sur la s\'ecurit\'e de Bacula}
8 \index[general]{S\'ecurit\'e}
9 \addcontentsline{toc}{section}{Consid\'erations sur la s\'ecurit\'e de Bacula}
10
11 \begin{itemize}
12 \item La s\'ecurit\'e, c'est de pouvoir restaurer vos fichiers, aussi, lisez 
13    attentivement le chapitre \ilink{Critical Items Chapter}{Critical} de 
14    ce manuel.
15 \item Le client ({\bf bacula-fd}) doit \^etre ex\'ecut\'e en tant que root
16    afin d'avoir  l'acc\`es \`a tous les fichiers du syst\`eme. 
17 \item Il n'est pas n\'ecessaire d'ex\'ecuter le Director en tant que root. 
18 \item Il n'est pas n\'ecessaire d'ex\'ecuter le Storage Daemon en tant que
19    root, mais  vous devez vous assurer qu'l peut utiliser le lecteur de bandes,
20    dont l'acc\`es  est presque toujours r\'eserv\'e \`a root par d\'efaut.
21    De plus, si vous n'ex\'ecutez pas le Storage Daemon en tant que root, il sera 
22    dans l'incapacit\'e de r\'egler automatiquement les param\`etres de votre lecteur 
23    de bandes. En effet, ces fonctions requi\`erent les droits root sur la plupart 
24    des syst\`emes d'exploitation.
25 \item Vous devriez restreindre l'acc\`es au fichiers de configuration de
26    Bacula, de  sorte que les mots de passe ne soient pas lisibles par tous.  Les
27    {\it daemons} {\bf Bacula} sont prot\'eg\'es par des mots de passe et CRAM-MD5
28 (i.e. les mots de passe ne sont pas envoy\'es sur le r\'eseau). Ceci assure
29 que tout le  monde ne peut acc\'eder aux {\it daemons}. C'est une protection
30 raisonnablement bonne,  mais qui peut \^etre craqu\'ee par un expert. 
31 \item Si vous utilisez les ports recommand\'es 9101,9102 et 9103, vous voudrez
32    probablement  prot\'eger ces ports des acc\`es externes \`a l'aide d'un
33    firewall et/ou en utilisant  tcp wrappers ({\bf etc/hosts.allow}).  
34 \item Actuellement, toutes les donn\'ees sont envoy\'ees sur le r\'eseau sans
35    chiffrement. Par  cons\'equent, \`a moins que vous n'utilisiez {\bf ssh} ou {\bf
36    stunnel} pour la  transmission de port (NDT: port forwarding), il n'est pas
37 recommand\'e de faire des  sauvegardes \`a travers un r\'eseau non
38 s\'ecuris\'e (par exemple, Internet). Nous  pr\'evoyons d'int\'egrer le
39 chiffrage {\bf ssl} dans une version future.  
40 \item Vous devriez vous assurer que seuls les {\it daemons} de Bacula ont
41    acc\`es  en lecture et \'ecriture aux r\'epertoires de travail de Bacula.  
42 \item Si vous utilisez {\bf MySQL}, il n'est pas n\'ecessaire de l'ex\'ecuter
43    en tant que root  
44 \item Le script par d\'efaut de Bacula {\bf grant-mysql-permissions} accorde
45    toutes les  permissions d'utilisation de la base de donn\'ees MySQL sans mot
46    de passe. Si vous  voulez la s\'ecurit\'e, affinez ceci !  
47 \item N'oubliez pas que Bacula est un programme r\'eseau, ainsi quiconque sur
48    le r\'eseau  dispose du programme console et du mot de passe du Director peut
49    acc\'eder \`a  Bacula et aux donn\'ees sauvegard\'ees.  
50 \item Vous pouvez restreindre les adresses IP avec auxquelles Bacula se
51    connectera en  utilisant les enregistrements appropri\'es {\bf DirAddress},
52    {\bf FDAddress},  ou {\bf SDAddress} dans les fichiers de configurations
53 respectifs des {\it daemons}  
54 \item Soyez conscient que si vous sauvegardez votre catalogue avec le script 
55    par d\'efaut, et si l'acc\`es \`a votre catalogue est prot\'eg\'e par un mot de passe, 
56    ce dernier est transmis en tant qu'option de ligne de commande \`a ce script, 
57    ce qui le rend visible \`a tout utilisateur du syst\`eme. Si vous voulez 
58    s\'ecuriser ce point, vous devez le passer via une variable d'environnement 
59    ou un fichier s\'ecuris\'e.
60 \end{itemize}
61
62 \subsection*{Compatibilit\'e ascendante}
63 \index[general]{Compatibilit\'e ascendante}
64 \addcontentsline{toc}{subsection}{Compatibilit\'e ascendante}
65 L'un des principaux objectifs de Bacula est de garantir que vous pouvez 
66 restaurer depuis des cartouches (ou depuis des volumes disque) \'ecrites des ann\'ees 
67 auparavant. Ceci implique que chaque nouvelle version de Bacula devrait \^etre 
68 capable de relire les anciens formats de cartouches. Le premier probl\`eme est de 
69 s'assurer que le mat\'eriel fonctionne encore malgr\'e les ann\'ees, et que les supports 
70 sont encore valides. Ensuite, votre syst\`eme d'exploitation doit \^etre capable 
71 de s'interfacer avec le p\'eriph\'erique et finalement, Bacula doit \^etre capable 
72 de reconna\^itre les anciens formats. De tous ces probl\`emes, nous ne pouvons 
73 prendre en charge que le dernier, pour les autres, vous devez vous pr\'eparer 
74 consciencieusement.
75
76 Depuis les tous premiers stades de Bacula (janvier 2000) jusqu'\`a aujourd'hui 
77 (D\'ecembre 2005), Bacula a connu deux formats majeurs d'\'ecriture sur les 
78 cartouches. Le second format a \'et\'e introduit dans la version 1.27 en 
79 novembre 2002, et n'a pas chang\'e depuis. En principe, Bacula devrait encore pouvoir 
80 lire le format d'origine, mais j'avoue ne pas avoir essay\'e depuis longtemps...
81
82 Bien que le format des cartouches soit fix\'e, les types de donn\'ees qui peuvent \^etre 
83 \'ecrites sur les cartouches sont extensibles, ce qui nous a permis d'ajouter de 
84 nouvelles fonctionnalit\'es telles que les ACLs, les donn\'ees Win32, les donn\'ees 
85 chiffr\'ees... Naturellement, une ancienne version de Bacula ne saurait lire des 
86 nouveaux flux de donn\'ees, mais chaque nouvelle version de Bacula est en principe 
87 capable de lire les anciens flux.
88
89 Si vous voulez \^etre absolument certain de pouvoir lire vos vieilles cartouches, 
90 vous devriez :
91
92 1. Essayer de lire les vieilles cartouches de temps en temps, une fois par an 
93 par exemple.
94
95 2. Conserver une copie statiquement li\'ee de chaque version de Bacula que vous 
96 avez utilis\'ee en production. Ainsi, si pour quelque raison nous venions \`a 
97 abandonner la compatibilit\'e avec les anciens formats de cartouches, vous pourriez 
98 toujours remettre en service une vieille copie de Bacula...
99
100 Le second point est probablement excessif, en toute rigueur, il pourrait vous 
101 sauver un jour.
102
103 \label{wrappers}
104
105 \subsection*{Configurer et tester TCP Wrappers}
106 \index[general]{Configurer et tester TCP Wrappers}
107 \index[general]{Bacula!Configurer et tester TCP Wrappers}
108 \index[general]{TCP Wrappers}
109 \index[general]{Wrappers!TCP}
110 \index[general]{libwrappers}
111 \addcontentsline{toc}{subsection}{Configurer et tester TCP Wrappers}
112
113 Les TCP Wrappers sont impl\'ement\'es si vous les activez lors de la
114 configuration ({\bf ./configure \verb{:--:{with-tcp-wrappers}). Avec ce code activ\'e, vous
115 pourrez contr\^oler qui peut acc\'eder \`a vos {\it daemons}. Ce contr\^ole
116 est obtenu par la modification du fichier {\bf /etc/hosts.allow}. Le nom de
117 programme qu'utilise {\bf Bacula} pour appliquer ces restrictions est celui
118 que vous avez sp\'ecifi\'e dans le fichier de configuration du {\it daemon}.
119 Vous ne devez pas utiliser l'option {\bf twist} dans votre {\bf
120 /etc/hosts.allow} car elle stopperait les {\it daemons} Bacula lorsqu'une
121 connection est refus\'ee. 
122
123 Le nom exact du paquet requis pour compiler avec le support TCP wrappers 
124 d\'epend du syst\`eme. Il s'agit, par exemple, de tcpd-devel sur SuSE, et de 
125 tcp\_wrappers sur RedHat.
126
127 Dan Langille a fourni les informations suivantes concernant la configuration
128 et les tests de TCP Wrappers avec Bacula. 
129
130 Si vous lisez hosts\_options(5), vous verrez une option nomm\'ee twist. Cette
131 option remplace le processus courant par une instance de la commande shell
132 sp\'ecifi\'ee. Voici un exemple typique de son utilisation : 
133
134 \footnotesize
135 \begin{verbatim}
136 ALL : ALL \
137  : severity auth.info \
138  : twist /bin/echo "Vous n'\^etes pas autoris\'e \`a utiliser %d depuis %h."
139 \end{verbatim}
140 \normalsize
141
142 \label{question-1}
143 Le code libwrap tente d'\'eviter {\bf twist} s'il est
144 ex\'ecut\'e dans un processus r\'esident. Il en r\'esulte que le processus (e.g.
145 bacula-fd, bacula-sd, bacula-dir) sera stopp\'e si la premi\`ere connection
146 \`a son port provoque l'invocation de l'option twist. Le risque est qu'une
147 attaque provoque l'arr\^et des {\it daemons}.  Cette situation est \'evit\'ee si votre
148 fichier /etc/hosts.allow contient un jeu de r\`egles appropri\'e. L'exemple
149 suivant est suffisant : 
150
151 \footnotesize
152 \begin{verbatim}
153 undef-fd : localhost : allow
154 undef-sd : localhost : allow
155 undef-dir : localhost : allow
156 undef-fd : ALL : deny
157 undef-sd : ALL : deny
158 undef-dir : ALL : deny
159 \end{verbatim}
160 \normalsize
161
162 Vous devez accorder les noms des {\it daemons} \`a ceux sp\'ecifi\'es dans leurs 
163 fichiers de configuration respectifs. Ce ne sont, en g\'en\'eral, pas les noms 
164 des fichiers binaires des {\it daemons}. Il n'est pas possible d'utiliser 
165 les noms des binaires car plusieurs {\it daemons} peuvent \^etre ex\'ecut\'es 
166 sur une machine avec des fichiers de configuration distincts. 
167
168 Dans ces exemples, le Director est undef-dir, le
169 Storage Daemon est undef-sd, et le File Daemon est undef-fd. Ajustez ces noms pour
170 qu'ils conviennent \`a votre configuration. L'exemple de r\`egles ci-dessus suppose que
171 SD, FD et DIR sont tous sur la m\^eme machine. Si vous avez un client FD
172 distant, il vous suffira de placer le jeu de r\`egles suivant sur ce client : 
173
174 \footnotesize
175 \begin{verbatim}
176 undef-fd : director.example.org : allow
177 undef-fd : ALL : deny
178 \end{verbatim}
179 \normalsize
180
181 O\`u director.example.org est l'h\^ote qui contactera le client (i.e. la
182 machine sur laquelle le Bacula Director tourne). L'usage de "ALL : deny"
183 assure que l'option twist (si pr\'esente) n'est pas invoqu\'ee. Pour tester
184 correctement votre configuration, d\'emarrez le(s) {\it daemon(s)}, puis
185 essayez de vous y connecter depuis une adresse IP qui devrait \^etre capable
186 de le faire. Vous devriez voir quelque chose comme : 
187
188 \footnotesize
189 \begin{verbatim}
190 $ telnet undef 9103
191 Trying 192.168.0.56...
192 Connected to undef.example.org.
193 Escape character is '^]'.
194 Connection closed by foreign host.
195 $
196 \end{verbatim}
197 \normalsize
198
199 C'est la r\'eponse correcte. Si vous voyez ceci : 
200
201 \footnotesize
202 \begin{verbatim}
203 $ telnet undef 9103
204 Trying 192.168.0.56...
205 Connected to undef.example.org.
206 Escape character is '^]'.
207 You are not welcome to use undef-sd from xeon.example.org.
208 Connection closed by foreign host.
209 $
210 \end{verbatim}
211 \normalsize
212
213 Alors, twist a \'et\'e invoqu\'ee, et votre configuration est incorrecte. vous
214 devez ajouter la directive "deny". Il est important de noter que vos tests
215 doivent inclure le red\'emarrage des {\it daemons} apr\`es chaque tentative de
216 connexion. Vous pouvez aussi tcpdchk(8) et tcpdmatch(8) pour valider jeu de
217 r\`egles /etc/hosts.allow. Voici un test simple avec tcpdmatch : 
218
219 \footnotesize
220 \begin{verbatim}
221 $ tcpdmatch undef-dir xeon.example.org
222 warning: undef-dir: no such process name in /etc/inetd.conf
223 client: hostname xeon.example.org
224 client: address 192.168.0.18
225 server: process undef-dir
226 matched: /etc/hosts.allow line 40
227 option: allow
228 access: granted
229 \end{verbatim}
230 \normalsize
231
232 Si vous ex\'ecutez Bacula en tant que {\it standalone daemon}, les
233 avertissements ci-dessus peuvent \^etre ignor\'es sans scrupules. Voici un
234 exemple qui r\'ev\`ele que "deny" fait defaut \`a vos r\`egles, et que
235 l'option twist a \'et\'e invoqu\'ee. 
236
237 \footnotesize
238 \begin{verbatim}
239 $ tcpdmatch undef-dir 10.0.0.1
240 warning: undef-dir: no such process name in /etc/inetd.conf
241 client: address 10.0.0.1
242 server: process undef-dir
243 matched: /etc/hosts.allow line 91
244 option: severity auth.info
245 option: twist /bin/echo "You are not welcome to use
246   undef-dir from 10.0.0.1."
247 access: delegated
248 \end{verbatim}
249 \normalsize
250
251 \subsection*{Ex\'ecuter Bacula sans \^etre root}
252 \index[general]{Root!Ex\'ecuter Bacula sans \^etre }
253 \index[general]{Ex\'ecuter Bacula sans \^etre root }
254 \addcontentsline{toc}{subsection}{Ex\'ecuter Bacula sans \^etre root}
255
256 Voici quelques recommandations de Dan Languille :  
257
258 C'est une bonne id\'ee d'ex\'ecuter vos {\it daemons} avec des  privil\`eges
259 aussi faibles que possible. En d'autres termes,  si vous pouvez, n'ex\'ecutez
260 pas d'applications en tant que root  si elle n'ont pas besoin d'\^etre
261 ex\'ecut\'ees en tant que root.  Le Storage Daemon et le Director Daemon n'ont
262 pas besoin  d'\^etre ex\'ecut\'es en tant que root. Le File Daemon en a besoin
263 pour acc\'eder  \`a l'ensemble des fichiers du syst\`eme. Pour vous passer des
264 privil\`eges  root, il vous faut cr\'eer un utilisateur et un groupe. Choisir
265 {\tt bacula}  pour l'un et l'autre me semble une bonne id\'ee.  
266
267 Le port FreeBSD cr\'ee cet utilisateur et ce groupe pour vous. (En fait, au
268 moment  ou j'\'ecris ces lignes, ce n'est pas encore le cas, mais \c{c}a le
269 sera bient\^ot).  Voici \`a quoi ressemblent ces entr\'ees sur mon portable
270 FreeBSD : 
271
272 \footnotesize
273 \begin{verbatim}
274 bacula:*:1002:1002::0:0:Bacul Daemon:/var/db/bacula:/sbin/nologin
275 \end{verbatim}
276 \normalsize
277
278 J'ai utilis\'e vipw pour cr\'eer ces entr\'ees. J'ai utilis\'e un User ID et
279 un Group ID  disponibles sur mon syst\`eme : 1002.  
280
281 J'ai aussi cr\'e\'e un groupe dans /etc/group:  
282
283 \footnotesize
284 \begin{verbatim}
285 bacula:*:1002:
286 \end{verbatim}
287 \normalsize
288
289 L'utilisateur bacula, contrairement au {\it daemon} Bacula, aura un 
290 r\'epertoire d\'edi\'e (home directory) : {\tt /var/db/bacula}  qui est le
291 r\'epertoire standard pour le catalogue de Bacula.  
292
293 A pr\'esent, vous avez un utilisateur et un groupe bacula, et vous pouvez 
294 s\'ecuriser le r\'epertoire d\'edi\'e de bacula en utilisant cette commande : 
295
296 \footnotesize
297 \begin{verbatim}
298 chown -R bacula:bacula /var/db/bacula/
299 \end{verbatim}
300 \normalsize
301
302 Celle-ci assure que seul l'utilisateur bacula peut acc\'eder \`a ce
303 r\'epertoire.  Elle signifie aussi que si nous ex\'ecutons le Director et le
304 Storage Daemon  en tant que bacula, ces {\it daemons} auront aussi des acc\`es
305 restreints.  Ce ne serait pas le cas s'ils \'etaient ex\'ecut\'es en tant que
306 root.  
307
308 Il est important de noter que le Storage Daemon a vraiment besoin 
309 d'appartenir au groupe operator pour un acc\`es normal aux lecteurs de bandes.
310 (au moins sur FreeBSD, c'est ainsi que les choses sont configur\'ees par
311 d\'efaut).  De tels p\'eriph\'eriques sont en principe attribu\'es \`a
312 root:operator. Il est plus  facile et moins dangereux de faire de bacula un
313 membre de ce groupe que de jouer  avec les permissions du syst\`eme. 
314
315 D\'emarrer les {\it daemons} bacula 
316
317 Pour d\'emarrer les {\it daemons} bacula sur FreeBSD, utilisez la commande : 
318
319 \footnotesize
320 \begin{verbatim}
321 /usr/local/etc/rc.d/bacula.sh start
322 \end{verbatim}
323 \normalsize
324
325 Pour vous assurer que tous fonctionnent : 
326
327 \footnotesize
328 \begin{verbatim}
329 $ ps auwx | grep bacula
330 root\ 63416\ 0.0\ 0.3\ 2040 1172\ ??\ Ss\ 4:09PM 0:00.01
331     /usr/local/sbin/bacula-sd -v -c /usr/local/etc/bacula-sd.conf
332 root\ 63418\ 0.0\ 0.3\ 1856 1036\ ??\ Ss\ 4:09PM 0:00.00
333     /usr/local/sbin/bacula-fd -v -c /usr/local/etc/bacula-fd.conf
334 root\ 63422\ 0.0\ 0.4\ 2360 1440\ ??\ Ss\ 4:09PM 0:00.00
335     /usr/local/sbin/bacula-dir -v -c /usr/local/etc/bacula-dir.conf
336 \end{verbatim}
337 \normalsize