| 1 | <?xml version="1.0" encoding="iso-8859-1"?>
 | 
|---|
| 2 | <!DOCTYPE chapter PUBLIC "-//Samba-Team//DTD DocBook V4.2-Based Variant V1.0//EN" "http://www.samba.org/samba/DTD/samba-doc">
 | 
|---|
| 3 | <chapter id="VFS">
 | 
|---|
| 4 | <chapterinfo>
 | 
|---|
| 5 |         &author.jelmer;
 | 
|---|
| 6 |         &author.jht;
 | 
|---|
| 7 |         &author.tpot;
 | 
|---|
| 8 |         <author><firstname>Simo</firstname><surname>Sorce</surname><contrib>original vfs_skel README</contrib></author>
 | 
|---|
| 9 |         <author><firstname>Alexander</firstname><surname>Bokovoy</surname><contrib>original vfs_netatalk docs</contrib></author>
 | 
|---|
| 10 |         <author><firstname>Stefan</firstname><surname>Metzmacher</surname><contrib>Update for multiple modules</contrib></author>
 | 
|---|
| 11 |         <author><firstname>Ed</firstname><surname>Riddle</surname><contrib>original shadow_copy docs</contrib></author>
 | 
|---|
| 12 | </chapterinfo>
 | 
|---|
| 13 | <title>Stackable VFS modules</title>
 | 
|---|
| 14 | 
 | 
|---|
| 15 | <sect1>
 | 
|---|
| 16 | <title>Features and Benefits</title>
 | 
|---|
| 17 | 
 | 
|---|
| 18 | <para>
 | 
|---|
| 19 | <indexterm><primary>Virtual File System</primary><see>VFS</see></indexterm>
 | 
|---|
| 20 | <indexterm><primary>modules</primary></indexterm>
 | 
|---|
| 21 | <indexterm><primary>loaded modules</primary></indexterm>
 | 
|---|
| 22 | Stackable VFS (Virtual File System) modules support was new to Samba-3 and has proven quite popular. Samba
 | 
|---|
| 23 | passes each request to access the UNIX file system through the loaded VFS modules. This chapter covers the
 | 
|---|
| 24 | modules that come with the Samba source and provides references to some external modules.
 | 
|---|
| 25 | </para>
 | 
|---|
| 26 | 
 | 
|---|
| 27 | 
 | 
|---|
| 28 | </sect1>
 | 
|---|
| 29 | 
 | 
|---|
| 30 | <sect1>
 | 
|---|
| 31 | <title>Discussion</title>
 | 
|---|
| 32 | 
 | 
|---|
| 33 | <para>
 | 
|---|
| 34 | <indexterm><primary>IRIX</primary></indexterm>
 | 
|---|
| 35 | <indexterm><primary>GNU/Linux</primary></indexterm>
 | 
|---|
| 36 | If not supplied with your platform distribution binary Samba package, you may have problems compiling these
 | 
|---|
| 37 | modules, as shared libraries are compiled and linked in different ways on different systems. They currently
 | 
|---|
| 38 | have been tested against GNU/Linux and IRIX.
 | 
|---|
| 39 | </para>
 | 
|---|
| 40 | 
 | 
|---|
| 41 | <para>
 | 
|---|
| 42 | <indexterm><primary>VFS modules</primary></indexterm>
 | 
|---|
| 43 | <indexterm><primary>modules</primary></indexterm>
 | 
|---|
| 44 | <indexterm><primary>recycle bin</primary></indexterm>
 | 
|---|
| 45 | To use the VFS modules, create a share similar to the one below. The important parameter is the <smbconfoption
 | 
|---|
| 46 | name="vfs objects"/> parameter where you can list one or more VFS modules by name. For example, to log all
 | 
|---|
| 47 | access to files and put deleted files in a recycle bin, see <link linkend="vfsrecyc">the smb.conf with VFS
 | 
|---|
| 48 | modules example</link>:
 | 
|---|
| 49 | </para>
 | 
|---|
| 50 | 
 | 
|---|
| 51 | <example id="vfsrecyc">
 | 
|---|
| 52 | <title>smb.conf with VFS modules</title>
 | 
|---|
| 53 | <smbconfblock>
 | 
|---|
| 54 | <smbconfsection name="[audit]"/>
 | 
|---|
| 55 | <smbconfoption name="comment">Audited /data directory</smbconfoption>
 | 
|---|
| 56 | <smbconfoption name="path">/data</smbconfoption>
 | 
|---|
| 57 | <smbconfoption name="vfs objects">audit recycle</smbconfoption>
 | 
|---|
| 58 | <smbconfoption name="writeable">yes</smbconfoption>
 | 
|---|
| 59 | <smbconfoption name="browseable">yes</smbconfoption>
 | 
|---|
| 60 | </smbconfblock>
 | 
|---|
| 61 | </example>
 | 
|---|
| 62 | 
 | 
|---|
| 63 | <para>
 | 
|---|
| 64 | <indexterm><primary>virus scanner</primary></indexterm>
 | 
|---|
| 65 | <indexterm><primary>scanner module</primary></indexterm>
 | 
|---|
| 66 | <indexterm><primary>recycle bin</primary></indexterm>
 | 
|---|
| 67 | The modules are used in the order in which they are specified.  Let's say that you want to both have a virus
 | 
|---|
| 68 | scanner module and a recycle bin module. It is wise to put the virus scanner module as the first one so that
 | 
|---|
| 69 | it is the first to get run and may detect a virus immediately, before any action is performed on that file.
 | 
|---|
| 70 | <smbconfoption name="vfs objects">vscan-clamav recycle</smbconfoption>
 | 
|---|
| 71 | </para>
 | 
|---|
| 72 | 
 | 
|---|
| 73 | <para>
 | 
|---|
| 74 | <indexterm><primary>/usr/local/samba/lib/vfs</primary></indexterm>
 | 
|---|
| 75 | <indexterm><primary>/usr/lib/samba/vfs</primary></indexterm>
 | 
|---|
| 76 | Samba will attempt to load modules from the <filename>/lib</filename> directory in the root directory of the
 | 
|---|
| 77 | Samba installation (usually <filename>/usr/lib/samba/vfs</filename> or
 | 
|---|
| 78 | <filename>/usr/local/samba/lib/vfs</filename>).
 | 
|---|
| 79 | </para>
 | 
|---|
| 80 | 
 | 
|---|
| 81 | <para>
 | 
|---|
| 82 | <indexterm><primary>modules</primary></indexterm>
 | 
|---|
| 83 | <indexterm><primary>VFS</primary></indexterm>
 | 
|---|
| 84 | <indexterm><primary>multiple modules</primary></indexterm>
 | 
|---|
| 85 | <indexterm><primary>multiple VFS</primary></indexterm>
 | 
|---|
| 86 | Some modules can be used twice for the same share.  This can be done using a configuration similar to the one
 | 
|---|
| 87 | shown in <link linkend="multimodule">the smb.conf with multiple VFS modules</link>.
 | 
|---|
| 88 | 
 | 
|---|
| 89 | <example id="multimodule">
 | 
|---|
| 90 | <title>smb.conf with multiple VFS modules</title>
 | 
|---|
| 91 | <smbconfblock>
 | 
|---|
| 92 | <smbconfsection name="[test]"/>
 | 
|---|
| 93 | <smbconfoption name="comment">VFS TEST</smbconfoption>
 | 
|---|
| 94 | <smbconfoption name="path">/data</smbconfoption>
 | 
|---|
| 95 | <smbconfoption name="writeable">yes</smbconfoption>
 | 
|---|
| 96 | <smbconfoption name="browseable">yes</smbconfoption>
 | 
|---|
| 97 | <smbconfoption name="vfs objects">example:example1 example example:test</smbconfoption>
 | 
|---|
| 98 | <smbconfoption name="example1: parameter">1</smbconfoption>
 | 
|---|
| 99 | <smbconfoption name="example:  parameter">5</smbconfoption>
 | 
|---|
| 100 | <smbconfoption name="test:     parameter">7</smbconfoption>
 | 
|---|
| 101 | </smbconfblock>
 | 
|---|
| 102 | </example>
 | 
|---|
| 103 | </para>
 | 
|---|
| 104 | 
 | 
|---|
| 105 | </sect1>
 | 
|---|
| 106 | 
 | 
|---|
| 107 | <sect1>
 | 
|---|
| 108 | <title>Included Modules</title>
 | 
|---|
| 109 | 
 | 
|---|
| 110 |         <sect2>
 | 
|---|
| 111 |         <title>audit</title>
 | 
|---|
| 112 | 
 | 
|---|
| 113 |                 <para>
 | 
|---|
| 114 | <indexterm><primary>audit file access</primary></indexterm>
 | 
|---|
| 115 |                 A simple module to audit file access to the syslog facility. The following operations are logged:
 | 
|---|
| 116 |                 <itemizedlist>
 | 
|---|
| 117 |                         <listitem><para>share</para></listitem>
 | 
|---|
| 118 |                         <listitem><para>connect/disconnect</para></listitem>
 | 
|---|
| 119 |                         <listitem><para>directory opens/create/remove</para></listitem>
 | 
|---|
| 120 |                         <listitem><para>file open/close/rename/unlink/chmod</para></listitem>
 | 
|---|
| 121 |                 </itemizedlist>
 | 
|---|
| 122 |                 </para>
 | 
|---|
| 123 | 
 | 
|---|
| 124 |         </sect2>
 | 
|---|
| 125 | 
 | 
|---|
| 126 |         <sect2>
 | 
|---|
| 127 |         <title>default_quota</title>
 | 
|---|
| 128 | 
 | 
|---|
| 129 |         <para>
 | 
|---|
| 130 |         This module allows the default quota values, in the windows explorer GUI, to be stored on a Samba-3 server.
 | 
|---|
| 131 |         The challenge is that linux filesystems only store quotas for users and groups, but no default quotas.
 | 
|---|
| 132 |         </para>
 | 
|---|
| 133 | 
 | 
|---|
| 134 |         <para>
 | 
|---|
| 135 |         Samba returns NO_LIMIT as the default quotas by default and refuses to update them. With this module you 
 | 
|---|
| 136 |         can store the default quotas that are reported to a windows client, in the quota record of a user. By
 | 
|---|
| 137 |         default the root user is taken because quota limits for root are typically not enforced.
 | 
|---|
| 138 |         </para>
 | 
|---|
| 139 | 
 | 
|---|
| 140 |         <para>
 | 
|---|
| 141 |         This module takes 2 parametric entries in the &smb.conf; file.  The default prefix for each is the
 | 
|---|
| 142 |         <quote>default_quota</quote>. This can be overwrittem when you load the module in the <emphasis>vfs
 | 
|---|
| 143 |         modules</emphasis> parameter like this:
 | 
|---|
| 144 | <screen>
 | 
|---|
| 145 | vfs objects = default_quota:myprefix
 | 
|---|
| 146 | </screen>
 | 
|---|
| 147 |         </para>
 | 
|---|
| 148 | 
 | 
|---|
| 149 |         <para>
 | 
|---|
| 150 |         The parametric entries that may be specified for the default_quotas module are:
 | 
|---|
| 151 |         </para>
 | 
|---|
| 152 | 
 | 
|---|
| 153 |         <variablelist>
 | 
|---|
| 154 |                 <varlistentry>
 | 
|---|
| 155 |             <term>myprefix:uid</term>
 | 
|---|
| 156 |                         <listitem><para>
 | 
|---|
| 157 |                         This parameter takes a integer argument that specifies the uid of the quota record that will be 
 | 
|---|
| 158 |                         used for storing the default user quotas.
 | 
|---|
| 159 |                         </para>
 | 
|---|
| 160 | 
 | 
|---|
| 161 |                         <para>
 | 
|---|
| 162 |                         The default value is 0 (for root user). An example of use is:
 | 
|---|
| 163 | <screen>
 | 
|---|
| 164 | vfs objects = default_quota
 | 
|---|
| 165 | default_quota:  uid = 65534
 | 
|---|
| 166 | </screen>
 | 
|---|
| 167 |                         The above demonstrates the case where the <constant>myprefix</constant> was omitted, thus the
 | 
|---|
| 168 |                         default prefix is the name of the module. When a <constant>myprefix</constant> parameter is
 | 
|---|
| 169 |                         specified the above can be re-written like this:
 | 
|---|
| 170 | <screen>
 | 
|---|
| 171 | vfs objects = default_quota:myprefix
 | 
|---|
| 172 | myprefix:       uid = 65534
 | 
|---|
| 173 | </screen>
 | 
|---|
| 174 |                         </para></listitem>
 | 
|---|
| 175 |                 </varlistentry>
 | 
|---|
| 176 | 
 | 
|---|
| 177 |                 <varlistentry>
 | 
|---|
| 178 |             <term>myprefix:uid nolimit</term>
 | 
|---|
| 179 |                         <listitem><para>
 | 
|---|
| 180 |                         This parameter takes a boolean argument that specifies if the stored default quota values also be
 | 
|---|
| 181 |                         reported for the user record, or if the value <constant>NO_LIMIT</constant> should be reported to 
 | 
|---|
| 182 |                         the windows client for the user specified by the <parameter>prefix:uid</parameter> parameter.
 | 
|---|
| 183 |                         </para>
 | 
|---|
| 184 | 
 | 
|---|
| 185 |                         <para>
 | 
|---|
| 186 |                         The default value is <constant>yes</constant> (which means to report NO_LIMIT). An example of use
 | 
|---|
| 187 |                         is shown here:
 | 
|---|
| 188 | <screen>
 | 
|---|
| 189 | vfs objects = default_quota:myprefix
 | 
|---|
| 190 | myprefix:       uid nolimit = no
 | 
|---|
| 191 | </screen>
 | 
|---|
| 192 |                         </para></listitem>
 | 
|---|
| 193 |                 </varlistentry>
 | 
|---|
| 194 | 
 | 
|---|
| 195 |                 <varlistentry>
 | 
|---|
| 196 |                         <term>myprefix:gid</term>
 | 
|---|
| 197 |                         <listitem><para>
 | 
|---|
| 198 |                         This parameter takes an integer argument, it's just like the <parameter>prefix>:uid</parameter> but 
 | 
|---|
| 199 |                         for group quotas.  NOTE: group quotas are not supported from the windows explorer.
 | 
|---|
| 200 |                         </para>
 | 
|---|
| 201 | 
 | 
|---|
| 202 |                         <para>
 | 
|---|
| 203 |                         The default value is 0 (for root group). An example of use is shown here:
 | 
|---|
| 204 | <screen>
 | 
|---|
| 205 | vfs objects = default_quota
 | 
|---|
| 206 | default_quota:  gid = 65534
 | 
|---|
| 207 | </screen>
 | 
|---|
| 208 |                         </para></listitem>
 | 
|---|
| 209 |                 </varlistentry>
 | 
|---|
| 210 | 
 | 
|---|
| 211 |                 <varlistentry>
 | 
|---|
| 212 |                         <term>myprefix:gid nolimit</term>
 | 
|---|
| 213 |                         <listitem><para>
 | 
|---|
| 214 |                         This parameter takes a boolean argument, just like the <parameter>prefix>:uid nolimit</parameter> 
 | 
|---|
| 215 |                         but for group quotas.  NOTE: group quotas are not supported from the windows explorer.
 | 
|---|
| 216 |                         </para>
 | 
|---|
| 217 | 
 | 
|---|
| 218 |                         <para>
 | 
|---|
| 219 |                         The default value is <constant>yes</constant> (which means to report NO_LIMIT). An example of use
 | 
|---|
| 220 |                         is shown here:
 | 
|---|
| 221 | <screen>
 | 
|---|
| 222 | vfs objects = default_quota
 | 
|---|
| 223 | default_quota:  uid nolimit = no
 | 
|---|
| 224 | </screen>
 | 
|---|
| 225 |                         </para></listitem>
 | 
|---|
| 226 |                 </varlistentry>
 | 
|---|
| 227 |         </variablelist>
 | 
|---|
| 228 | 
 | 
|---|
| 229 |         <para>
 | 
|---|
| 230 |         An example of use of multiple parametric specifications is shown here:
 | 
|---|
| 231 | <screen>
 | 
|---|
| 232 | ...
 | 
|---|
| 233 | vfs objects = default_quota:quotasettings
 | 
|---|
| 234 | quotasettings:  uid nolimit = no
 | 
|---|
| 235 | quotasettings:  gid = 65534
 | 
|---|
| 236 | quotasettings:  gid nolimit = no
 | 
|---|
| 237 | ...
 | 
|---|
| 238 | </screen>
 | 
|---|
| 239 |         </para>
 | 
|---|
| 240 | 
 | 
|---|
| 241 |         </sect2>
 | 
|---|
| 242 | 
 | 
|---|
| 243 |         <sect2>
 | 
|---|
| 244 |         <title>extd_audit</title>
 | 
|---|
| 245 | 
 | 
|---|
| 246 |                 <para>
 | 
|---|
| 247 | <indexterm><primary>audit module</primary></indexterm>
 | 
|---|
| 248 | <indexterm><primary>extd_audit module</primary></indexterm>
 | 
|---|
| 249 | <indexterm><primary>smbd</primary></indexterm>
 | 
|---|
| 250 |                 This module is identical with the <command>audit</command> module above except
 | 
|---|
| 251 |                 that it sends audit logs to both syslog as well as the <command>smbd</command> log files. The 
 | 
|---|
| 252 |                 <smbconfoption name="log level"/> for this module is set in the &smb.conf; file. 
 | 
|---|
| 253 |                 </para>
 | 
|---|
| 254 | 
 | 
|---|
| 255 |                 <para>
 | 
|---|
| 256 |                 Valid settings and the information that will be recorded are shown in <link linkend="xtdaudit">the next table</link>.
 | 
|---|
| 257 |                 </para>
 | 
|---|
| 258 | 
 | 
|---|
| 259 |                 <table frame="all" id="xtdaudit">
 | 
|---|
| 260 |                         <title>Extended Auditing Log Information</title>
 | 
|---|
| 261 |                 <tgroup cols="2" align="center">
 | 
|---|
| 262 |                         <thead>
 | 
|---|
| 263 |                         <row><entry align="center">Log Level</entry><entry>Log Details - File and Directory Operations</entry></row>
 | 
|---|
| 264 |                         </thead>
 | 
|---|
| 265 |                         <tbody>
 | 
|---|
| 266 |                         <row><entry align="center">0</entry><entry align="left">Make Directory, Remove Directory, Unlink</entry></row>
 | 
|---|
| 267 |                         <row><entry align="center">1</entry><entry align="left">Open Directory, Rename File, Change Permissions/ACLs</entry></row>
 | 
|---|
| 268 |                         <row><entry align="center">2</entry><entry align="left">Open & Close File</entry></row>
 | 
|---|
| 269 |                         <row><entry align="center">10</entry><entry align="left">Maximum Debug Level</entry></row>
 | 
|---|
| 270 |                         </tbody>
 | 
|---|
| 271 |                 </tgroup>
 | 
|---|
| 272 |                 </table>
 | 
|---|
| 273 | 
 | 
|---|
| 274 |                 <sect3>
 | 
|---|
| 275 |                 <title>Configuration of Auditing</title>
 | 
|---|
| 276 | 
 | 
|---|
| 277 |                 <para>
 | 
|---|
| 278 | <indexterm><primary>logging</primary></indexterm>
 | 
|---|
| 279 |                 This auditing tool is more flexible than most people will readily recognize. There are a number of ways
 | 
|---|
| 280 |                 by which useful logging information can be recorded.
 | 
|---|
| 281 |                 </para>
 | 
|---|
| 282 | 
 | 
|---|
| 283 |                 <itemizedlist>
 | 
|---|
| 284 |                         <listitem><para>Syslog can be used to record all transaction. This can be disabled by setting
 | 
|---|
| 285 |                                         in the &smb.conf; file <parameter>syslog = 0</parameter>.</para></listitem>
 | 
|---|
| 286 |                         <listitem><para>Logging can take place to the default log file (<filename>log.smbd</filename>)
 | 
|---|
| 287 |                                         for all loaded VFS modules just by setting in the &smb.conf; file
 | 
|---|
| 288 |                                         <parameter>log level = 0 vfs:x</parameter>, where x is the log level.
 | 
|---|
| 289 |                                         This will disable general logging while activating all logging of VFS
 | 
|---|
| 290 |                                         module activity at the log level specified.</para></listitem>
 | 
|---|
| 291 |                         <listitem><para>Detailed logging can be obtained per user, per client machine, etc.
 | 
|---|
| 292 |                                         This requires the above together with the creative use of the
 | 
|---|
| 293 |                                         <parameter>log file</parameter> settings.</para>
 | 
|---|
| 294 |                                         <para>An example of detailed per-user and per-machine logging can
 | 
|---|
| 295 |                                         be obtained by setting 
 | 
|---|
| 296 |                                         <smbconfoption name="log file">/var/log/samba/%U.%m.log</smbconfoption>.
 | 
|---|
| 297 |                                         </para></listitem>
 | 
|---|
| 298 |                 </itemizedlist>
 | 
|---|
| 299 | 
 | 
|---|
| 300 |                 <para>
 | 
|---|
| 301 |                 Auditing information often must be preserved for a long time. So that the log files do not get rotated
 | 
|---|
| 302 |                 it is essential that the <smbconfoption name="max log size">0</smbconfoption> be set
 | 
|---|
| 303 |                 in the &smb.conf; file.
 | 
|---|
| 304 |                 </para>
 | 
|---|
| 305 | 
 | 
|---|
| 306 |                 </sect3>
 | 
|---|
| 307 | 
 | 
|---|
| 308 |         </sect2>
 | 
|---|
| 309 | 
 | 
|---|
| 310 |         <sect2 id="fakeperms">
 | 
|---|
| 311 |         <title>fake_perms</title>
 | 
|---|
| 312 | 
 | 
|---|
| 313 |                 <para>
 | 
|---|
| 314 | <indexterm><primary>fake_perms</primary></indexterm>
 | 
|---|
| 315 | <indexterm><primary>Roaming Profile</primary></indexterm>
 | 
|---|
| 316 | <indexterm><primary>writeable</primary></indexterm>
 | 
|---|
| 317 | <indexterm><primary>read only</primary></indexterm>
 | 
|---|
| 318 |                 This module was created to allow Roaming Profile files and directories to be set (on the Samba server
 | 
|---|
| 319 |                 under UNIX) as read only. This module will, if installed on the Profiles share, report to the client
 | 
|---|
| 320 |                 that the Profile files and directories are writeable. This satisfies the client even though the files
 | 
|---|
| 321 |                 will never be overwritten as the client logs out or shuts down.
 | 
|---|
| 322 |                 </para>
 | 
|---|
| 323 | 
 | 
|---|
| 324 |         </sect2>
 | 
|---|
| 325 | 
 | 
|---|
| 326 |         <sect2>
 | 
|---|
| 327 |         <title>recycle</title>
 | 
|---|
| 328 | 
 | 
|---|
| 329 |                 <para>
 | 
|---|
| 330 | <indexterm><primary>recycle</primary></indexterm>
 | 
|---|
| 331 | <indexterm><primary>unlink calls</primary></indexterm>
 | 
|---|
| 332 | <indexterm><primary>recycle directory</primary></indexterm>
 | 
|---|
| 333 |                 A Recycle Bin-like module. Where used, unlink calls will be intercepted and files moved
 | 
|---|
| 334 |                 to the recycle directory instead of being deleted. This gives the same effect as the
 | 
|---|
| 335 |                 <guiicon>Recycle Bin</guiicon> on Windows computers.
 | 
|---|
| 336 |                 </para>
 | 
|---|
| 337 | 
 | 
|---|
| 338 |                 <para>
 | 
|---|
| 339 | <indexterm><primary>recycle</primary></indexterm>
 | 
|---|
| 340 | <indexterm><primary>.recycle</primary></indexterm>
 | 
|---|
| 341 | <indexterm><primary>recycle:keeptree</primary></indexterm>
 | 
|---|
| 342 | <indexterm><primary>deleted files</primary></indexterm>
 | 
|---|
| 343 |                 The <guiicon>Recycle Bin</guiicon> will not appear in
 | 
|---|
| 344 |                 <application>Windows Explorer</application> views of the network
 | 
|---|
| 345 |                 file system (share) nor on any mapped drive. Instead, a directory
 | 
|---|
| 346 |                 called <filename>.recycle</filename> will be automatically created
 | 
|---|
| 347 |                 when the first file is deleted and <parameter>recycle:repository</parameter>
 | 
|---|
| 348 |                 is not configured.
 | 
|---|
| 349 |                 If <parameter>recycle:repository</parameter> is configured, the name
 | 
|---|
| 350 |                 of the created directory depends on <parameter>recycle:repository</parameter>.
 | 
|---|
| 351 |                 Users can recover files from the recycle bin. If the
 | 
|---|
| 352 |                 <parameter>recycle:keeptree</parameter> has been specified,     deleted
 | 
|---|
| 353 |                 files will be found in a path identical with that from which the
 | 
|---|
| 354 |                 file was deleted.
 | 
|---|
| 355 |                 </para>
 | 
|---|
| 356 |                 
 | 
|---|
| 357 |                 <para>Supported options for the <command>recycle</command> module are as follow:
 | 
|---|
| 358 |                 <variablelist>
 | 
|---|
| 359 |                         <varlistentry>
 | 
|---|
| 360 |                         <term>recycle:repository</term>
 | 
|---|
| 361 |                                 <listitem><para>
 | 
|---|
| 362 | <indexterm><primary>recycle:repository</primary></indexterm>
 | 
|---|
| 363 |                                 Path of the directory where deleted files should be moved.
 | 
|---|
| 364 |                                 </para></listitem>
 | 
|---|
| 365 |                         </varlistentry>
 | 
|---|
| 366 | 
 | 
|---|
| 367 |                         <varlistentry>
 | 
|---|
| 368 |                         <term>recycle:directory_mode</term>
 | 
|---|
| 369 |                                 <listitem><para>
 | 
|---|
| 370 | <indexterm><primary>directory_mode</primary></indexterm>
 | 
|---|
| 371 |                                 Set it to the octal mode you want for the recycle directory. With
 | 
|---|
| 372 |                                 this mode the recycle directory will be created if it not
 | 
|---|
| 373 |                                 exists and the first file is deleted.
 | 
|---|
| 374 |                                 If <parameter>recycle:subdir_mode</parameter> is not set, these
 | 
|---|
| 375 |                                 mode also apply to sub directories.
 | 
|---|
| 376 |                                 If <parameter>directory_mode</parameter> not exists, the default
 | 
|---|
| 377 |                                 mode 0700 is used.
 | 
|---|
| 378 |                                 </para></listitem>
 | 
|---|
| 379 |                         </varlistentry>
 | 
|---|
| 380 | 
 | 
|---|
| 381 |                         <varlistentry>
 | 
|---|
| 382 |                         <term>recycle:subdir_mode</term>
 | 
|---|
| 383 |                                 <listitem><para>
 | 
|---|
| 384 | <indexterm><primary>recycle:subdir_mode</primary></indexterm>
 | 
|---|
| 385 |                                 Set it to the octal mode you want for the sub directories of
 | 
|---|
| 386 |                                 the recycle directory. With this mode   the sub directories will
 | 
|---|
| 387 |                                 be created.
 | 
|---|
| 388 |                                 If <parameter>recycle:subdir_mode</parameter> is not set, the
 | 
|---|
| 389 |                                 sub directories will be created with the mode from
 | 
|---|
| 390 |                                 <parameter>directory_mode</parameter>.
 | 
|---|
| 391 |                                 </para></listitem>
 | 
|---|
| 392 |                         </varlistentry>
 | 
|---|
| 393 | 
 | 
|---|
| 394 |                         <varlistentry>
 | 
|---|
| 395 |                         <term>recycle:keeptree</term>
 | 
|---|
| 396 |                                 <listitem><para>
 | 
|---|
| 397 | <indexterm><primary>recycle:keeptree</primary></indexterm>
 | 
|---|
| 398 |                                 Specifies whether the directory structure should be kept or if the files in the directory that is being 
 | 
|---|
| 399 |                                 deleted should be kept separately in the recycle bin.
 | 
|---|
| 400 |                                 </para></listitem>
 | 
|---|
| 401 |                         </varlistentry>
 | 
|---|
| 402 |                         
 | 
|---|
| 403 |                         <varlistentry>
 | 
|---|
| 404 |                         <term>recycle:versions</term>
 | 
|---|
| 405 |                                 <listitem><para>
 | 
|---|
| 406 | <indexterm><primary>recycle:versions</primary></indexterm>
 | 
|---|
| 407 |                                 If this option is set, two files 
 | 
|---|
| 408 |                                 with the same name that are deleted will both 
 | 
|---|
| 409 |                                 be kept in the recycle bin. Newer deleted versions 
 | 
|---|
| 410 |                                 of a file will be called <quote>Copy #x of <replaceable>filename</replaceable></quote>.
 | 
|---|
| 411 |                                 </para></listitem>
 | 
|---|
| 412 |                         </varlistentry>
 | 
|---|
| 413 | 
 | 
|---|
| 414 |                         <varlistentry>
 | 
|---|
| 415 |                         <term>recycle:touch</term>
 | 
|---|
| 416 |                                 <listitem><para>
 | 
|---|
| 417 | <indexterm><primary>recycle:touch</primary></indexterm>
 | 
|---|
| 418 |                                 Specifies whether a file's access date should be touched when the file is moved to the recycle bin.
 | 
|---|
| 419 |                                 </para></listitem>
 | 
|---|
| 420 |                         </varlistentry>
 | 
|---|
| 421 | 
 | 
|---|
| 422 |                         <varlistentry>
 | 
|---|
| 423 |                         <term>recycle:touch_mtime</term>
 | 
|---|
| 424 |                                 <listitem><para>
 | 
|---|
| 425 | <indexterm><primary>recycle:touch</primary></indexterm>
 | 
|---|
| 426 |                                 Specifies whether a file's last modify date date should be touched when the file is moved to the recycle bin.
 | 
|---|
| 427 |                                 </para></listitem>
 | 
|---|
| 428 |                         </varlistentry>
 | 
|---|
| 429 | 
 | 
|---|
| 430 |                         <varlistentry>
 | 
|---|
| 431 |                         <term>recycle:maxsize</term>
 | 
|---|
| 432 |                                 <listitem><para>
 | 
|---|
| 433 | <indexterm><primary>recycle:maxsize</primary></indexterm>
 | 
|---|
| 434 |                                 Files that are larger than the number of bytes specified by this parameter will not be put into the recycle bin.
 | 
|---|
| 435 |                                 </para></listitem>
 | 
|---|
| 436 |                         </varlistentry>
 | 
|---|
| 437 | 
 | 
|---|
| 438 |                         <varlistentry>
 | 
|---|
| 439 |                         <term>recycle:exclude</term>
 | 
|---|
| 440 |                                 <listitem><para>
 | 
|---|
| 441 | <indexterm><primary>recycle:exclude</primary></indexterm>
 | 
|---|
| 442 |                                 List of files that should not be put into the recycle bin when deleted, but deleted in the regular way.
 | 
|---|
| 443 |                                 </para></listitem>
 | 
|---|
| 444 |                         </varlistentry>
 | 
|---|
| 445 | 
 | 
|---|
| 446 |                         <varlistentry>
 | 
|---|
| 447 |                         <term>recycle:exclude_dir</term>
 | 
|---|
| 448 |                                 <listitem><para>
 | 
|---|
| 449 | <indexterm><primary>recycle:exclude_dir</primary></indexterm>
 | 
|---|
| 450 |                                 Contains a list of directories. When files from these directories are
 | 
|---|
| 451 |                                 deleted, they are not put into the
 | 
|---|
| 452 |                                 recycle bin but are deleted in the
 | 
|---|
| 453 |                                 regular way.
 | 
|---|
| 454 |                                 </para></listitem>
 | 
|---|
| 455 |                         </varlistentry>
 | 
|---|
| 456 | 
 | 
|---|
| 457 |                         <varlistentry>
 | 
|---|
| 458 |                         <term>recycle:noversions</term>
 | 
|---|
| 459 |                                 <listitem><para>
 | 
|---|
| 460 | <indexterm><primary>recycle:noversions</primary></indexterm>
 | 
|---|
| 461 |                                 Specifies a list of paths (wildcards such as * and ? are supported) for which no versioning
 | 
|---|
| 462 |                                 should be used. Only useful when <emphasis>recycle:versions</emphasis> is enabled.
 | 
|---|
| 463 |                                 </para></listitem>
 | 
|---|
| 464 |                         </varlistentry>
 | 
|---|
| 465 |                 </variablelist>
 | 
|---|
| 466 |                 </para>
 | 
|---|
| 467 | 
 | 
|---|
| 468 |         </sect2>
 | 
|---|
| 469 | 
 | 
|---|
| 470 |         <sect2>
 | 
|---|
| 471 |         <title>netatalk</title>
 | 
|---|
| 472 | 
 | 
|---|
| 473 |                 <para>
 | 
|---|
| 474 | <indexterm><primary>netatalk</primary></indexterm>
 | 
|---|
| 475 |                 A netatalk module will ease co-existence of Samba and netatalk file sharing services.
 | 
|---|
| 476 |                 </para>
 | 
|---|
| 477 | 
 | 
|---|
| 478 |                 <para>Advantages compared to the old netatalk module:
 | 
|---|
| 479 |                 <itemizedlist>
 | 
|---|
| 480 | <indexterm><primary>.AppleDouble</primary></indexterm>
 | 
|---|
| 481 |                         <listitem><para>Does not care about creating .AppleDouble forks, just keeps them in sync.</para></listitem>
 | 
|---|
| 482 |                         <listitem><para>If a share in &smb.conf; does not contain .AppleDouble item in hide or veto list, it will be added automatically.</para></listitem>
 | 
|---|
| 483 |                 </itemizedlist>
 | 
|---|
| 484 |                 </para>
 | 
|---|
| 485 | 
 | 
|---|
| 486 |         </sect2>
 | 
|---|
| 487 | 
 | 
|---|
| 488 |     <sect2>
 | 
|---|
| 489 |       <title>shadow_copy</title>
 | 
|---|
| 490 | 
 | 
|---|
| 491 |         <warning><para>
 | 
|---|
| 492 | <indexterm><primary>shadow_copy</primary></indexterm>
 | 
|---|
| 493 |         <emphasis>THIS IS NOT A BACKUP, ARCHIVAL, OR VERSION CONTROL SOLUTION!</emphasis>
 | 
|---|
| 494 |         </para>
 | 
|---|
| 495 | 
 | 
|---|
| 496 |         <para>
 | 
|---|
| 497 | <indexterm><primary>version control</primary></indexterm>
 | 
|---|
| 498 |         With Samba or Windows servers, shadow_copy is designed to be an end-user tool only.  It does not replace or
 | 
|---|
| 499 |         enhance your backup and archival solutions and should in no way be considered as such.  Additionally, if you
 | 
|---|
| 500 |         need version control, implement a version control system.  You have been warned.
 | 
|---|
| 501 |         </para></warning>
 | 
|---|
| 502 | 
 | 
|---|
| 503 | 
 | 
|---|
| 504 |         <para>
 | 
|---|
| 505 |         The shadow_copy module allows you to setup functionality that is similar to MS shadow copy services.  When
 | 
|---|
| 506 |         setup properly, this module allows Microsoft shadow copy clients to browse "shadow copies" on Samba shares.
 | 
|---|
| 507 |         You will need to install the shadow copy client.  You can get the MS shadow copy client <ulink noescape="1"
 | 
|---|
| 508 |         url="http://www.microsoft.com/windowsserver2003/downloads/shadowcopyclient.mspx">here.</ulink>.  Note the
 | 
|---|
| 509 |         additional requirements for pre-Windows XP clients.  I did not test this functionality with any pre-Windows XP
 | 
|---|
| 510 |         clients.  You should be able to get more information about MS Shadow Copy <ulink noescape="1"
 | 
|---|
| 511 |         url="http://www.microsoft.com/windowsserver2003/techinfo/overview/scr.mspx">from the Microsoft's site</ulink>.
 | 
|---|
| 512 |         </para>
 | 
|---|
| 513 | 
 | 
|---|
| 514 |         <para>
 | 
|---|
| 515 | <indexterm><primary>shadow_copy</primary></indexterm>
 | 
|---|
| 516 | <indexterm><primary>VFS module</primary></indexterm>
 | 
|---|
| 517 | <indexterm><primary>shadow_copy module</primary></indexterm>
 | 
|---|
| 518 | <indexterm><primary>LVM</primary></indexterm>
 | 
|---|
| 519 | <indexterm><primary>EVMS</primary></indexterm>
 | 
|---|
| 520 | <indexterm><primary>Logical Volume Manager</primary><see>LVM</see></indexterm>
 | 
|---|
| 521 |         The shadow_copy VFS module requires some underlying file system setup with some sort of Logical Volume Manager
 | 
|---|
| 522 |         (LVM) such as LVM1, LVM2, or EVMS.  Setting up LVM is beyond the scope of this document; however, we will
 | 
|---|
| 523 |         outline the steps we took to test this functionality for <emphasis>example purposes only.</emphasis> You need
 | 
|---|
| 524 |         to make sure the LVM implementation you choose to deploy is ready for production.  Make sure you do plenty of
 | 
|---|
| 525 |         tests.
 | 
|---|
| 526 |         </para>
 | 
|---|
| 527 | 
 | 
|---|
| 528 |         <para>
 | 
|---|
| 529 |         Here are some common resources for LVM and EVMS:
 | 
|---|
| 530 |         </para>
 | 
|---|
| 531 | 
 | 
|---|
| 532 |         <itemizedlist>
 | 
|---|
| 533 |           <listitem>
 | 
|---|
| 534 |             <para><ulink noescape="1"
 | 
|---|
| 535 |             url="http://www.sistina.com/products_lvm_download.htm">Sistina's
 | 
|---|
| 536 |             LVM1 and LVM2</ulink></para>
 | 
|---|
| 537 |           </listitem>
 | 
|---|
| 538 |           <listitem>
 | 
|---|
| 539 |             <para><ulink url="http://evms.sourceforge.net/">Enterprise Volume Management System (EVMS)</ulink></para>
 | 
|---|
| 540 |           </listitem>
 | 
|---|
| 541 |           <listitem>
 | 
|---|
| 542 |             <para><ulink url="http://tldp.org/HOWTO/LVM-HOWTO/">The LVM HOWTO</ulink></para>
 | 
|---|
| 543 |           </listitem>
 | 
|---|
| 544 |           <listitem>
 | 
|---|
| 545 |             <para>
 | 
|---|
| 546 |               See <ulink url="http://www-106.ibm.com/developerworks/linux/library/l-lvm/">Learning
 | 
|---|
| 547 |               Linux LVM, Part 1</ulink> and <ulink url="http://www-106.ibm.com/developerworks/library/l-lvm2.html">Learning
 | 
|---|
| 548 |               Linux LWM, Part 2</ulink> for Daniel Robbins' well-written, two part tutorial on Linux and LVM using LVM
 | 
|---|
| 549 |               source code and reiserfs.</para>
 | 
|---|
| 550 |           </listitem>
 | 
|---|
| 551 |         </itemizedlist>
 | 
|---|
| 552 | 
 | 
|---|
| 553 |         <sect3>
 | 
|---|
| 554 |         <title>Shadow Copy Setup</title>
 | 
|---|
| 555 |         <para>
 | 
|---|
| 556 | <indexterm><primary>XFS file system</primary></indexterm>
 | 
|---|
| 557 | <indexterm><primary>Debian Sarge</primary></indexterm>
 | 
|---|
| 558 |         At the time of this writing, not much testing has been done.  I tested the shadow copy VFS module with a
 | 
|---|
| 559 |         specific scenario which was not deployed in a production environment, but more as a proof of concept.  The
 | 
|---|
| 560 |         scenario involved a Samba-3 file server on Debian Sarge with an XFS file system and LVM1.  I do NOT recommend
 | 
|---|
| 561 |         you use this as a solution without doing your own due diligence with regard to all the components presented
 | 
|---|
| 562 |         here.  That said, following is an basic outline of how I got things going.
 | 
|---|
| 563 |         </para>
 | 
|---|
| 564 | 
 | 
|---|
| 565 |         <orderedlist>
 | 
|---|
| 566 |           <listitem>
 | 
|---|
| 567 |             <formalpara><title>Installed Operating System </title> 
 | 
|---|
| 568 |             <para>
 | 
|---|
| 569 |                 In my tests, I used <ulink url="http://www.debian.org/devel/debian-installer/">Debian
 | 
|---|
| 570 |                 Sarge</ulink> (i.e., testing) on an XFS file system.  Setting up the OS is a bit beyond the scope of this
 | 
|---|
| 571 |                 document.  It is assumed that you have a working OS capable of running Samba.
 | 
|---|
| 572 |                 </para></formalpara>
 | 
|---|
| 573 |           </listitem>
 | 
|---|
| 574 | 
 | 
|---|
| 575 |           <listitem>
 | 
|---|
| 576 |             <formalpara><title>Install & Configure Samba</title>
 | 
|---|
| 577 |                 <para>
 | 
|---|
| 578 |                 See the <link linkend="introduction">installation section</link> of this HOWTO for more detail on this.
 | 
|---|
| 579 |                 It doesn't matter if it is a Domain Controller or Member File Server, but it is assumed that you have a
 | 
|---|
| 580 |                 working Samba 3.0.3 or later server running.
 | 
|---|
| 581 |                 </para></formalpara>
 | 
|---|
| 582 |           </listitem>
 | 
|---|
| 583 | 
 | 
|---|
| 584 |           <listitem>
 | 
|---|
| 585 |             <formalpara><title>Install & Configure LVM</title>
 | 
|---|
| 586 |                 <para>
 | 
|---|
| 587 | <indexterm><primary>shadow copies</primary></indexterm>
 | 
|---|
| 588 | <indexterm><primary>Snapshots</primary></indexterm>
 | 
|---|
| 589 |                 Before you can make shadow copies available to the client, you have to create the shadow copies.  This is
 | 
|---|
| 590 |                 done by taking some sort of file system snapshot.  Snapshots are a typical feature of Logical Volume
 | 
|---|
| 591 |                 Managers such as LVM, so we first need to have that setup.
 | 
|---|
| 592 |                 </para></formalpara>
 | 
|---|
| 593 | 
 | 
|---|
| 594 |             <itemizedlist>
 | 
|---|
| 595 |                 <para>
 | 
|---|
| 596 |                 The following is provided as an example and will be most helpful for Debian users.  Again, this was tested
 | 
|---|
| 597 |                 using the "testing" or "Sarge" distribution.
 | 
|---|
| 598 |                 </para>
 | 
|---|
| 599 | 
 | 
|---|
| 600 |                         <listitem>
 | 
|---|
| 601 |                         <para>
 | 
|---|
| 602 | <indexterm><primary>lvm10 package</primary></indexterm>
 | 
|---|
| 603 | <indexterm><primary>devfsd package</primary></indexterm>
 | 
|---|
| 604 | <indexterm><primary>Debian</primary></indexterm>
 | 
|---|
| 605 | <indexterm><primary>xfsprogs</primary></indexterm>
 | 
|---|
| 606 | <indexterm><primary>apt-get</primary></indexterm>
 | 
|---|
| 607 |                         Install lvm10 and devfsd packages if you have not done so already.  On Debian systems, you are warned of the
 | 
|---|
| 608 |                         interaction of devfs and lvm1 which requires the use of devfs filenames.  Running <command>apt-get update
 | 
|---|
| 609 |                         && apt-get install lvm10 devfsd xfsprogs</command> should do the trick for this example.
 | 
|---|
| 610 |                         </para></listitem>
 | 
|---|
| 611 | 
 | 
|---|
| 612 |                         <listitem><para>
 | 
|---|
| 613 | <indexterm><primary>create volume</primary></indexterm>
 | 
|---|
| 614 | <indexterm><primary>create partition</primary></indexterm>
 | 
|---|
| 615 | <indexterm><primary>fdisk</primary></indexterm>
 | 
|---|
| 616 | <indexterm><primary>cfdisk</primary></indexterm>
 | 
|---|
| 617 | <indexterm><primary>Linux LVM</primary></indexterm>
 | 
|---|
| 618 |                         Now you need to create a volume.  You will need to create a partition (or partitions) to add to your volume.
 | 
|---|
| 619 |                         Use your favorite partitioning tool (e.g., Linux fdisk, cfdisk, etc.).  The partition type should be set to
 | 
|---|
| 620 |                         0x8e for "Linux LVM."  In this example, we will use /dev/hdb1.
 | 
|---|
| 621 |                         </para>
 | 
|---|
| 622 | 
 | 
|---|
| 623 |                         <para>
 | 
|---|
| 624 | <indexterm><primary>Linux LVM partition</primary></indexterm>
 | 
|---|
| 625 | <indexterm><primary>LVM volume</primary></indexterm>
 | 
|---|
| 626 | <indexterm><primary>modprobe</primary></indexterm>
 | 
|---|
| 627 |                         Once you have the Linux LVM partition (type 0x8e), you can run a series of commands to create the LVM volume.
 | 
|---|
| 628 |                         You can use several disks and/or partitions, but we will use only one in this example.  You may also need to
 | 
|---|
| 629 |                         load the kernel module with something like <command>modprobe lvm-mod</command> and set your system up to load
 | 
|---|
| 630 |                         it on reboot by adding it to (<filename>/etc/modules</filename>).
 | 
|---|
| 631 |                         </para></listitem>
 | 
|---|
| 632 | 
 | 
|---|
| 633 |                         <listitem><para>
 | 
|---|
| 634 | <indexterm><primary>pvcreate</primary></indexterm>
 | 
|---|
| 635 |                         Create the physical volume with <command>pvcreate /dev/hdb1</command>
 | 
|---|
| 636 |                         </para></listitem>
 | 
|---|
| 637 | 
 | 
|---|
| 638 |                         <listitem><para>
 | 
|---|
| 639 | <indexterm><primary>vgcreate</primary></indexterm>
 | 
|---|
| 640 | <indexterm><primary>volume group</primary></indexterm>
 | 
|---|
| 641 |                         Create the volume group and add /dev/hda1 to it with <command>vgcreate shadowvol /dev/hdb1</command>
 | 
|---|
| 642 |                         </para>
 | 
|---|
| 643 | 
 | 
|---|
| 644 |                         <para>
 | 
|---|
| 645 | <indexterm><primary>vgdisplay</primary></indexterm>
 | 
|---|
| 646 |                         You can use <command>vgdisplay</command> to review information about the volume group.
 | 
|---|
| 647 |                         </para></listitem>
 | 
|---|
| 648 | 
 | 
|---|
| 649 |                         <listitem><para>
 | 
|---|
| 650 | <indexterm><primary>lvcreate</primary></indexterm>
 | 
|---|
| 651 |                         Now you can create the logical volume with something like <command>lvcreate -L400M -nsh_test shadowvol</command>
 | 
|---|
| 652 |                         </para>
 | 
|---|
| 653 | 
 | 
|---|
| 654 |                         <para>
 | 
|---|
| 655 | <indexterm><primary>/dev/shadowvol</primary></indexterm>
 | 
|---|
| 656 |                         This creates the logical volume of 400 MBs named "sh_test" in the volume group we created called shadowvol.
 | 
|---|
| 657 |                         If everything is working so far, you should see them in <filename>/dev/shadowvol</filename>.
 | 
|---|
| 658 |                         </para></listitem>
 | 
|---|
| 659 | 
 | 
|---|
| 660 |                         <listitem><para>
 | 
|---|
| 661 | <indexterm><primary>mkfs.xfs</primary></indexterm>
 | 
|---|
| 662 |                         Now we should be ready to format the logical volume we named sh_test with <command>mkfs.xfs
 | 
|---|
| 663 |                         /dev/shadowvol/sh_test</command>
 | 
|---|
| 664 |                         </para>
 | 
|---|
| 665 | 
 | 
|---|
| 666 |                         <para>
 | 
|---|
| 667 | <indexterm><primary>logical volume</primary></indexterm>
 | 
|---|
| 668 | <indexterm><primary>LVM</primary></indexterm>
 | 
|---|
| 669 | <indexterm><primary>freezing</primary></indexterm>
 | 
|---|
| 670 | <indexterm><primary>resizing</primary></indexterm>
 | 
|---|
| 671 | <indexterm><primary>growing</primary></indexterm>
 | 
|---|
| 672 |                         You can format the logical volume with any file system you choose, but make sure to use one that allows you to
 | 
|---|
| 673 |                         take advantage of the additional features of LVM such as freezing, resizing, and growing your file systems.
 | 
|---|
| 674 |                         </para>
 | 
|---|
| 675 | 
 | 
|---|
| 676 |                         <para>
 | 
|---|
| 677 | <indexterm><primary>LVM volume</primary></indexterm>
 | 
|---|
| 678 | <indexterm><primary>shadow_copy</primary></indexterm>
 | 
|---|
| 679 | <indexterm><primary>module</primary></indexterm>
 | 
|---|
| 680 |                         Now we have an LVM volume where we can play with the shadow_copy VFS module.
 | 
|---|
| 681 |                         </para></listitem>
 | 
|---|
| 682 | 
 | 
|---|
| 683 |                         <listitem><para>
 | 
|---|
| 684 | <indexterm><primary>mkdir</primary></indexterm>
 | 
|---|
| 685 | <indexterm><primary>permissions</primary></indexterm>
 | 
|---|
| 686 | <indexterm><primary>chmod</primary></indexterm>
 | 
|---|
| 687 |                         Now we need to prepare the directory with something like
 | 
|---|
| 688 | <screen>
 | 
|---|
| 689 | &rootprompt; mkdir -p /data/shadow_share
 | 
|---|
| 690 | </screen>
 | 
|---|
| 691 |                         or whatever you want to name your shadow copy-enabled Samba share.  Make sure you set the permissions so that
 | 
|---|
| 692 |                         you can use it.  If in doubt, use <command>chmod 777 /data/shadow_share</command> and tighten the permissions
 | 
|---|
| 693 |                         once you get things working.
 | 
|---|
| 694 |                         </para></listitem>
 | 
|---|
| 695 | 
 | 
|---|
| 696 |                         <listitem><para>
 | 
|---|
| 697 | <indexterm><primary>mount</primary></indexterm>
 | 
|---|
| 698 |                         Mount the LVM volume using something like <command>mount /dev/shadowvol/sh_test /data/shadow_share</command>
 | 
|---|
| 699 |                         </para>
 | 
|---|
| 700 | 
 | 
|---|
| 701 |                         <para>
 | 
|---|
| 702 | <indexterm><primary>/etc/fstab</primary></indexterm>
 | 
|---|
| 703 |                         You may also want to edit your <filename>/etc/fstab</filename> so that this partition mounts during the system boot.
 | 
|---|
| 704 |                         </para></listitem>
 | 
|---|
| 705 |                 </itemizedlist>
 | 
|---|
| 706 | 
 | 
|---|
| 707 |                 </listitem>
 | 
|---|
| 708 | 
 | 
|---|
| 709 |           <listitem>
 | 
|---|
| 710 |             <formalpara><title>Install & Configure the shadow_copy VFS Module</title>
 | 
|---|
| 711 |                 <para>
 | 
|---|
| 712 |                 Finally we get to the actual shadow_copy VFS module.  The shadow_copy VFS module should be available in Samba
 | 
|---|
| 713 |                 3.0.3 and higher.  The smb.conf configuration is pretty standard.  Here is our example of a share configured
 | 
|---|
| 714 |                 with the shadow_copy VFS module:
 | 
|---|
| 715 |                 </para></formalpara>
 | 
|---|
| 716 | 
 | 
|---|
| 717 |                 <example id="vfsshadow">
 | 
|---|
| 718 |                 <title>Share With shadow_copy VFS</title>
 | 
|---|
| 719 |                 <smbconfblock>
 | 
|---|
| 720 |                 <smbconfsection name="[shadow_share]"/>
 | 
|---|
| 721 |                 <smbconfoption name="comment">Shadow Copy Enabled Share</smbconfoption>
 | 
|---|
| 722 |                 <smbconfoption name="path">/data/shadow_share</smbconfoption>
 | 
|---|
| 723 |                 <smbconfoption name="vfs objects">shadow_copy</smbconfoption>
 | 
|---|
| 724 |                 <smbconfoption name="writeable">yes</smbconfoption>
 | 
|---|
| 725 |                 <smbconfoption name="browseable">yes</smbconfoption>
 | 
|---|
| 726 |                 </smbconfblock>
 | 
|---|
| 727 |                 </example>
 | 
|---|
| 728 | 
 | 
|---|
| 729 |                 </listitem>
 | 
|---|
| 730 | 
 | 
|---|
| 731 |                 <listitem>
 | 
|---|
| 732 |             <formalpara><title>Create Snapshots and Make Them Available to shadow_copy.so</title> 
 | 
|---|
| 733 |                 <para>
 | 
|---|
| 734 | <indexterm><primary>shadow_copy</primary></indexterm>
 | 
|---|
| 735 | <indexterm><primary>LVM snapshots</primary></indexterm>
 | 
|---|
| 736 | <indexterm><primary>module</primary></indexterm>
 | 
|---|
| 737 |                 Before you can browse the shadow copies, you must create them and mount them.  This will most likely be done
 | 
|---|
| 738 |                 with a script that runs as a cron job.  With this particular solution, the shadow_copy VFS module is used to
 | 
|---|
| 739 |                 browse LVM snapshots.  Those snapshots are not created by the module.  They are not made available by the
 | 
|---|
| 740 |                 module either.  This module allows the shadow copy-enabled client to browse the snapshots you take and make
 | 
|---|
| 741 |                 available.
 | 
|---|
| 742 |                 </para></formalpara>
 | 
|---|
| 743 | 
 | 
|---|
| 744 |             <para>
 | 
|---|
| 745 |                 Here is a simple script used to create and mount the snapshots:
 | 
|---|
| 746 | <screen>
 | 
|---|
| 747 | #!/bin/bash
 | 
|---|
| 748 | # This is a test, this is only a test
 | 
|---|
| 749 | SNAPNAME=`date +%Y.%m.%d-%H.%M.%S`
 | 
|---|
| 750 | xfs_freeze -f /data/shadow_share/
 | 
|---|
| 751 | lvcreate -L10M -s -n $SNAPNAME /dev/shadowvol/sh_test
 | 
|---|
| 752 | xfs_freeze -u /data/shadow_share/
 | 
|---|
| 753 | mkdir /data/shadow_share/@GMT-$SNAPNAME
 | 
|---|
| 754 | mount /dev/shadowvol/$SNAPNAME \
 | 
|---|
| 755 |        /data/shadow_share/@GMT-$SNAPNAME -onouuid,ro
 | 
|---|
| 756 | </screen>
 | 
|---|
| 757 |                 Note that the script does not handle other things like remounting snapshots on reboot.
 | 
|---|
| 758 |             </para></listitem>
 | 
|---|
| 759 | 
 | 
|---|
| 760 |                 <listitem>
 | 
|---|
| 761 |             <formalpara><title>Test From Client</title>
 | 
|---|
| 762 |                 <para>
 | 
|---|
| 763 |                 To test, you will need to install the shadow copy client which you can obtain from the <ulink
 | 
|---|
| 764 |                 url="http://www.microsoft.com/windowsserver2003/downloads/shadowcopyclient.mspx">Microsoft web site.</ulink> I
 | 
|---|
| 765 |                 only tested this with an XP client so your results may vary with other pre-XP clients.  Once installed, with
 | 
|---|
| 766 |                 your XP client you can right-click on specific files or in the empty space of the shadow_share and view the
 | 
|---|
| 767 |                 "properties."  If anything has changed, then you will see it on the "Previous Versions" tab of the properties
 | 
|---|
| 768 |                 window.
 | 
|---|
| 769 |                 </para></formalpara>
 | 
|---|
| 770 |           </listitem>
 | 
|---|
| 771 |         </orderedlist>
 | 
|---|
| 772 | 
 | 
|---|
| 773 |         </sect3>
 | 
|---|
| 774 | </sect2>
 | 
|---|
| 775 | 
 | 
|---|
| 776 | </sect1>
 | 
|---|
| 777 | 
 | 
|---|
| 778 | <sect1>
 | 
|---|
| 779 | <title>VFS Modules Available Elsewhere</title>
 | 
|---|
| 780 | 
 | 
|---|
| 781 | <para>
 | 
|---|
| 782 | <indexterm><primary>VFS modules</primary></indexterm>
 | 
|---|
| 783 | This section contains a listing of various other VFS modules that have been posted but do not currently reside
 | 
|---|
| 784 | in the Samba CVS tree for one reason or another (e.g., it is easy for the maintainer to have his or her own
 | 
|---|
| 785 | CVS tree).
 | 
|---|
| 786 | </para>
 | 
|---|
| 787 | 
 | 
|---|
| 788 | <para>
 | 
|---|
| 789 | No statements about the stability or functionality of any module should be implied due to its presence here.
 | 
|---|
| 790 | </para>
 | 
|---|
| 791 | 
 | 
|---|
| 792 | <sect2>
 | 
|---|
| 793 | <title>DatabaseFS</title>
 | 
|---|
| 794 | 
 | 
|---|
| 795 | <para>
 | 
|---|
| 796 | <indexterm><primary>DatabaseFS</primary></indexterm>
 | 
|---|
| 797 | URL: <ulink noescape="1" url="http://www.css.tayloru.edu/~elorimer/databasefs/index.php">
 | 
|---|
| 798 | Taylors University DatabaeFS</ulink>
 | 
|---|
| 799 | </para>
 | 
|---|
| 800 | 
 | 
|---|
| 801 | <para>By <ulink url="mailto:elorimer@css.tayloru.edu">Eric Lorimer.</ulink></para>
 | 
|---|
| 802 | 
 | 
|---|
| 803 | <para>
 | 
|---|
| 804 | I have created a VFS module that implements a fairly complete read-only filesystem. It presents information
 | 
|---|
| 805 | from a database as a filesystem in a modular and generic way to allow different databases to be used.
 | 
|---|
| 806 | (Originally designed for organizing MP3s under directories such as <quote>Artists,</quote> <quote>Song
 | 
|---|
| 807 | Keywords,</quote> and so on. I have since easily applied it to a student roster database.) The directory
 | 
|---|
| 808 | structure is stored in the database itself and the module makes no assumptions about the database structure
 | 
|---|
| 809 | beyond the table it requires to run.
 | 
|---|
| 810 | </para>
 | 
|---|
| 811 | 
 | 
|---|
| 812 | <para>
 | 
|---|
| 813 | Any feedback would be appreciated: comments, suggestions, patches, and so on. If nothing else, it
 | 
|---|
| 814 | might prove useful for someone else who wishes to create a virtual filesystem.
 | 
|---|
| 815 | </para>
 | 
|---|
| 816 | 
 | 
|---|
| 817 | </sect2>
 | 
|---|
| 818 | 
 | 
|---|
| 819 | <sect2>
 | 
|---|
| 820 | <title>vscan</title>
 | 
|---|
| 821 | 
 | 
|---|
| 822 | <indexterm><primary>vscan</primary></indexterm>
 | 
|---|
| 823 | <para>URL: <ulink noescape="1" url="http://www.openantivirus.org/projects.php#samba-vscan">
 | 
|---|
| 824 | Open Anti-Virus vscan</ulink>
 | 
|---|
| 825 | </para>
 | 
|---|
| 826 | 
 | 
|---|
| 827 | <para>
 | 
|---|
| 828 | <indexterm><primary>samba-vscan</primary></indexterm>
 | 
|---|
| 829 | samba-vscan is a proof-of-concept module for Samba, which provides on-access anti-virus support for files
 | 
|---|
| 830 | shared using Samba.  samba-vscan supports various virus scanners and is maintained by Rainer Link.
 | 
|---|
| 831 | </para>
 | 
|---|
| 832 | 
 | 
|---|
| 833 | </sect2>
 | 
|---|
| 834 | 
 | 
|---|
| 835 | <sect2>
 | 
|---|
| 836 | <title>vscan-clamav</title>
 | 
|---|
| 837 | <para>
 | 
|---|
| 838 | Samba users have been using the RPMS from SerNet without a problem.
 | 
|---|
| 839 | OpenSUSE Linux users have also used the vscan scanner for quite some time
 | 
|---|
| 840 | with excellent results. It does impact overall write performance though.
 | 
|---|
| 841 | </para>
 | 
|---|
| 842 | 
 | 
|---|
| 843 | <para>
 | 
|---|
| 844 | The following share stanza is a good guide for those wanting to configure vscan-clamav:
 | 
|---|
| 845 | </para>
 | 
|---|
| 846 | 
 | 
|---|
| 847 | <screen>
 | 
|---|
| 848 | [share]
 | 
|---|
| 849 | vfs objects = vscan-clamav
 | 
|---|
| 850 | vscan-clamav: config-file = /etc/samba/vscan-clamav.conf
 | 
|---|
| 851 | </screen>
 | 
|---|
| 852 | 
 | 
|---|
| 853 | <para>
 | 
|---|
| 854 | The following example of the <filename>vscan-clamav.conf</filename> file may help to get this
 | 
|---|
| 855 | fully operational:
 | 
|---|
| 856 | </para>
 | 
|---|
| 857 | 
 | 
|---|
| 858 | <screen>
 | 
|---|
| 859 | <title>VFS: Vscan ClamAV Control File</title>
 | 
|---|
| 860 | #
 | 
|---|
| 861 | # /etc/samba/vscan-clamav.conf
 | 
|---|
| 862 | #
 | 
|---|
| 863 | 
 | 
|---|
| 864 | [samba-vscan]
 | 
|---|
| 865 | ; run-time configuration for vscan-samba using
 | 
|---|
| 866 | ; clamd
 | 
|---|
| 867 | ; all options are set to default values
 | 
|---|
| 868 | 
 | 
|---|
| 869 | ; do not scan files larger than X bytes. If set to 0 (default),
 | 
|---|
| 870 | ; this feature is disable (i.e. all files are scanned)
 | 
|---|
| 871 | max file size = 10485760
 | 
|---|
| 872 | 
 | 
|---|
| 873 | ; log all file access (yes/no). If set to yes, every access will
 | 
|---|
| 874 | ; be logged. If set to no (default), only access to infected files
 | 
|---|
| 875 | ; will be logged
 | 
|---|
| 876 | verbose file logging = no
 | 
|---|
| 877 | 
 | 
|---|
| 878 | ; if set to yes (default), a file will be scanned while opening
 | 
|---|
| 879 | scan on open = yes
 | 
|---|
| 880 | ; if set to yes, a file will be scanned while closing (default is yes)
 | 
|---|
| 881 | scan on close = yes
 | 
|---|
| 882 | 
 | 
|---|
| 883 | ; if communication to clamd fails, should access to file denied?
 | 
|---|
| 884 | ; (default: yes)
 | 
|---|
| 885 | deny access on error = no
 | 
|---|
| 886 | 
 | 
|---|
| 887 | ; if daemon failes with a minor error (corruption, etc.),
 | 
|---|
| 888 | ; should access to file denied?
 | 
|---|
| 889 | ; (default: yes)
 | 
|---|
| 890 | deny access on minor error = no
 | 
|---|
| 891 | 
 | 
|---|
| 892 | ; send a warning message via Windows Messenger service
 | 
|---|
| 893 | ; when virus is found?
 | 
|---|
| 894 | ; (default: yes)
 | 
|---|
| 895 | send warning message = yes
 | 
|---|
| 896 | 
 | 
|---|
| 897 | ; what to do with an infected file
 | 
|---|
| 898 | ; quarantine: try to move to quantine directory
 | 
|---|
| 899 | ; delete:     delete infected file
 | 
|---|
| 900 | ; nothing:    do nothing (default)
 | 
|---|
| 901 | infected file action = quarantine
 | 
|---|
| 902 | 
 | 
|---|
| 903 | ; where to put infected files - you really want to change this!
 | 
|---|
| 904 | quarantine directory  = /opt/clamav/quarantine
 | 
|---|
| 905 | ; prefix for files in quarantine
 | 
|---|
| 906 | quarantine prefix = vir-
 | 
|---|
| 907 | 
 | 
|---|
| 908 | ; as Windows tries to open a file multiple time in a (very) short time
 | 
|---|
| 909 | ; of period, samba-vscan use a last recently used file mechanism to avoid
 | 
|---|
| 910 | ; multiple scans of a file. This setting specified the maximum number of
 | 
|---|
| 911 | ; elements of the last recently used file list. (default: 100)
 | 
|---|
| 912 | max lru files entries = 100
 | 
|---|
| 913 | 
 | 
|---|
| 914 | ; an entry is invalidad after lru file entry lifetime (in seconds).
 | 
|---|
| 915 | ; (Default: 5)
 | 
|---|
| 916 | lru file entry lifetime = 5
 | 
|---|
| 917 | 
 | 
|---|
| 918 | ; exclude files from being scanned based on the MIME-type! Semi-colon
 | 
|---|
| 919 | ; seperated list (default: empty list). Use this with care!
 | 
|---|
| 920 | exclude file types =
 | 
|---|
| 921 | 
 | 
|---|
| 922 | ; socket name of clamd (default: /var/run/clamd). Setting will be ignored if
 | 
|---|
| 923 | ; libclamav is used
 | 
|---|
| 924 | clamd socket name = /tmp/clamd
 | 
|---|
| 925 | 
 | 
|---|
| 926 | ; limits, if vscan-clamav was build for using the clamav library (libclamav)
 | 
|---|
| 927 | ; instead of clamd
 | 
|---|
| 928 | 
 | 
|---|
| 929 | ; maximum number of files in archive (default: 1000)
 | 
|---|
| 930 | libclamav max files in archive = 1000
 | 
|---|
| 931 | 
 | 
|---|
| 932 | ; maximum archived file size, in bytes (default: 10 MB)
 | 
|---|
| 933 | libclamav max archived file size = 5242880
 | 
|---|
| 934 | 
 | 
|---|
| 935 | ; maximum recursion level (default: 5)
 | 
|---|
| 936 | libclamav max recursion level = 5
 | 
|---|
| 937 | </screen>
 | 
|---|
| 938 | 
 | 
|---|
| 939 | <para>
 | 
|---|
| 940 | Obviously, a running clam daemon is necessary for this to work. This is a working example for me using ClamAV.
 | 
|---|
| 941 | The ClamAV documentation should provide additional configuration examples. On your system these may be located
 | 
|---|
| 942 | under the <filename>/usr/share/doc/</filename> directory. Some examples may also target other virus scanners,
 | 
|---|
| 943 | any of which can be used.
 | 
|---|
| 944 | </para>
 | 
|---|
| 945 | 
 | 
|---|
| 946 | </sect2>
 | 
|---|
| 947 | </sect1>
 | 
|---|
| 948 | 
 | 
|---|
| 949 | </chapter>
 | 
|---|