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 |
|
---|
4 | <chapter id="AccessControls">
|
---|
5 | <chapterinfo>
|
---|
6 | &author.jht;
|
---|
7 | &author.jeremy;
|
---|
8 | <author>&person.jelmer;<contrib>drawing</contrib></author>
|
---|
9 | <pubdate>May 10, 2003</pubdate>
|
---|
10 | </chapterinfo>
|
---|
11 | <title>File, Directory, and Share Access Controls</title>
|
---|
12 |
|
---|
13 | <para>
|
---|
14 | <indexterm><primary>ACLs</primary></indexterm>
|
---|
15 | <indexterm><primary>share</primary></indexterm>
|
---|
16 | <indexterm><primary>network access controls</primary></indexterm>
|
---|
17 | <indexterm><primary>unauthorized access</primary></indexterm>
|
---|
18 | Advanced MS Windows users are frequently perplexed when file, directory, and share manipulation of
|
---|
19 | resources shared via Samba do not behave in the manner they might expect. MS Windows network
|
---|
20 | administrators are often confused regarding network access controls and how to
|
---|
21 | provide users with the access they need while protecting resources from unauthorized access.
|
---|
22 | </para>
|
---|
23 |
|
---|
24 | <para>
|
---|
25 | <indexterm><primary>file access permissions</primary></indexterm>
|
---|
26 | <indexterm><primary>directory access permissions</primary></indexterm>
|
---|
27 | Many UNIX administrators are unfamiliar with the MS Windows environment and in particular
|
---|
28 | have difficulty in visualizing what the MS Windows user wishes to achieve in attempts to set file
|
---|
29 | and directory access permissions.
|
---|
30 | </para>
|
---|
31 |
|
---|
32 | <para>
|
---|
33 | <indexterm><primary>bridge</primary></indexterm>
|
---|
34 | <indexterm><primary>directory controls</primary></indexterm>
|
---|
35 | <indexterm><primary>directory permissions</primary></indexterm>
|
---|
36 | <indexterm><primary></primary></indexterm>
|
---|
37 | The problem lies in the differences in how file and directory permissions and controls work
|
---|
38 | between the two environments. This difference is one that Samba cannot completely hide, even
|
---|
39 | though it does try to bridge the chasm to a degree.
|
---|
40 | </para>
|
---|
41 |
|
---|
42 | <para>
|
---|
43 | <indexterm><primary>Extended Attributes</primary></indexterm>
|
---|
44 | <indexterm><primary>ACLs</primary><secondary>POSIX</secondary></indexterm>
|
---|
45 | <indexterm><primary>Access Control List</primary></indexterm>
|
---|
46 | <indexterm><primary>commercial Linux products</primary></indexterm>
|
---|
47 | POSIX Access Control List technology has been available (along with extended attributes)
|
---|
48 | for UNIX for many years, yet there is little evidence today of any significant use. This
|
---|
49 | explains to some extent the slow adoption of ACLs into commercial Linux products. MS Windows
|
---|
50 | administrators are astounded at this, given that ACLs were a foundational capability of the now
|
---|
51 | decade-old MS Windows NT operating system.
|
---|
52 | </para>
|
---|
53 |
|
---|
54 | <para>
|
---|
55 | <indexterm><primary>network administrator</primary></indexterm>
|
---|
56 | The purpose of this chapter is to present each of the points of control that are possible with
|
---|
57 | Samba-3 in the hope that this will help the network administrator to find the optimum method
|
---|
58 | for delivering the best environment for MS Windows desktop users.
|
---|
59 | </para>
|
---|
60 |
|
---|
61 | <para>
|
---|
62 | <indexterm><primary>interoperability</primary></indexterm>
|
---|
63 | <indexterm><primary>data interchange</primary></indexterm>
|
---|
64 | This is an opportune point to mention that Samba was created to provide a means of interoperability
|
---|
65 | and interchange of data between differing operating environments. Samba has no intent to change
|
---|
66 | UNIX/Linux into a platform like MS Windows. Instead the purpose was and is to provide a sufficient
|
---|
67 | level of exchange of data between the two environments. What is available today extends well
|
---|
68 | beyond early plans and expectations, yet the gap continues to shrink.
|
---|
69 | </para>
|
---|
70 |
|
---|
71 | <sect1>
|
---|
72 | <title>Features and Benefits</title>
|
---|
73 |
|
---|
74 | <para>
|
---|
75 | Samba offers much flexibility in file system access management. These are the key access control
|
---|
76 | facilities present in Samba today:
|
---|
77 | </para>
|
---|
78 |
|
---|
79 | <itemizedlist>
|
---|
80 | <title>Samba Access Control Facilities</title>
|
---|
81 | <listitem><para>
|
---|
82 | <indexterm><primary>permissions</primary><secondary>UNIX file and directory</secondary></indexterm>
|
---|
83 | <emphasis>UNIX File and Directory Permissions</emphasis>
|
---|
84 | </para>
|
---|
85 |
|
---|
86 | <para>
|
---|
87 | <indexterm><primary>UNIX file system access controls</primary></indexterm>
|
---|
88 | <indexterm><primary>access controls</primary></indexterm>
|
---|
89 | <indexterm><primary>permissions and controls</primary></indexterm>
|
---|
90 | Samba honors and implements UNIX file system access controls. Users
|
---|
91 | who access a Samba server will do so as a particular MS Windows user.
|
---|
92 | This information is passed to the Samba server as part of the logon or
|
---|
93 | connection setup process. Samba uses this user identity to validate
|
---|
94 | whether or not the user should be given access to file system resources
|
---|
95 | (files and directories). This chapter provides an overview for those
|
---|
96 | to whom the UNIX permissions and controls are a little strange or unknown.
|
---|
97 | </para>
|
---|
98 | </listitem>
|
---|
99 |
|
---|
100 | <listitem><para>
|
---|
101 | <emphasis>Samba Share Definitions</emphasis>
|
---|
102 | </para>
|
---|
103 |
|
---|
104 | <para>
|
---|
105 | <indexterm><primary>share settings</primary></indexterm>
|
---|
106 | In configuring share settings and controls in the &smb.conf; file,
|
---|
107 | the network administrator can exercise overrides to native file
|
---|
108 | system permissions and behaviors. This can be handy and convenient
|
---|
109 | to effect behavior that is more like what MS Windows NT users expect,
|
---|
110 | but it is seldom the <emphasis>best</emphasis> way to achieve this.
|
---|
111 | The basic options and techniques are described herein.
|
---|
112 | </para>
|
---|
113 | </listitem>
|
---|
114 |
|
---|
115 | <listitem><para>
|
---|
116 | <emphasis>Samba Share ACLs</emphasis>
|
---|
117 | <indexterm><primary>ACLs</primary><secondary>share</secondary></indexterm>
|
---|
118 | </para>
|
---|
119 |
|
---|
120 | <para>
|
---|
121 | <indexterm><primary>ACLs on shares</primary></indexterm>
|
---|
122 | Just as it is possible in MS Windows NT to set ACLs on shares
|
---|
123 | themselves, so it is possible to do in Samba.
|
---|
124 | Few people make use of this facility, yet it remains one of the
|
---|
125 | easiest ways to affect access controls (restrictions) and can often
|
---|
126 | do so with minimum invasiveness compared with other methods.
|
---|
127 | </para>
|
---|
128 | </listitem>
|
---|
129 |
|
---|
130 | <listitem><para>
|
---|
131 | <indexterm><primary>ACLs</primary><secondary>POSIX</secondary></indexterm>
|
---|
132 | <indexterm><primary>ACLs</primary><secondary>Windows</secondary></indexterm>
|
---|
133 | <emphasis>MS Windows ACLs through UNIX POSIX ACLs</emphasis>
|
---|
134 | </para>
|
---|
135 |
|
---|
136 | <para>
|
---|
137 | <indexterm><primary>native ACLs</primary></indexterm>
|
---|
138 | The use of POSIX ACLs on UNIX/Linux is possible only if the underlying
|
---|
139 | operating system supports them. If not, then this option will not be
|
---|
140 | available to you. Current UNIX technology platforms have native support
|
---|
141 | for POSIX ACLs. There are patches for the Linux kernel that also provide
|
---|
142 | this support. Sadly, few Linux platforms ship today with native ACLs and
|
---|
143 | extended attributes enabled. This chapter has pertinent information
|
---|
144 | for users of platforms that support them.
|
---|
145 | </para>
|
---|
146 | </listitem>
|
---|
147 | </itemizedlist>
|
---|
148 |
|
---|
149 | </sect1>
|
---|
150 |
|
---|
151 | <sect1>
|
---|
152 | <title>File System Access Controls</title>
|
---|
153 |
|
---|
154 | <para>
|
---|
155 | Perhaps the most important recognition to be made is the simple fact that MS Windows NT4/200x/XP
|
---|
156 | implement a totally divergent file system technology from what is provided in the UNIX operating system
|
---|
157 | environment. First we consider what the most significant differences are, then we look
|
---|
158 | at how Samba helps to bridge the differences.
|
---|
159 | </para>
|
---|
160 |
|
---|
161 | <sect2>
|
---|
162 | <title>MS Windows NTFS Comparison with UNIX File Systems</title>
|
---|
163 |
|
---|
164 | <para>
|
---|
165 | <indexterm><primary>NTFS</primary></indexterm>
|
---|
166 | <indexterm><primary>File System</primary></indexterm>
|
---|
167 | <indexterm><primary>File System</primary><secondary>UNIX</secondary></indexterm>
|
---|
168 | <indexterm><primary>File System</primary><secondary>Windows</secondary></indexterm>
|
---|
169 | Samba operates on top of the UNIX file system. This means it is subject to UNIX file system conventions
|
---|
170 | and permissions. It also means that if the MS Windows networking environment requires file system
|
---|
171 | behavior, that differs from UNIX file system behavior then somehow Samba is responsible for emulating
|
---|
172 | that in a transparent and consistent manner.
|
---|
173 | </para>
|
---|
174 |
|
---|
175 | <para>
|
---|
176 | It is good news that Samba does this to a large extent, and on top of that, provides a high degree
|
---|
177 | of optional configuration to override the default behavior. We look at some of these overrides,
|
---|
178 | but for the greater part we stay within the bounds of default behavior. Those wishing to explore
|
---|
179 | the depths of control ability should review the &smb.conf; man page.
|
---|
180 | </para>
|
---|
181 |
|
---|
182 | <para>The following compares file system features for UNIX with those of MS Windows NT/200x:
|
---|
183 | <indexterm><primary>File System</primary><secondary>feature comparison</secondary></indexterm>
|
---|
184 |
|
---|
185 | </para>
|
---|
186 |
|
---|
187 | <variablelist>
|
---|
188 | <varlistentry>
|
---|
189 | <term>Name Space</term>
|
---|
190 | <listitem>
|
---|
191 | <para>
|
---|
192 | MS Windows NT4/200x/XP file names may be up to 254 characters long, and UNIX file names
|
---|
193 | may be 1023 characters long. In MS Windows, file extensions indicate particular file types;
|
---|
194 | in UNIX this is not so rigorously observed because all names are considered arbitrary.
|
---|
195 | </para>
|
---|
196 | <para>
|
---|
197 | What MS Windows calls a folder, UNIX calls a directory.
|
---|
198 | </para>
|
---|
199 | </listitem>
|
---|
200 | </varlistentry>
|
---|
201 |
|
---|
202 | <varlistentry>
|
---|
203 | <term>Case Sensitivity</term>
|
---|
204 | <listitem>
|
---|
205 | <para>
|
---|
206 | <indexterm><primary>8.3 file names</primary></indexterm>
|
---|
207 | <indexterm><primary>File System</primary><secondary>case sensitivity</secondary></indexterm>
|
---|
208 | MS Windows file names are generally uppercase if made up of 8.3 (8-character file name
|
---|
209 | and 3 character extension. File names that are longer than 8.3 are case preserving and case
|
---|
210 | insensitive.
|
---|
211 | </para>
|
---|
212 |
|
---|
213 | <para>
|
---|
214 | UNIX file and directory names are case sensitive and case preserving. Samba implements the
|
---|
215 | MS Windows file name behavior, but it does so as a user application. The UNIX file system
|
---|
216 | provides no mechanism to perform case-insensitive file name lookups. MS Windows does this
|
---|
217 | by default. This means that Samba has to carry the processing overhead to provide features
|
---|
218 | that are not native to the UNIX operating system environment.
|
---|
219 | </para>
|
---|
220 |
|
---|
221 | <para>
|
---|
222 | Consider the following. All are unique UNIX names but one single MS Windows file name:
|
---|
223 | <screen>
|
---|
224 | MYFILE.TXT
|
---|
225 | MyFile.txt
|
---|
226 | myfile.txt
|
---|
227 | </screen></para>
|
---|
228 |
|
---|
229 | <para>
|
---|
230 | So clearly, in an MS Windows file namespace these three files cannot co-exist, but in UNIX
|
---|
231 | they can.
|
---|
232 | </para>
|
---|
233 |
|
---|
234 | <para>
|
---|
235 | So what should Samba do if all three are present? That which is lexically first will be
|
---|
236 | accessible to MS Windows users; the others are invisible and unaccessible &smbmdash; any
|
---|
237 | other solution would be suicidal. The Windows client will ask for a case-insensitive file
|
---|
238 | lookup, and that is the reason for which Samba must offer a consistent selection in the
|
---|
239 | event that the UNIX directory contains multiple files that would match a case insensitive
|
---|
240 | file listing.
|
---|
241 | </para></listitem>
|
---|
242 | </varlistentry>
|
---|
243 |
|
---|
244 | <varlistentry>
|
---|
245 | <term>Directory Separators</term>
|
---|
246 | <listitem><para>
|
---|
247 | <indexterm><primary>Directory Separators</primary></indexterm>
|
---|
248 | MS Windows and DOS use the backslash <constant>\</constant> as a directory delimiter, and UNIX uses
|
---|
249 | the forward-slash <constant>/</constant> as its directory delimiter. This is handled transparently by Samba.
|
---|
250 | </para></listitem>
|
---|
251 | </varlistentry>
|
---|
252 |
|
---|
253 | <varlistentry>
|
---|
254 | <term>Drive Identification</term>
|
---|
255 | <listitem><para>
|
---|
256 | <indexterm><primary>Drive Identification</primary></indexterm>
|
---|
257 | MS Windows products support a notion of drive letters, like <command>C:</command>, to represent
|
---|
258 | disk partitions. UNIX has no concept of separate identifiers for file partitions; each
|
---|
259 | such file system is mounted to become part of the overall directory tree.
|
---|
260 | The UNIX directory tree begins at <constant>/</constant> just as the root of a DOS drive is specified as
|
---|
261 | <constant>C:\</constant>.
|
---|
262 | </para></listitem>
|
---|
263 | </varlistentry>
|
---|
264 |
|
---|
265 | <varlistentry>
|
---|
266 | <term>File Naming Conventions</term>
|
---|
267 | <listitem><para>
|
---|
268 | <indexterm><primary>File Naming Conventions</primary></indexterm>
|
---|
269 | MS Windows generally never experiences file names that begin with a dot (<constant>.</constant>), while in UNIX these
|
---|
270 | are commonly found in a user's home directory. Files that begin with a dot (<constant>.</constant>) are typically
|
---|
271 | startup files for various UNIX applications, or they may be files that contain
|
---|
272 | startup configuration data.
|
---|
273 | </para></listitem>
|
---|
274 | </varlistentry>
|
---|
275 |
|
---|
276 | <varlistentry>
|
---|
277 | <term>Links and Short-Cuts</term>
|
---|
278 | <listitem><para>
|
---|
279 | <indexterm><primary>Links</primary><secondary>hard</secondary></indexterm>
|
---|
280 | <indexterm><primary>Links</primary><secondary>soft</secondary></indexterm>
|
---|
281 | <indexterm><primary>Shortcuts</primary></indexterm>
|
---|
282 | MS Windows make use of <emphasis>links and shortcuts</emphasis> that are actually special types of files that will
|
---|
283 | redirect an attempt to execute the file to the real location of the file. UNIX knows of file and directory
|
---|
284 | links, but they are entirely different from what MS Windows users are used to.
|
---|
285 | </para>
|
---|
286 |
|
---|
287 | <para>
|
---|
288 | Symbolic links are files in UNIX that contain the actual location of the data (file or directory). An
|
---|
289 | operation (like read or write) will operate directly on the file referenced. Symbolic links are also
|
---|
290 | referred to as <quote>soft links.</quote> A hard link is something that MS Windows is not familiar with. It allows
|
---|
291 | one physical file to be known simultaneously by more than one file name.
|
---|
292 | </para></listitem>
|
---|
293 | </varlistentry>
|
---|
294 | </variablelist>
|
---|
295 |
|
---|
296 | <para>
|
---|
297 | There are many other subtle differences that may cause the MS Windows administrator some temporary discomfort
|
---|
298 | in the process of becoming familiar with UNIX/Linux. These are best left for a text that is dedicated to the
|
---|
299 | purpose of UNIX/Linux training and education.
|
---|
300 | </para>
|
---|
301 |
|
---|
302 | </sect2>
|
---|
303 |
|
---|
304 | <sect2>
|
---|
305 | <title>Managing Directories</title>
|
---|
306 |
|
---|
307 | <para>
|
---|
308 | <indexterm><primary>create</primary></indexterm>
|
---|
309 | <indexterm><primary>delete</primary></indexterm>
|
---|
310 | <indexterm><primary>rename</primary></indexterm>
|
---|
311 | There are three basic operations for managing directories: <command>create</command>, <command>delete</command>,
|
---|
312 | <command>rename</command>. <link linkend="TOSH-Accesstbl">Managing Directories with UNIX and
|
---|
313 | Windows</link> compares the commands in Windows and UNIX that implement these operations.
|
---|
314 | </para>
|
---|
315 |
|
---|
316 | <table frame="all" id="TOSH-Accesstbl">
|
---|
317 | <title>Managing Directories with UNIX and Windows</title>
|
---|
318 | <tgroup align="center" cols="3">
|
---|
319 | <thead>
|
---|
320 | <row><entry>Action</entry><entry>MS Windows Command</entry><entry>UNIX Command</entry></row>
|
---|
321 | </thead>
|
---|
322 |
|
---|
323 | <tbody>
|
---|
324 | <row><entry>create</entry><entry>md folder</entry><entry>mkdir folder</entry></row>
|
---|
325 | <row><entry>delete</entry><entry>rd folder</entry><entry>rmdir folder</entry></row>
|
---|
326 | <row><entry>rename</entry><entry>rename oldname newname</entry><entry>mv oldname newname</entry></row>
|
---|
327 | </tbody>
|
---|
328 | </tgroup>
|
---|
329 | </table>
|
---|
330 |
|
---|
331 | </sect2>
|
---|
332 |
|
---|
333 | <sect2>
|
---|
334 | <title>File and Directory Access Control</title>
|
---|
335 |
|
---|
336 | <para>
|
---|
337 | <indexterm><primary>ACLs</primary><secondary>File System</secondary></indexterm>
|
---|
338 | <indexterm><primary>POSIX ACLs</primary></indexterm>
|
---|
339 | <indexterm><primary>EAs</primary></indexterm>
|
---|
340 | The network administrator is strongly advised to read basic UNIX training manuals and reference materials
|
---|
341 | regarding file and directory permissions maintenance. Much can be achieved with the basic UNIX permissions
|
---|
342 | without having to resort to more complex facilities like POSIX ACLs or extended attributes (EAs).
|
---|
343 | </para>
|
---|
344 |
|
---|
345 | <para>
|
---|
346 | UNIX/Linux file and directory access permissions involves setting three primary sets of data and one control set.
|
---|
347 | A UNIX file listing looks as follows:
|
---|
348 | <screen>
|
---|
349 | &prompt;<userinput>ls -la</userinput>
|
---|
350 | total 632
|
---|
351 | drwxr-xr-x 13 maryo gnomes 816 2003-05-12 22:56 .
|
---|
352 | drwxrwxr-x 37 maryo gnomes 3800 2003-05-12 22:29 ..
|
---|
353 | dr-xr-xr-x 2 maryo gnomes 48 2003-05-12 22:29 muchado02
|
---|
354 | drwxrwxrwx 2 maryo gnomes 48 2003-05-12 22:29 muchado03
|
---|
355 | drw-rw-rw- 2 maryo gnomes 48 2003-05-12 22:29 muchado04
|
---|
356 | d-w--w--w- 2 maryo gnomes 48 2003-05-12 22:29 muchado05
|
---|
357 | dr--r--r-- 2 maryo gnomes 48 2003-05-12 22:29 muchado06
|
---|
358 | drwsrwsrwx 2 maryo gnomes 48 2003-05-12 22:29 muchado08
|
---|
359 | ---------- 1 maryo gnomes 1242 2003-05-12 22:31 mydata00.lst
|
---|
360 | --w--w--w- 1 maryo gnomes 7754 2003-05-12 22:33 mydata02.lst
|
---|
361 | -r--r--r-- 1 maryo gnomes 21017 2003-05-12 22:32 mydata04.lst
|
---|
362 | -rw-rw-rw- 1 maryo gnomes 41105 2003-05-12 22:32 mydata06.lst
|
---|
363 | &prompt;
|
---|
364 | </screen>
|
---|
365 | </para>
|
---|
366 |
|
---|
367 | <para>
|
---|
368 | The columns represent (from left to right) permissions, number of hard links to file, owner, group, size
|
---|
369 | (bytes), access date, time of last modification, and file name.
|
---|
370 | </para>
|
---|
371 |
|
---|
372 | <para>
|
---|
373 | An overview of the permissions field is shown in <link linkend="access1">Overview of UNIX permissions
|
---|
374 | field</link>.
|
---|
375 | </para>
|
---|
376 |
|
---|
377 | <figure id="access1">
|
---|
378 | <title>Overview of UNIX permissions field.</title>
|
---|
379 | <imagefile scale="40">access1</imagefile>
|
---|
380 | </figure>
|
---|
381 |
|
---|
382 | <para>
|
---|
383 | Any bit flag may be unset. An unset bit flag is the equivalent of "cannot" and is represented
|
---|
384 | as a <quote>-</quote> character (see <link linkend="access2"/>)
|
---|
385 | <indexterm><primary>read</primary></indexterm>
|
---|
386 | <indexterm><primary>write</primary></indexterm>
|
---|
387 | <indexterm><primary>execute</primary></indexterm>
|
---|
388 | <indexterm><primary>user</primary></indexterm>
|
---|
389 | <indexterm><primary>group</primary></indexterm>
|
---|
390 | <indexterm><primary>other</primary></indexterm>
|
---|
391 | </para>
|
---|
392 |
|
---|
393 | <example id="access2">
|
---|
394 | <title>Example File</title>
|
---|
395 | <programlisting>
|
---|
396 | -rwxr-x--- Means:
|
---|
397 | ^^^ The owner (user) can read, write, execute
|
---|
398 | ^^^ the group can read and execute
|
---|
399 | ^^^ everyone else cannot do anything with it.
|
---|
400 | </programlisting>
|
---|
401 | </example>
|
---|
402 |
|
---|
403 |
|
---|
404 | <para>
|
---|
405 | <indexterm><primary>character device</primary></indexterm>
|
---|
406 | <indexterm><primary>block device</primary></indexterm>
|
---|
407 | <indexterm><primary>pipe device</primary></indexterm>
|
---|
408 | <indexterm><primary>UNIX Domain Socket</primary></indexterm>
|
---|
409 | Additional possibilities in the [type] field are c = character device, b = block device, p = pipe device,
|
---|
410 | s = UNIX Domain Socket.
|
---|
411 | </para>
|
---|
412 |
|
---|
413 | <para>
|
---|
414 | <indexterm><primary>read</primary></indexterm>
|
---|
415 | <indexterm><primary>write</primary></indexterm>
|
---|
416 | <indexterm><primary>execute</primary></indexterm>
|
---|
417 | <indexterm><primary>SGID</primary></indexterm>
|
---|
418 | <indexterm><primary>SUID</primary></indexterm>
|
---|
419 | The letters <constant>rwxXst</constant> set permissions for the user, group, and others as read (r), write (w),
|
---|
420 | execute (or access for directories) (x), execute only if the file is a directory or already has execute
|
---|
421 | permission for some user (X), set user (SUID) or group ID (SGID) on execution (s), sticky (t).
|
---|
422 | </para>
|
---|
423 |
|
---|
424 | <para>
|
---|
425 | <indexterm><primary>sticky bit</primary></indexterm>
|
---|
426 | <indexterm><primary>unlinked</primary></indexterm>
|
---|
427 | <indexterm><primary>/tmp</primary></indexterm>
|
---|
428 | <indexterm><primary>world-writable</primary></indexterm>
|
---|
429 | When the sticky bit is set on a directory, files in that directory may be unlinked (deleted) or renamed only by root or their owner.
|
---|
430 | Without the sticky bit, anyone able to write to the directory can delete or rename files. The sticky bit is commonly found on
|
---|
431 | directories, such as <filename>/tmp</filename>, that are world-writable.
|
---|
432 | </para>
|
---|
433 |
|
---|
434 | <para>
|
---|
435 | <indexterm><primary>write</primary></indexterm>
|
---|
436 | <indexterm><primary>read</primary></indexterm>
|
---|
437 | <indexterm><primary>setting up directories</primary></indexterm>
|
---|
438 | <indexterm><primary>set user id</primary><see>SUID</see></indexterm>
|
---|
439 | <indexterm><primary>set group id</primary><see>SGID</see></indexterm>
|
---|
440 | When the set user or group ID bit (s) is set on a directory, then all files created within it will be owned by the user and/or
|
---|
441 | group whose `set user or group' bit is set. This can be helpful in setting up directories for which it is desired that
|
---|
442 | all users who are in a group should be able to write to and read from a file, particularly when it is undesirable for that file
|
---|
443 | to be exclusively owned by a user whose primary group is not the group that all such users belong to.
|
---|
444 | </para>
|
---|
445 |
|
---|
446 | <para>
|
---|
447 | When a directory is set <constant>d-wx--x---</constant>, the owner can read and create (write) files in it, but because
|
---|
448 | the (r) read flags are not set, files cannot be listed (seen) in the directory by anyone. The group can read files in the
|
---|
449 | directory but cannot create new files. If files in the directory are set to be readable and writable for the group, then
|
---|
450 | group members will be able to write to (or delete) them.
|
---|
451 | </para>
|
---|
452 |
|
---|
453 | <sect3>
|
---|
454 | <title>Protecting Directories and Files from Deletion</title>
|
---|
455 |
|
---|
456 | <para>
|
---|
457 | <indexterm><primary>protect files</primary></indexterm>
|
---|
458 | <indexterm><primary>protect directories</primary></indexterm>
|
---|
459 | <indexterm><primary>access controls</primary></indexterm>
|
---|
460 | <indexterm><primary>capability to delete</primary></indexterm>
|
---|
461 | People have asked on the Samba mailing list how is it possible to protect files or directories from deletion by users.
|
---|
462 | For example, Windows NT/2K/XP provides the capacity to set access controls on a directory into which people can
|
---|
463 | write files but not delete them. It is possible to set an ACL on a Windows file that permits the file to be written to
|
---|
464 | but not deleted. Such concepts are foreign to the UNIX operating system file space. Within the UNIX file system
|
---|
465 | anyone who has the ability to create a file can write to it. Anyone who has write permission on the
|
---|
466 | directory that contains a file and has write permission for it has the capability to delete it.
|
---|
467 | </para>
|
---|
468 |
|
---|
469 | <para>
|
---|
470 | <indexterm><primary>directory permissions</primary></indexterm>
|
---|
471 | <indexterm><primary>delete a file</primary></indexterm>
|
---|
472 | <indexterm><primary>write access</primary></indexterm>
|
---|
473 | For the record, in the UNIX environment the ability to delete a file is controlled by the permissions on
|
---|
474 | the directory that the file is in. In other words, a user can delete a file in a directory to which that
|
---|
475 | user has write access, even if that user does not own the file.
|
---|
476 | </para>
|
---|
477 |
|
---|
478 | <para>
|
---|
479 | <indexterm><primary>file system capabilities</primary></indexterm>
|
---|
480 | <indexterm><primary>inheritance</primary></indexterm>
|
---|
481 | <indexterm><primary>POSIX ACLs</primary></indexterm>
|
---|
482 | <indexterm><primary>extended attributes</primary></indexterm>
|
---|
483 | Of necessity, Samba is subject to the file system semantics of the host operating system. Samba is therefore
|
---|
484 | limited in the file system capabilities that can be made available through Windows ACLs, and therefore performs
|
---|
485 | a "best fit" translation to POSIX ACLs. Some UNIX file systems do, however support, a feature known
|
---|
486 | as extended attributes. Only the Windows concept of <emphasis>inheritance</emphasis> is implemented by Samba through
|
---|
487 | the appropriate extended attribute.
|
---|
488 | </para>
|
---|
489 |
|
---|
490 | <para>
|
---|
491 | <indexterm><primary>extended attributes</primary></indexterm>
|
---|
492 | <indexterm><primary>immutable</primary></indexterm>
|
---|
493 | <indexterm><primary>chattr</primary></indexterm>
|
---|
494 | <indexterm><primary>CAP_LINUX_IMMUTABLE</primary></indexterm>
|
---|
495 | The specific semantics of the extended attributes are not consistent across UNIX and UNIX-like systems such as Linux.
|
---|
496 | For example, it is possible on some implementations of the extended attributes to set a flag that prevents the directory
|
---|
497 | or file from being deleted. The extended attribute that may achieve this is called the <constant>immutable</constant> bit.
|
---|
498 | Unfortunately, the implementation of the immutable flag is NOT consistent with published documentation. For example, the
|
---|
499 | man page for the <command>chattr</command> on SUSE Linux 9.2 says:
|
---|
500 | <screen>
|
---|
501 | A file with the i attribute cannot be modified: it cannot be deleted
|
---|
502 | or renamed, no link can be created to this file and no data can be
|
---|
503 | written to the file. Only the superuser or a process possessing the
|
---|
504 | CAP_LINUX_IMMUTABLE capability can set or clear this attribute.
|
---|
505 | </screen>
|
---|
506 | A simple test can be done to check if the immutable flag is supported on files in the file system of the Samba host
|
---|
507 | server.
|
---|
508 | </para>
|
---|
509 |
|
---|
510 | <procedure>
|
---|
511 | <title>Test for File Immutibility Support</title>
|
---|
512 |
|
---|
513 | <step><para>
|
---|
514 | Create a file called <filename>filename</filename>.
|
---|
515 | </para></step>
|
---|
516 |
|
---|
517 | <step><para>
|
---|
518 | Login as the <constant>root</constant> user, then set the immutibile flag on a test file as follows:
|
---|
519 | <screen>
|
---|
520 | &rootprompt; chattr +i `filename'
|
---|
521 | </screen>
|
---|
522 | </para></step>
|
---|
523 |
|
---|
524 | <step><para>
|
---|
525 | Login as the user who owns the file (not root) and attempt to remove the file as follows:
|
---|
526 | <screen>
|
---|
527 | mystic:/home/hannibal > rm filename
|
---|
528 | </screen>
|
---|
529 | It will not be possible to delete the file if the immutable flag is correctly honored.
|
---|
530 | </para></step>
|
---|
531 | </procedure>
|
---|
532 |
|
---|
533 | <para>
|
---|
534 | On operating systems and file system types that support the immutable bit, it is possible to create directories
|
---|
535 | that cannot be deleted. Check the man page on your particular host system to determine whether or not
|
---|
536 | immutable directories are writable. If they are not, then the entire directory and its contents will effectively
|
---|
537 | be protected from writing (file creation also) and deletion.
|
---|
538 | </para>
|
---|
539 |
|
---|
540 | </sect3>
|
---|
541 |
|
---|
542 | </sect2>
|
---|
543 |
|
---|
544 | </sect1>
|
---|
545 |
|
---|
546 | <sect1>
|
---|
547 | <title>Share Definition Access Controls</title>
|
---|
548 |
|
---|
549 |
|
---|
550 | <para>
|
---|
551 | <indexterm><primary>permissions</primary><secondary>share</secondary></indexterm>
|
---|
552 | The following parameters in the &smb.conf; file sections define a share control or affect access controls.
|
---|
553 | Before using any of the following options, please refer to the man page for &smb.conf;.
|
---|
554 | </para>
|
---|
555 |
|
---|
556 | <sect2>
|
---|
557 | <title>User- and Group-Based Controls</title>
|
---|
558 |
|
---|
559 | <para>
|
---|
560 | User- and group-based controls can prove quite useful. In some situations it is distinctly desirable to
|
---|
561 | force all file system operations as if a single user were doing so. The use of the
|
---|
562 | <smbconfoption name="force user"/> and <smbconfoption name="force group"/> behavior will achieve this.
|
---|
563 | In other situations it may be necessary to use a paranoia level of control to ensure that only particular
|
---|
564 | authorized persons will be able to access a share or its contents. Here the use of the
|
---|
565 | <smbconfoption name="valid users"/> or the <smbconfoption name="invalid users"/> parameter may be useful.
|
---|
566 | </para>
|
---|
567 |
|
---|
568 | <para>
|
---|
569 | As always, it is highly advisable to use the easiest to maintain and the least ambiguous method for
|
---|
570 | controlling access. Remember, when you leave the scene, someone else will need to provide assistance, and
|
---|
571 | if he or she finds too great a mess or does not understand what you have done, there is risk of
|
---|
572 | Samba being removed and an alternative solution being adopted.
|
---|
573 | </para>
|
---|
574 |
|
---|
575 | <para>
|
---|
576 | <link linkend="ugbc">User and Group Based Controls</link> enumerates these controls.
|
---|
577 | </para>
|
---|
578 |
|
---|
579 | <table frame='all' pgwide='0' id="ugbc"><title>User- and Group-Based Controls</title>
|
---|
580 | <tgroup cols='2'>
|
---|
581 | <colspec align="left"/>
|
---|
582 | <colspec align="justify" colwidth="1*"/>
|
---|
583 | <thead>
|
---|
584 | <row>
|
---|
585 | <entry align="center">Control Parameter</entry>
|
---|
586 | <entry align="center">Description, Action, Notes</entry>
|
---|
587 | </row>
|
---|
588 | </thead>
|
---|
589 | <tbody>
|
---|
590 | <row>
|
---|
591 | <entry><smbconfoption name="admin users"/></entry>
|
---|
592 | <entry><para>
|
---|
593 | List of users who will be granted administrative privileges on the share.
|
---|
594 | They will do all file operations as the superuser (root).
|
---|
595 | Users in this list will be able to do anything they like on the share,
|
---|
596 | irrespective of file permissions.
|
---|
597 | </para></entry>
|
---|
598 | </row>
|
---|
599 | <row>
|
---|
600 | <entry><smbconfoption name="force group"/></entry>
|
---|
601 | <entry><para>
|
---|
602 | Specifies a UNIX group name that will be assigned as the default primary group
|
---|
603 | for all users connecting to this service.
|
---|
604 | </para></entry>
|
---|
605 | </row>
|
---|
606 | <row>
|
---|
607 | <entry><smbconfoption name="force user"/></entry>
|
---|
608 | <entry><para>
|
---|
609 | Specifies a UNIX username that will be assigned as the default user for all users connecting to this service.
|
---|
610 | This is useful for sharing files. Incorrect use can cause security problems.
|
---|
611 | </para></entry>
|
---|
612 | </row>
|
---|
613 | <row>
|
---|
614 | <entry><smbconfoption name="guest ok"/></entry>
|
---|
615 | <entry><para>
|
---|
616 | If this parameter is set for a service, then no password is required to connect to the service. Privileges will be
|
---|
617 | those of the guest account.
|
---|
618 | </para></entry>
|
---|
619 | </row>
|
---|
620 | <row>
|
---|
621 | <entry><smbconfoption name="invalid users"/></entry>
|
---|
622 | <entry><para>
|
---|
623 | List of users that should not be allowed to login to this service.
|
---|
624 | </para></entry>
|
---|
625 | </row>
|
---|
626 | <row>
|
---|
627 | <entry><smbconfoption name="only user"/></entry>
|
---|
628 | <entry><para>
|
---|
629 | Controls whether connections with usernames not in the user list will be allowed.
|
---|
630 | </para></entry>
|
---|
631 | </row>
|
---|
632 | <row>
|
---|
633 | <entry><smbconfoption name="read list"/></entry>
|
---|
634 | <entry><para>
|
---|
635 | List of users that are given read-only access to a service. Users in this list
|
---|
636 | will not be given write access, no matter what the read-only option is set to.
|
---|
637 | </para></entry>
|
---|
638 | </row>
|
---|
639 | <row>
|
---|
640 | <entry><smbconfoption name="username"/></entry>
|
---|
641 | <entry><para>
|
---|
642 | Refer to the &smb.conf; man page for more information; this is a complex and potentially misused parameter.
|
---|
643 | </para></entry>
|
---|
644 | </row>
|
---|
645 | <row>
|
---|
646 | <entry><smbconfoption name="valid users"/></entry>
|
---|
647 | <entry><para>
|
---|
648 | List of users that should be allowed to login to this service.
|
---|
649 | </para></entry>
|
---|
650 | </row>
|
---|
651 | <row>
|
---|
652 | <entry><smbconfoption name="write list"/></entry>
|
---|
653 | <entry><para>
|
---|
654 | List of users that are given read-write access to a service.
|
---|
655 | </para></entry>
|
---|
656 | </row>
|
---|
657 | </tbody>
|
---|
658 | </tgroup>
|
---|
659 | </table>
|
---|
660 |
|
---|
661 | </sect2>
|
---|
662 |
|
---|
663 | <sect2>
|
---|
664 | <title>File and Directory Permissions-Based Controls</title>
|
---|
665 |
|
---|
666 | <para>
|
---|
667 | Directory permission-based controls, if misused, can result in considerable difficulty in diagnosing the causes of
|
---|
668 | misconfiguration. Use them sparingly and carefully. By gradually introducing each, one at a time, undesirable side
|
---|
669 | effects may be detected. In the event of a problem, always comment all of them out and then gradually reintroduce
|
---|
670 | them in a controlled way.
|
---|
671 | </para>
|
---|
672 |
|
---|
673 | <para>
|
---|
674 | Refer to <link linkend="fdpbc">File and Directory Permission Based Controls</link> for information
|
---|
675 | regarding the parameters that may be used to set file and directory permission-based access controls.
|
---|
676 | </para>
|
---|
677 |
|
---|
678 | <table frame='all' id="fdpbc"><title>File and Directory Permission-Based Controls</title>
|
---|
679 | <tgroup cols='2'>
|
---|
680 | <colspec align="left"/>
|
---|
681 | <colspec align="justify" colwidth="1*"/>
|
---|
682 | <thead>
|
---|
683 | <row>
|
---|
684 | <entry align="center">Control Parameter</entry>
|
---|
685 | <entry align="center">Description, Action, Notes</entry>
|
---|
686 | </row>
|
---|
687 | </thead>
|
---|
688 | <tbody>
|
---|
689 | <row>
|
---|
690 | <entry><smbconfoption name="create mask"/></entry>
|
---|
691 | <entry><para>
|
---|
692 | Refer to the &smb.conf; man page.
|
---|
693 | </para></entry>
|
---|
694 | </row>
|
---|
695 | <row>
|
---|
696 | <entry><smbconfoption name="directory mask"/></entry>
|
---|
697 | <entry><para>
|
---|
698 | The octal modes used when converting DOS modes to UNIX modes when creating UNIX directories.
|
---|
699 | See also directory security mask.
|
---|
700 | </para></entry></row>
|
---|
701 | <row>
|
---|
702 | <entry><smbconfoption name="dos filemode"/></entry>
|
---|
703 | <entry><para>
|
---|
704 | Enabling this parameter allows a user who has write access to the file to modify the permissions on it.
|
---|
705 | </para></entry>
|
---|
706 | </row>
|
---|
707 | <row>
|
---|
708 | <entry><smbconfoption name="force create mode"/></entry>
|
---|
709 | <entry><para>
|
---|
710 | This parameter specifies a set of UNIX-mode bit permissions that will always be set on a file created by Samba.
|
---|
711 | </para></entry>
|
---|
712 | </row>
|
---|
713 | <row>
|
---|
714 | <entry><smbconfoption name="force directory mode"/></entry>
|
---|
715 | <entry><para>
|
---|
716 | This parameter specifies a set of UNIX-mode bit permissions that will always be set on a directory created by Samba.
|
---|
717 | </para></entry>
|
---|
718 | </row>
|
---|
719 | <row>
|
---|
720 | <entry><smbconfoption name="force directory security mode"/></entry>
|
---|
721 | <entry><para>
|
---|
722 | Controls UNIX permission bits modified when a Windows NT client is manipulating UNIX permissions on a directory.
|
---|
723 | </para></entry>
|
---|
724 | </row>
|
---|
725 | <row>
|
---|
726 | <entry><smbconfoption name="force security mode"/></entry>
|
---|
727 | <entry><para>
|
---|
728 | Controls UNIX permission bits modified when a Windows NT client manipulates UNIX permissions.
|
---|
729 | </para></entry>
|
---|
730 | </row>
|
---|
731 | <row>
|
---|
732 | <entry><smbconfoption name="hide unreadable"/></entry>
|
---|
733 | <entry><para>
|
---|
734 | Prevents clients from seeing the existence of files that cannot be read.
|
---|
735 | </para></entry>
|
---|
736 | </row>
|
---|
737 | <row>
|
---|
738 | <entry><smbconfoption name="hide unwriteable files"/></entry>
|
---|
739 | <entry><para>
|
---|
740 | Prevents clients from seeing the existence of files that cannot be written to. Unwritable directories are shown as usual.
|
---|
741 | </para></entry>
|
---|
742 | </row>
|
---|
743 | <row>
|
---|
744 | <entry><smbconfoption name="nt acl support"/></entry>
|
---|
745 | <entry><para>
|
---|
746 | This parameter controls whether smbd will attempt to map UNIX permissions into Windows NT ACLs.
|
---|
747 | </para></entry>
|
---|
748 | </row>
|
---|
749 | <row>
|
---|
750 | <entry><smbconfoption name="security mask"/></entry>
|
---|
751 | <entry><para>
|
---|
752 | Controls UNIX permission bits modified when a Windows NT client is manipulating the UNIX permissions on a file.
|
---|
753 | </para></entry>
|
---|
754 | </row>
|
---|
755 | </tbody>
|
---|
756 | </tgroup>
|
---|
757 | </table>
|
---|
758 |
|
---|
759 | </sect2>
|
---|
760 |
|
---|
761 | <sect2>
|
---|
762 | <title>Miscellaneous Controls</title>
|
---|
763 |
|
---|
764 | <para>
|
---|
765 | The parameters documented in <link linkend="mcoc">Other Controls</link> are often used by administrators
|
---|
766 | in ways that create inadvertent barriers to file access. Such are the consequences of not understanding the
|
---|
767 | full implications of &smb.conf; file settings.
|
---|
768 | </para>
|
---|
769 |
|
---|
770 | <table frame='all' id="mcoc"><title>Other Controls</title>
|
---|
771 | <tgroup cols='2'>
|
---|
772 | <colspec align="justify" colwidth="1*"/>
|
---|
773 | <colspec align="justify" colwidth="1*"/>
|
---|
774 | <thead>
|
---|
775 | <row>
|
---|
776 | <entry align="center">Control Parameter</entry>
|
---|
777 | <entry align="center">Description, Action, Notes</entry>
|
---|
778 | </row>
|
---|
779 | </thead>
|
---|
780 | <tbody>
|
---|
781 | <row>
|
---|
782 | <entry>
|
---|
783 | <smbconfoption name="case sensitive"/>,
|
---|
784 | <smbconfoption name="default case"/>,
|
---|
785 | <smbconfoption name="short preserve case"/>
|
---|
786 | </entry>
|
---|
787 | <entry><para>
|
---|
788 | This means that all file name lookup will be done in a case-sensitive manner.
|
---|
789 | Files will be created with the precise file name Samba received from the MS Windows client.
|
---|
790 | </para></entry>
|
---|
791 | </row>
|
---|
792 | <row>
|
---|
793 | <entry><smbconfoption name="csc policy"/></entry>
|
---|
794 | <entry><para>
|
---|
795 | Client-side caching policy parallels MS Windows client-side file caching capabilities.
|
---|
796 | </para></entry>
|
---|
797 | </row>
|
---|
798 | <row>
|
---|
799 | <entry><smbconfoption name="dont descend"/></entry>
|
---|
800 | <entry><para>
|
---|
801 | Allows specifying a comma-delimited list of directories that the server should always show as empty.
|
---|
802 | </para></entry>
|
---|
803 | </row>
|
---|
804 | <row>
|
---|
805 | <entry><smbconfoption name="dos filetime resolution"/></entry>
|
---|
806 | <entry><para>
|
---|
807 | This option is mainly used as a compatibility option for Visual C++ when used against Samba shares.
|
---|
808 | </para></entry>
|
---|
809 | </row>
|
---|
810 | <row>
|
---|
811 | <entry><smbconfoption name="dos filetimes"/></entry>
|
---|
812 | <entry><para>
|
---|
813 | DOS and Windows allow users to change file timestamps if they can write to the file. POSIX semantics prevent this.
|
---|
814 | This option allows DOS and Windows behavior.
|
---|
815 | </para></entry>
|
---|
816 | </row>
|
---|
817 | <row>
|
---|
818 | <entry><smbconfoption name="fake oplocks"/></entry>
|
---|
819 | <entry><para>
|
---|
820 | Oplocks are the way that SMB clients get permission from a server to locally cache file operations. If a server grants an
|
---|
821 | oplock, the client is free to assume that it is the only one accessing the file, and it will aggressively cache file data.
|
---|
822 | </para></entry>
|
---|
823 | </row>
|
---|
824 | <row>
|
---|
825 | <entry>
|
---|
826 | <smbconfoption name="hide dot files"/>,
|
---|
827 | <smbconfoption name="hide files"/>,
|
---|
828 | <smbconfoption name="veto files"/>
|
---|
829 | </entry>
|
---|
830 | <entry><para>
|
---|
831 | Note: MS Windows Explorer allows override of files marked as hidden so they will still be visible.
|
---|
832 | </para></entry>
|
---|
833 | </row>
|
---|
834 | <row>
|
---|
835 | <entry><smbconfoption name="read only"/></entry>
|
---|
836 | <entry><para>
|
---|
837 | If this parameter is yes, then users of a service may not create or modify files in the service's directory.
|
---|
838 | </para></entry>
|
---|
839 | </row>
|
---|
840 | <row>
|
---|
841 | <entry><smbconfoption name="veto files"/></entry>
|
---|
842 | <entry><para>
|
---|
843 | List of files and directories that are neither visible nor accessible.
|
---|
844 | </para></entry>
|
---|
845 | </row>
|
---|
846 | </tbody>
|
---|
847 | </tgroup>
|
---|
848 | </table>
|
---|
849 |
|
---|
850 | </sect2>
|
---|
851 |
|
---|
852 | </sect1>
|
---|
853 |
|
---|
854 | <sect1>
|
---|
855 | <title>Access Controls on Shares</title>
|
---|
856 |
|
---|
857 |
|
---|
858 | <para>
|
---|
859 | <indexterm><primary>per-share access control</primary></indexterm>
|
---|
860 | <indexterm><primary>Everyone - Full Control</primary></indexterm>
|
---|
861 | <indexterm><primary>specific restrictions</primary></indexterm>
|
---|
862 | <indexterm><primary>share access</primary></indexterm>
|
---|
863 | <indexterm><primary>permissions</primary><secondary>share ACLs</secondary></indexterm>
|
---|
864 | This section deals with how to configure Samba per-share access control restrictions.
|
---|
865 | By default, Samba sets no restrictions on the share itself. Restrictions on the share itself
|
---|
866 | can be set on MS Windows NT4/200x/XP shares. This can be an effective way to limit who can
|
---|
867 | connect to a share. In the absence of specific restrictions, the default setting is to allow
|
---|
868 | the global user <constant>Everyone - Full Control</constant> (full control, change and read).
|
---|
869 | </para>
|
---|
870 |
|
---|
871 | <para>
|
---|
872 | <indexterm><primary>access control</primary></indexterm>
|
---|
873 | <indexterm><primary>MMC</primary></indexterm>
|
---|
874 | <indexterm><primary>Computer Management</primary></indexterm>
|
---|
875 | At this time Samba does not provide a tool for configuring access control settings on the share
|
---|
876 | itself. The only way to create those settings is to use either the NT4 Server Manager or the Windows 200x
|
---|
877 | Microsoft Management Console (MMC) for Computer Management. There are currently no plans to provide
|
---|
878 | this capability in the Samba command-line tool set.
|
---|
879 | </para>
|
---|
880 |
|
---|
881 | <para>
|
---|
882 | <indexterm><primary>share_info.tdb</primary></indexterm>
|
---|
883 | <indexterm><primary>/usr/local/samba/var</primary></indexterm>
|
---|
884 | <indexterm><primary>tdbdump</primary></indexterm>
|
---|
885 | <indexterm><primary>tdb files</primary></indexterm>
|
---|
886 | Samba stores the per-share access control settings in a file called <filename>share_info.tdb</filename>.
|
---|
887 | The location of this file on your system will depend on how Samba was compiled. The default location
|
---|
888 | for Samba's tdb files is under <filename>/usr/local/samba/var</filename>. If the <filename>tdbdump</filename>
|
---|
889 | utility has been compiled and installed on your system, then you can examine the contents of this file
|
---|
890 | by executing <command>tdbdump share_info.tdb</command> in the directory containing the tdb files.
|
---|
891 | </para>
|
---|
892 |
|
---|
893 | <sect2>
|
---|
894 | <title>Share Permissions Management</title>
|
---|
895 |
|
---|
896 | <para>
|
---|
897 | The best tool for share permissions management is platform-dependent. Choose the best tool for your environment.
|
---|
898 | </para>
|
---|
899 |
|
---|
900 | <sect3>
|
---|
901 | <title>Windows NT4 Workstation/Server</title>
|
---|
902 | <para>
|
---|
903 | <indexterm><primary>manage share permissions</primary></indexterm>
|
---|
904 | <indexterm><primary>share permissions</primary></indexterm>
|
---|
905 | <indexterm><primary>NT Server Manager</primary></indexterm>
|
---|
906 | <indexterm><primary>Windows NT4</primary></indexterm>
|
---|
907 | The tool you need to manage share permissions on a Samba server from a Windows NT4 Workstation or Server
|
---|
908 | is the NT Server Manager. Server Manager is shipped with Windows NT4 Server products but not with Windows
|
---|
909 | NT4 Workstation. You can obtain the NT Server Manager for MS Windows NT4 Workstation from the Microsoft
|
---|
910 | web site <ulink url="http://support.microsoft.com/default.aspx?scid=kb;en-us;173673">support</ulink> section.
|
---|
911 | </para>
|
---|
912 |
|
---|
913 | <procedure>
|
---|
914 | <title>Instructions</title>
|
---|
915 |
|
---|
916 | <step><para>
|
---|
917 | Launch the <application>NT4 Server Manager</application> and click on the Samba server you want to
|
---|
918 | administer. From the menu select <guimenu>Computer</guimenu>, then click on
|
---|
919 | <guimenuitem>Shared Directories</guimenuitem>.
|
---|
920 | </para></step>
|
---|
921 |
|
---|
922 | <step><para>
|
---|
923 | Click on the share that you wish to manage and click the <guilabel>Properties</guilabel> tab, then click
|
---|
924 | the <guilabel>Permissions</guilabel> tab. Now you can add or change access control settings as you wish.
|
---|
925 | </para></step>
|
---|
926 | </procedure>
|
---|
927 |
|
---|
928 | </sect3>
|
---|
929 |
|
---|
930 | <sect3>
|
---|
931 | <title>Windows 200x/XP</title>
|
---|
932 |
|
---|
933 | <para>
|
---|
934 | <indexterm><primary>Windows NT4/200x/XP</primary></indexterm>
|
---|
935 | <indexterm><primary>ACLs on share</primary></indexterm>
|
---|
936 | <indexterm><primary>Sharing</primary></indexterm>
|
---|
937 | <indexterm><primary>Permissions</primary></indexterm>
|
---|
938 | On <application>MS Windows NT4/200x/XP</application> systems, ACLs on the share itself are set using
|
---|
939 | tools like the MS Explorer. For example, in Windows 200x, right-click on the shared folder,
|
---|
940 | then select <guimenuitem>Sharing</guimenuitem>, then click on <guilabel>Permissions</guilabel>. The default
|
---|
941 | Windows NT4/200x permissions allow the group "Everyone" full control on the share.
|
---|
942 | </para>
|
---|
943 |
|
---|
944 | <para>
|
---|
945 | <indexterm><primary>Computer Management</primary></indexterm>
|
---|
946 | <indexterm><primary>MMC</primary></indexterm>
|
---|
947 | <indexterm><primary>tool</primary></indexterm>
|
---|
948 | MS Windows 200x and later versions come with a tool called the <application>Computer Management</application>
|
---|
949 | snap-in for the MMC. This tool can be accessed via <guimenu>Control Panel ->
|
---|
950 | Administrative Tools -> Computer Management</guimenu>.
|
---|
951 | </para>
|
---|
952 |
|
---|
953 | <procedure>
|
---|
954 | <title>Instructions</title>
|
---|
955 | <step><para>
|
---|
956 | After launching the MMC with the Computer Management snap-in, click the menu item <guimenuitem>Action</guimenuitem>
|
---|
957 | and select <guilabel>Connect to another computer</guilabel>. If you are not logged onto a domain you will be prompted
|
---|
958 | to enter a domain login user identifier and a password. This will authenticate you to the domain.
|
---|
959 | If you are already logged in with administrative privilege, this step is not offered.
|
---|
960 | </para></step>
|
---|
961 |
|
---|
962 | <step><para>
|
---|
963 | If the Samba server is not shown in the <guilabel>Select Computer</guilabel> box, type in the name of the target
|
---|
964 | Samba server in the field <guilabel>Name:</guilabel>. Now click the on <guibutton>[+]</guibutton> next to
|
---|
965 | <guilabel>System Tools</guilabel>, then on the <guibutton>[+]</guibutton> next to
|
---|
966 | <guilabel>Shared Folders</guilabel> in the left panel.
|
---|
967 | </para></step>
|
---|
968 |
|
---|
969 | <step><para>
|
---|
970 | <indexterm><primary>Share Permissions</primary></indexterm>
|
---|
971 | In the right panel, double-click on the share on which you wish to set access control permissions.
|
---|
972 | Then click the tab <guilabel>Share Permissions</guilabel>. It is now possible to add access control entities
|
---|
973 | to the shared folder. Remember to set what type of access (full control, change, read) you
|
---|
974 | wish to assign for each entry.
|
---|
975 | </para></step>
|
---|
976 | </procedure>
|
---|
977 |
|
---|
978 | <warning>
|
---|
979 | <para>
|
---|
980 | Be careful. If you take away all permissions from the <constant>Everyone</constant> user without removing
|
---|
981 | this user, effectively no user will be able to access the share. This is a result of what is known as
|
---|
982 | ACL precedence. Everyone with <emphasis>no access</emphasis> means that <constant>MaryK</constant> who is
|
---|
983 | part of the group <constant>Everyone</constant> will have no access even if she is given explicit full
|
---|
984 | control access.
|
---|
985 | </para>
|
---|
986 | </warning>
|
---|
987 |
|
---|
988 | </sect3>
|
---|
989 | </sect2>
|
---|
990 |
|
---|
991 | </sect1>
|
---|
992 |
|
---|
993 | <sect1>
|
---|
994 | <title>MS Windows Access Control Lists and UNIX Interoperability</title>
|
---|
995 |
|
---|
996 | <sect2>
|
---|
997 | <title>Managing UNIX Permissions Using NT Security Dialogs</title>
|
---|
998 |
|
---|
999 |
|
---|
1000 | <para>
|
---|
1001 | <indexterm><primary>permissions</primary><secondary>file/directory ACLs</secondary></indexterm>
|
---|
1002 | Windows NT clients can use their native security settings dialog box to view and modify the
|
---|
1003 | underlying UNIX permissions.
|
---|
1004 | </para>
|
---|
1005 |
|
---|
1006 | <para>
|
---|
1007 | This ability is careful not to compromise the security of the UNIX host on which Samba is running and
|
---|
1008 | still obeys all the file permission rules that a Samba administrator can set.
|
---|
1009 | </para>
|
---|
1010 |
|
---|
1011 | <para>
|
---|
1012 | Samba does not attempt to go beyond POSIX ACLs, so the various finer-grained access control
|
---|
1013 | options provided in Windows are actually ignored.
|
---|
1014 | </para>
|
---|
1015 |
|
---|
1016 | <note>
|
---|
1017 | <para>
|
---|
1018 | All access to UNIX/Linux system files via Samba is controlled by the operating system file access controls.
|
---|
1019 | When trying to figure out file access problems, it is vitally important to find the identity of the Windows
|
---|
1020 | user as it is presented by Samba at the point of file access. This can best be determined from the
|
---|
1021 | Samba log files.
|
---|
1022 | </para>
|
---|
1023 | </note>
|
---|
1024 | </sect2>
|
---|
1025 |
|
---|
1026 | <sect2>
|
---|
1027 | <title>Viewing File Security on a Samba Share</title>
|
---|
1028 |
|
---|
1029 | <para>
|
---|
1030 | From an NT4/2000/XP client, right-click on any file or directory in a Samba-mounted drive letter
|
---|
1031 | or UNC path. When the menu pops up, click on the <guilabel>Properties</guilabel> entry at the bottom
|
---|
1032 | of the menu. This brings up the file <constant>Properties</constant> dialog box. Click on the
|
---|
1033 | <guilabel>Security</guilabel> tab and you will see three buttons: <guibutton>Permissions</guibutton>,
|
---|
1034 | <guibutton>Auditing</guibutton>, and <guibutton>Ownership</guibutton>. The <guibutton>Auditing</guibutton>
|
---|
1035 | button will cause either an error message <errorname>"A requested privilege is not held by the client"</errorname>
|
---|
1036 | to appear if the user is not the NT administrator, or a dialog intended to allow an administrator
|
---|
1037 | to add auditing requirements to a file if the user is logged on as the NT administrator. This dialog is
|
---|
1038 | nonfunctional with a Samba share at this time, because the only useful button, the <guibutton>Add</guibutton>
|
---|
1039 | button, will not currently allow a list of users to be seen.
|
---|
1040 | </para>
|
---|
1041 |
|
---|
1042 | </sect2>
|
---|
1043 |
|
---|
1044 | <sect2>
|
---|
1045 | <title>Viewing File Ownership</title>
|
---|
1046 |
|
---|
1047 | <para>
|
---|
1048 | Clicking on the <guibutton>Ownership</guibutton> button brings up a dialog box telling you who owns
|
---|
1049 | the given file. The owner name will be displayed like this:
|
---|
1050 | <screen>
|
---|
1051 | <constant>SERVER\user (Long name)</constant>
|
---|
1052 | </screen>
|
---|
1053 | <replaceable>SERVER</replaceable> is the NetBIOS name of the Samba server, <replaceable>user</replaceable>
|
---|
1054 | is the username of the UNIX user who owns the file, and <replaceable>(Long name)</replaceable> is the
|
---|
1055 | descriptive string identifying the user (normally found in the GECOS field of the UNIX password database).
|
---|
1056 | Click on the <guibutton>Close</guibutton> button to remove this dialog.
|
---|
1057 | </para>
|
---|
1058 |
|
---|
1059 | <para>
|
---|
1060 | If the parameter <smbconfoption name="nt acl support"/> is set to <constant>false</constant>,
|
---|
1061 | the file owner will be shown as the NT user <emphasis>Everyone</emphasis>.
|
---|
1062 | </para>
|
---|
1063 |
|
---|
1064 | <para>
|
---|
1065 | <indexterm><primary>Take Ownership</primary></indexterm>
|
---|
1066 | The <guibutton>Take Ownership</guibutton> button will not allow you to change the ownership of this file to
|
---|
1067 | yourself (clicking it will display a dialog box complaining that the user as whom you are currently logged onto
|
---|
1068 | the NT client cannot be found). The reason for this is that changing the ownership of a file is a privileged
|
---|
1069 | operation in UNIX, available only to the <emphasis>root</emphasis> user. Because clicking on this button causes
|
---|
1070 | NT to attempt to change the ownership of a file to the current user logged into the NT client, this will
|
---|
1071 | not work with Samba at this time.
|
---|
1072 | </para>
|
---|
1073 |
|
---|
1074 | <para>
|
---|
1075 | <indexterm><primary>chown</primary></indexterm>
|
---|
1076 | <indexterm><primary>ownership</primary></indexterm>
|
---|
1077 | <indexterm><primary>Seclib</primary></indexterm>
|
---|
1078 | There is an NT <command>chown</command> command that will work with Samba and allow a user with administrator
|
---|
1079 | privilege connected to a Samba server as root to change the ownership of files on both a local NTFS file system
|
---|
1080 | or remote mounted NTFS or Samba drive. This is available as part of the <application>Seclib</application> NT
|
---|
1081 | security library written by Jeremy Allison of the Samba Team and is downloadable from the main Samba FTP site.
|
---|
1082 | </para>
|
---|
1083 |
|
---|
1084 | </sect2>
|
---|
1085 |
|
---|
1086 | <sect2>
|
---|
1087 | <title>Viewing File or Directory Permissions</title>
|
---|
1088 |
|
---|
1089 | <para>
|
---|
1090 | The third button is the <guibutton>Permissions</guibutton> button. Clicking on it brings up a dialog box
|
---|
1091 | that shows both the permissions and the UNIX owner of the file or directory. The owner is displayed like this:
|
---|
1092 | </para>
|
---|
1093 |
|
---|
1094 | <para><command><replaceable>SERVER</replaceable>\
|
---|
1095 | <replaceable>user</replaceable>
|
---|
1096 | <replaceable>(Long name)</replaceable></command></para>
|
---|
1097 |
|
---|
1098 | <para><replaceable>SERVER</replaceable> is the NetBIOS name of the Samba server,
|
---|
1099 | <replaceable>user</replaceable> is the username of the UNIX user who owns the file, and
|
---|
1100 | <replaceable>(Long name)</replaceable> is the descriptive string identifying the user (normally found in the
|
---|
1101 | GECOS field of the UNIX password database).</para>
|
---|
1102 |
|
---|
1103 | <para>
|
---|
1104 | If the parameter <smbconfoption name="nt acl support"/> is set to <constant>false</constant>,
|
---|
1105 | the file owner will be shown as the NT user <constant>Everyone</constant>, and the permissions will be
|
---|
1106 | shown as NT <emphasis>Full Control</emphasis>.
|
---|
1107 | </para>
|
---|
1108 |
|
---|
1109 |
|
---|
1110 | <para>
|
---|
1111 | The permissions field is displayed differently for files and directories. Both are discussed next.
|
---|
1112 | </para>
|
---|
1113 |
|
---|
1114 | <sect3>
|
---|
1115 | <title>File Permissions</title>
|
---|
1116 |
|
---|
1117 | <para>
|
---|
1118 | The standard UNIX user/group/world triplet and the corresponding <constant>read, write,
|
---|
1119 | execute</constant> permissions triplets are mapped by Samba into a three-element NT ACL with the
|
---|
1120 | <quote>r</quote>, <quote>w</quote>, and <quote>x</quote> bits mapped into the corresponding NT
|
---|
1121 | permissions. The UNIX world permissions are mapped into the global NT group <constant>Everyone</constant>, followed
|
---|
1122 | by the list of permissions allowed for the UNIX world. The UNIX owner and group permissions are displayed as an NT
|
---|
1123 | <guiicon>user</guiicon> icon and an NT <guiicon>local group</guiicon> icon, respectively, followed by the list
|
---|
1124 | of permissions allowed for the UNIX user and group.
|
---|
1125 | </para>
|
---|
1126 |
|
---|
1127 | <para>
|
---|
1128 | Because many UNIX permission sets do not map into common NT names such as <constant>read</constant>,
|
---|
1129 | <constant>change</constant>, or <constant>full control</constant>, usually the permissions will be prefixed
|
---|
1130 | by the words <constant>Special Access</constant> in the NT display list.
|
---|
1131 | </para>
|
---|
1132 |
|
---|
1133 | <para>
|
---|
1134 | But what happens if the file has no permissions allowed for a particular UNIX user group or world component?
|
---|
1135 | In order to allow <emphasis>no permissions</emphasis> to be seen and modified, Samba then overloads the NT
|
---|
1136 | <constant>Take Ownership</constant> ACL attribute (which has no meaning in UNIX) and reports a component with
|
---|
1137 | no permissions as having the NT <command>O</command> bit set. This was chosen, of course, to make it look
|
---|
1138 | like a zero, meaning zero permissions. More details on the decision behind this action are given below.
|
---|
1139 | </para>
|
---|
1140 |
|
---|
1141 | </sect3>
|
---|
1142 |
|
---|
1143 | <sect3>
|
---|
1144 | <title>Directory Permissions</title>
|
---|
1145 |
|
---|
1146 | <para>
|
---|
1147 | Directories on an NT NTFS file system have two different sets of permissions. The first set is the ACL set on the
|
---|
1148 | directory itself, which is usually displayed in the first set of parentheses in the normal <constant>RW</constant>
|
---|
1149 | NT style. This first set of permissions is created by Samba in exactly the same way as normal file permissions are, described
|
---|
1150 | above, and is displayed in the same way.
|
---|
1151 | </para>
|
---|
1152 |
|
---|
1153 | <para>
|
---|
1154 | The second set of directory permissions has no real meaning in the UNIX permissions world and represents the <constant>
|
---|
1155 | inherited</constant> permissions that any file created within this directory would inherit.
|
---|
1156 | </para>
|
---|
1157 |
|
---|
1158 | <para>
|
---|
1159 | Samba synthesizes these inherited permissions for NT by returning as an NT ACL the UNIX permission mode that a new file
|
---|
1160 | created by Samba on this share would receive.
|
---|
1161 | </para>
|
---|
1162 |
|
---|
1163 | </sect3>
|
---|
1164 |
|
---|
1165 | </sect2>
|
---|
1166 |
|
---|
1167 | <sect2>
|
---|
1168 | <title>Modifying File or Directory Permissions</title>
|
---|
1169 |
|
---|
1170 | <para>
|
---|
1171 | Modifying file and directory permissions is as simple as changing the displayed permissions in the dialog box
|
---|
1172 | and clicking on <guibutton>OK</guibutton>. However, there are limitations that a user needs to be aware of,
|
---|
1173 | and also interactions with the standard Samba permission masks and mapping of DOS attributes that also need to
|
---|
1174 | be taken into account.
|
---|
1175 | </para>
|
---|
1176 |
|
---|
1177 | <para>
|
---|
1178 | If the parameter <smbconfoption name="nt acl support"/> is set to <constant>false</constant>, any attempt to
|
---|
1179 | set security permissions will fail with an <errorname>"Access Denied" </errorname> message.
|
---|
1180 | </para>
|
---|
1181 |
|
---|
1182 | <para>
|
---|
1183 | The first thing to note is that the <guibutton>Add</guibutton> button will not return a list of users in Samba
|
---|
1184 | (it will give an error message saying <errorname>"The remote procedure call failed and did not
|
---|
1185 | execute"</errorname>). This means that you can only manipulate the current user/group/world permissions listed
|
---|
1186 | in the dialog box. This actually works quite well because these are the only permissions that UNIX actually
|
---|
1187 | has.
|
---|
1188 | </para>
|
---|
1189 |
|
---|
1190 | <para>
|
---|
1191 | If a permission triplet (either user, group, or world) is removed from the list of permissions in the NT
|
---|
1192 | dialog box, then when the <guibutton>OK</guibutton> button is pressed, it will be applied as <emphasis>no
|
---|
1193 | permissions</emphasis> on the UNIX side. If you view the permissions again, the <emphasis>no
|
---|
1194 | permissions</emphasis> entry will appear as the NT <command>O</command> flag, as described above. This allows
|
---|
1195 | you to add permissions back to a file or directory once you have removed them from a triplet component.
|
---|
1196 | </para>
|
---|
1197 |
|
---|
1198 | <para>
|
---|
1199 | Because UNIX supports only the <quote>r</quote>, <quote>w</quote>, and <quote>x</quote> bits of an NT ACL, if
|
---|
1200 | other NT security attributes such as <constant>Delete Access</constant> are selected, they will be ignored
|
---|
1201 | when applied on the Samba server.
|
---|
1202 | </para>
|
---|
1203 |
|
---|
1204 | <para>
|
---|
1205 | When setting permissions on a directory, the second set of permissions (in the second set of parentheses) is
|
---|
1206 | by default applied to all files within that directory. If this is not what you want, you must uncheck the
|
---|
1207 | <guilabel>Replace permissions on existing files</guilabel> checkbox in the NT dialog before clicking on
|
---|
1208 | <guibutton>OK</guibutton>.
|
---|
1209 | </para>
|
---|
1210 |
|
---|
1211 | <para>
|
---|
1212 | If you wish to remove all permissions from a user/group/world component, you may either highlight the
|
---|
1213 | component and click on the <guibutton>Remove</guibutton> button or set the component to only have the special
|
---|
1214 | <constant>Take Ownership</constant> permission (displayed as <command>O</command>) highlighted.
|
---|
1215 | </para>
|
---|
1216 |
|
---|
1217 | </sect2>
|
---|
1218 |
|
---|
1219 | <?latex \newpage ?>
|
---|
1220 | <sect2>
|
---|
1221 | <title>Interaction with the Standard Samba <quote>create mask</quote> Parameters</title>
|
---|
1222 |
|
---|
1223 | <para>There are four parameters that control interaction with the standard Samba <parameter>create mask</parameter> parameters:
|
---|
1224 |
|
---|
1225 |
|
---|
1226 | <itemizedlist>
|
---|
1227 | <listitem><para><smbconfoption name="security mask"/></para></listitem>
|
---|
1228 | <listitem><para><smbconfoption name="force security mode"/></para></listitem>
|
---|
1229 | <listitem><para><smbconfoption name="directory security mask"/></para></listitem>
|
---|
1230 | <listitem><para><smbconfoption name="force directory security mode"/></para></listitem>
|
---|
1231 | </itemizedlist>
|
---|
1232 |
|
---|
1233 | </para>
|
---|
1234 |
|
---|
1235 | <para>
|
---|
1236 | When a user clicks on <guibutton>OK</guibutton> to apply the
|
---|
1237 | permissions, Samba maps the given permissions into a user/group/world
|
---|
1238 | r/w/x triplet set, and then checks the changed permissions for a
|
---|
1239 | file against the bits set in the
|
---|
1240 | <smbconfoption name="security mask"/> parameter. Any bits that
|
---|
1241 | were changed that are not set to <emphasis>1</emphasis> in this parameter are left alone
|
---|
1242 | in the file permissions.</para>
|
---|
1243 |
|
---|
1244 | <para>
|
---|
1245 | Essentially, zero bits in the <smbconfoption name="security mask"/>
|
---|
1246 | may be treated as a set of bits the user is <emphasis>not</emphasis>
|
---|
1247 | allowed to change, and one bits are those the user is allowed to change.
|
---|
1248 | </para>
|
---|
1249 |
|
---|
1250 | <para>
|
---|
1251 | If not explicitly set, this parameter defaults to the same value as
|
---|
1252 | the <smbconfoption name="create mask"/> parameter. To allow a user to modify all the
|
---|
1253 | user/group/world permissions on a file, set this parameter to 0777.
|
---|
1254 | </para>
|
---|
1255 |
|
---|
1256 | <para>
|
---|
1257 | Next Samba checks the changed permissions for a file against the bits set in the
|
---|
1258 | <smbconfoption name="force security mode"/> parameter. Any bits
|
---|
1259 | that were changed that correspond to bits set to <emphasis>1</emphasis> in this parameter
|
---|
1260 | are forced to be set.</para>
|
---|
1261 |
|
---|
1262 | <para>
|
---|
1263 | Essentially, bits set in the <parameter>force security mode</parameter> parameter
|
---|
1264 | may be treated as a set of bits that, when modifying security on a file, the user
|
---|
1265 | has always set to be <emphasis>on</emphasis>.</para>
|
---|
1266 |
|
---|
1267 | <para>
|
---|
1268 | If not explicitly set, this parameter defaults to the same value
|
---|
1269 | as the <smbconfoption name="force create mode"/> parameter.
|
---|
1270 | To allow a user to modify all the user/group/world permissions on a file
|
---|
1271 | with no restrictions, set this parameter to 000. The
|
---|
1272 | <smbconfoption name="security mask"/> and <parameter>force
|
---|
1273 | security mode</parameter> parameters are applied to the change
|
---|
1274 | request in that order.</para>
|
---|
1275 |
|
---|
1276 | <para>
|
---|
1277 | For a directory, Samba performs the same operations as
|
---|
1278 | described above for a file except it uses the parameter <parameter>
|
---|
1279 | directory security mask</parameter> instead of <parameter>security
|
---|
1280 | mask</parameter>, and <parameter>force directory security mode
|
---|
1281 | </parameter> parameter instead of <parameter>force security mode
|
---|
1282 | </parameter>.</para>
|
---|
1283 |
|
---|
1284 | <para>
|
---|
1285 | The <smbconfoption name="directory security mask"/> parameter
|
---|
1286 | by default is set to the same value as the <parameter>directory mask
|
---|
1287 | </parameter> parameter and the <parameter>force directory security
|
---|
1288 | mode</parameter> parameter by default is set to the same value as
|
---|
1289 | the <smbconfoption name="force directory mode"/> parameter.
|
---|
1290 | In this way Samba enforces the permission restrictions that
|
---|
1291 | an administrator can set on a Samba share, while still allowing users
|
---|
1292 | to modify the permission bits within that restriction.</para>
|
---|
1293 |
|
---|
1294 | <para>
|
---|
1295 | If you want to set up a share that allows users full control
|
---|
1296 | in modifying the permission bits on their files and directories and
|
---|
1297 | does not force any particular bits to be set <emphasis>on</emphasis>,
|
---|
1298 | then set the following parameters in the &smb.conf; file in that
|
---|
1299 | share-specific section:
|
---|
1300 | </para>
|
---|
1301 |
|
---|
1302 | <?latex \newpage ?>
|
---|
1303 | <smbconfblock>
|
---|
1304 | <smbconfoption name="security mask">0777</smbconfoption>
|
---|
1305 | <smbconfoption name="force security mode">0</smbconfoption>
|
---|
1306 | <smbconfoption name="directory security mask">0777</smbconfoption>
|
---|
1307 | <smbconfoption name="force directory security mode">0</smbconfoption>
|
---|
1308 | </smbconfblock>
|
---|
1309 |
|
---|
1310 | </sect2>
|
---|
1311 |
|
---|
1312 | <sect2>
|
---|
1313 | <title>Interaction with the Standard Samba File Attribute Mapping</title>
|
---|
1314 |
|
---|
1315 | <note>
|
---|
1316 | <para>
|
---|
1317 | Samba maps some of the DOS attribute bits (such as <quote>read-only</quote>)
|
---|
1318 | into the UNIX permissions of a file. This means there can
|
---|
1319 | be a conflict between the permission bits set via the security
|
---|
1320 | dialog and the permission bits set by the file attribute mapping.
|
---|
1321 | </para>
|
---|
1322 | </note>
|
---|
1323 |
|
---|
1324 | <para>
|
---|
1325 | If a file has no UNIX read access for the owner, it will show up
|
---|
1326 | as <quote>read-only</quote> in the standard file attributes tabbed dialog.
|
---|
1327 | Unfortunately, this dialog is the same one that contains the security information
|
---|
1328 | in another tab.
|
---|
1329 | </para>
|
---|
1330 |
|
---|
1331 | <para>
|
---|
1332 | What this can mean is that if the owner changes the permissions
|
---|
1333 | to allow himself or herself read access using the security dialog, clicks on
|
---|
1334 | <guibutton>OK</guibutton> to get back to the standard attributes tab
|
---|
1335 | dialog, and clicks on <guibutton>OK</guibutton> on that dialog, then
|
---|
1336 | NT will set the file permissions back to read-only (as that is what
|
---|
1337 | the attributes still say in the dialog). This means that after setting
|
---|
1338 | permissions and clicking on <guibutton>OK</guibutton> to get back to the
|
---|
1339 | attributes dialog, you should always press <guibutton>Cancel</guibutton>
|
---|
1340 | rather than <guibutton>OK</guibutton> to ensure that your changes
|
---|
1341 | are not overridden.
|
---|
1342 | </para>
|
---|
1343 |
|
---|
1344 | </sect2>
|
---|
1345 |
|
---|
1346 | <sect2>
|
---|
1347 | <title>Windows NT/200X ACLs and POSIX ACLs Limitations</title>
|
---|
1348 |
|
---|
1349 | <para>
|
---|
1350 | Windows administrators are familiar with simple ACL controls, and they typically
|
---|
1351 | consider that UNIX user/group/other (ugo) permissions are inadequate and not
|
---|
1352 | sufficiently fine-grained.
|
---|
1353 | </para>
|
---|
1354 |
|
---|
1355 | <para>
|
---|
1356 | Competing SMB implementations differ in how they handle Windows ACLs. Samba handles
|
---|
1357 | Windows ACLs from the perspective of UNIX file system administration and thus adopts
|
---|
1358 | the limitations of POSIX ACLs. Therefore, where POSIX ACLs lack a capability of the
|
---|
1359 | Windows NT/200X ACLs, the POSIX semantics and limitations are imposed on the Windows
|
---|
1360 | administrator.
|
---|
1361 | </para>
|
---|
1362 |
|
---|
1363 | <para>
|
---|
1364 | POSIX ACLs present an interesting challenge to the UNIX administrator and therefore
|
---|
1365 | force a compromise to be applied to Windows ACLs administration. POSIX ACLs are not
|
---|
1366 | covered by an official standard; rather, the latest standard is a draft standard
|
---|
1367 | 1003.1e revision 17. This is the POSIX document on which the Samba implementation has
|
---|
1368 | been implemented.
|
---|
1369 | </para>
|
---|
1370 |
|
---|
1371 | <para>
|
---|
1372 | UNIX vendors differ in the manner in which POSIX ACLs are implemented. There are a
|
---|
1373 | number of Linux file systems that support ACLs. Samba has to provide a way to make
|
---|
1374 | transparent all the differences between the various implementations of POSIX ACLs.
|
---|
1375 | The pressure for ACLs support in Samba has noticeably increased the pressure to
|
---|
1376 | standardize ACLs support in the UNIX world.
|
---|
1377 | </para>
|
---|
1378 |
|
---|
1379 | <para>
|
---|
1380 | Samba has to deal with the complicated matter of handling the challenge of the Windows
|
---|
1381 | ACL that implements <emphasis>inheritance</emphasis>, a concept not anticipated by POSIX
|
---|
1382 | ACLs as implemented in UNIX file systems. Samba provides support for <emphasis>masks</emphasis>
|
---|
1383 | that permit normal ugo and ACLs functionality to be overridden. This further complicates
|
---|
1384 | the way in which Windows ACLs must be implemented.
|
---|
1385 | </para>
|
---|
1386 |
|
---|
1387 | <sect3>
|
---|
1388 | <title>UNIX POSIX ACL Overview</title>
|
---|
1389 |
|
---|
1390 | <para>
|
---|
1391 | In examining POSIX ACLs we must consider the manner in which they operate for
|
---|
1392 | both files and directories. File ACLs have the following significance:
|
---|
1393 | <screen>
|
---|
1394 | # file: testfile <- the file name
|
---|
1395 | # owner: jeremy <-- the file owner
|
---|
1396 | # group: users <-- the POSIX group owner
|
---|
1397 | user::rwx <-- perms for the file owner (user)
|
---|
1398 | user:tpot:r-x <-- perms for the additional user `tpot'
|
---|
1399 | group::r-- <-- perms for the file group owner (group)
|
---|
1400 | group:engrs:r-- <-- perms for the additonal group `engineers'
|
---|
1401 | mask:rwx <-- the mask that is `ANDed' with groups
|
---|
1402 | other::--- <-- perms applied to everyone else (other)
|
---|
1403 | </screen>
|
---|
1404 | Directory ACLs have the following signficance:
|
---|
1405 | <screen>
|
---|
1406 | # file: testdir <-- the directory name
|
---|
1407 | # owner: jeremy <-- the directory owner
|
---|
1408 | # group: jeremy <-- the POSIX group owner
|
---|
1409 | user::rwx <-- directory perms for owner (user)
|
---|
1410 | group::rwx <-- directory perms for owning group (group)
|
---|
1411 | mask::rwx <-- the mask that is `ANDed' with group perms
|
---|
1412 | other:r-x <-- perms applied to everyone else (other)
|
---|
1413 | default:user::rwx <-- inherited owner perms
|
---|
1414 | default:user:tpot:rwx <-- inherited extra perms for user `tpot'
|
---|
1415 | default:group::r-x <-- inherited group perms
|
---|
1416 | default:mask:rwx <-- inherited default mask
|
---|
1417 | default:other:--- <-- inherited permissions for everyone (other)
|
---|
1418 | </screen>
|
---|
1419 | </para>
|
---|
1420 |
|
---|
1421 | </sect3>
|
---|
1422 |
|
---|
1423 | <sect3>
|
---|
1424 | <title>Mapping of Windows File ACLs to UNIX POSIX ACLs</title>
|
---|
1425 |
|
---|
1426 | <para>
|
---|
1427 | Microsoft Windows NT4/200X ACLs must of necessity be mapped to POSIX ACLs.
|
---|
1428 | The mappings for file permissions are shown in <link linkend="fdsacls">How
|
---|
1429 | Windows File ACLs Map to UNIX POSIX File ACLs</link>.
|
---|
1430 | The # character means this flag is set only when the Windows administrator
|
---|
1431 | sets the <constant>Full Control</constant> flag on the file.
|
---|
1432 | </para>
|
---|
1433 |
|
---|
1434 | <table frame='all' pgwide='0' id="fdsacls"><title>How Windows File ACLs Map to UNIX POSIX File ACLs</title>
|
---|
1435 | <tgroup cols='2'>
|
---|
1436 | <colspec align="left"/>
|
---|
1437 | <colspec align="center"/>
|
---|
1438 | <thead>
|
---|
1439 | <row>
|
---|
1440 | <entry align="left">Windows ACE</entry>
|
---|
1441 | <entry align="center">File Attribute Flag</entry>
|
---|
1442 | </row>
|
---|
1443 | </thead>
|
---|
1444 | <tbody>
|
---|
1445 | <row>
|
---|
1446 | <entry><para>Full Control</para></entry>
|
---|
1447 | <entry><para>#</para></entry>
|
---|
1448 | </row>
|
---|
1449 | <row>
|
---|
1450 | <entry><para>Traverse Folder/Execute File</para></entry>
|
---|
1451 | <entry><para>x</para></entry>
|
---|
1452 | </row>
|
---|
1453 | <row>
|
---|
1454 | <entry><para>List Folder/Read Data</para></entry>
|
---|
1455 | <entry><para>r</para></entry>
|
---|
1456 | </row>
|
---|
1457 | <row>
|
---|
1458 | <entry><para>Read Attributes</para></entry>
|
---|
1459 | <entry><para>r</para></entry>
|
---|
1460 | </row>
|
---|
1461 | <row>
|
---|
1462 | <entry><para>Read Extended Attribures</para></entry>
|
---|
1463 | <entry><para>r</para></entry>
|
---|
1464 | </row>
|
---|
1465 | <row>
|
---|
1466 | <entry><para>Create Files/Write Data</para></entry>
|
---|
1467 | <entry><para>w</para></entry>
|
---|
1468 | </row>
|
---|
1469 | <row>
|
---|
1470 | <entry><para>Create Folders/Append Data</para></entry>
|
---|
1471 | <entry><para>w</para></entry>
|
---|
1472 | </row>
|
---|
1473 | <row>
|
---|
1474 | <entry><para>Write Attributes</para></entry>
|
---|
1475 | <entry><para>w</para></entry>
|
---|
1476 | </row>
|
---|
1477 | <row>
|
---|
1478 | <entry><para>Write Extended Attributes</para></entry>
|
---|
1479 | <entry><para>w</para></entry>
|
---|
1480 | </row>
|
---|
1481 | <row>
|
---|
1482 | <entry><para>Delete Subfolders and Files</para></entry>
|
---|
1483 | <entry><para>w</para></entry>
|
---|
1484 | </row>
|
---|
1485 | <row>
|
---|
1486 | <entry><para>Delete</para></entry>
|
---|
1487 | <entry><para>#</para></entry>
|
---|
1488 | </row>
|
---|
1489 | <row>
|
---|
1490 | <entry><para>Read Permissions</para></entry>
|
---|
1491 | <entry><para>all</para></entry>
|
---|
1492 | </row>
|
---|
1493 | <row>
|
---|
1494 | <entry><para>Change Permissions</para></entry>
|
---|
1495 | <entry><para>#</para></entry>
|
---|
1496 | </row>
|
---|
1497 | <row>
|
---|
1498 | <entry><para>Take Ownership</para></entry>
|
---|
1499 | <entry><para>#</para></entry>
|
---|
1500 | </row>
|
---|
1501 | </tbody>
|
---|
1502 | </tgroup>
|
---|
1503 | </table>
|
---|
1504 |
|
---|
1505 | <para>
|
---|
1506 | As can be seen from the mapping table, there is no one-to-one mapping capability, and therefore
|
---|
1507 | Samba must make a logical mapping that will permit Windows to operate more-or-less the way
|
---|
1508 | that is intended by the administrator.
|
---|
1509 | </para>
|
---|
1510 |
|
---|
1511 | <para>
|
---|
1512 | In general the mapping of UNIX POSIX user/group/other permissions will be mapped to
|
---|
1513 | Windows ACLs. This has precedence over the creation of POSIX ACLs. POSIX ACLs are necessary
|
---|
1514 | to establish access controls for users and groups other than the user and group that
|
---|
1515 | own the file or directory.
|
---|
1516 | </para>
|
---|
1517 |
|
---|
1518 | <para>
|
---|
1519 | The UNIX administrator can set any directory permission from within the UNIX environment.
|
---|
1520 | The Windows administrator is more restricted in that it is not possible from within
|
---|
1521 | Windows Explorer to remove read permission for the file owner.
|
---|
1522 | </para>
|
---|
1523 |
|
---|
1524 | </sect3>
|
---|
1525 |
|
---|
1526 | <sect3>
|
---|
1527 | <title>Mapping of Windows Directory ACLs to UNIX POSIX ACLs</title>
|
---|
1528 |
|
---|
1529 | <para>
|
---|
1530 | Interesting things happen in the mapping of UNIX POSIX directory permissions and
|
---|
1531 | UNIX POSIX ACLs to Windows ACEs (Access Control Entries, the discrete components of
|
---|
1532 | an ACL) are mapped to Windows directory ACLs.
|
---|
1533 | </para>
|
---|
1534 |
|
---|
1535 | <para>
|
---|
1536 | Directory permissions function in much the same way as shown for file permissions, but
|
---|
1537 | there are some notable exceptions and a few peculiarities that the astute administrator
|
---|
1538 | will want to take into account in the setting up of directory permissions.
|
---|
1539 | </para>
|
---|
1540 |
|
---|
1541 | </sect3>
|
---|
1542 |
|
---|
1543 | </sect2>
|
---|
1544 | </sect1>
|
---|
1545 |
|
---|
1546 | <sect1>
|
---|
1547 | <title>Common Errors</title>
|
---|
1548 |
|
---|
1549 | <para>
|
---|
1550 | File, directory, and share access problems are common topics on the mailing list. The following
|
---|
1551 | are examples recently taken from the mailing list.
|
---|
1552 | </para>
|
---|
1553 |
|
---|
1554 |
|
---|
1555 | <sect2>
|
---|
1556 | <title>Users Cannot Write to a Public Share</title>
|
---|
1557 |
|
---|
1558 | <para>
|
---|
1559 | The following complaint has frequently been voiced on the Samba mailing list:
|
---|
1560 | <quote>
|
---|
1561 | We are facing some troubles with file/directory permissions. I can log on the domain as admin user (root),
|
---|
1562 | and there's a public share on which everyone needs to have permission to create/modify files, but only
|
---|
1563 | root can change the file, no one else can. We need to constantly go to the server to
|
---|
1564 | <userinput>chgrp -R users *</userinput> and <userinput>chown -R nobody *</userinput> to allow
|
---|
1565 | other users to change the file.
|
---|
1566 | </quote>
|
---|
1567 | </para>
|
---|
1568 |
|
---|
1569 | <para>
|
---|
1570 | Here is one way the problem can be solved:
|
---|
1571 | </para>
|
---|
1572 |
|
---|
1573 | <procedure>
|
---|
1574 | <step>
|
---|
1575 | <para>
|
---|
1576 | Go to the top of the directory that is shared.
|
---|
1577 | </para>
|
---|
1578 | </step>
|
---|
1579 |
|
---|
1580 | <step>
|
---|
1581 | <para>
|
---|
1582 | Set the ownership to whatever public user and group you want
|
---|
1583 | <screen>
|
---|
1584 | &prompt;find `directory_name' -type d -exec chown user:group {}\;
|
---|
1585 | &prompt;find `directory_name' -type d -exec chmod 2775 {}\;
|
---|
1586 | &prompt;find `directory_name' -type f -exec chmod 0775 {}\;
|
---|
1587 | &prompt;find `directory_name' -type f -exec chown user:group {}\;
|
---|
1588 | </screen>
|
---|
1589 | </para>
|
---|
1590 |
|
---|
1591 | <note><para>
|
---|
1592 | The above will set the <constant>SGID bit</constant> on all directories. Read your
|
---|
1593 | UNIX/Linux man page on what that does. This ensures that all files and directories
|
---|
1594 | that are created in the directory tree will be owned by the current user and will
|
---|
1595 | be owned by the group that owns the directory in which it is created.
|
---|
1596 | </para></note>
|
---|
1597 | </step>
|
---|
1598 | <step>
|
---|
1599 | <para>
|
---|
1600 | Directory is <replaceable>/foodbar</replaceable>:
|
---|
1601 | <screen>
|
---|
1602 | &prompt;<userinput>chown jack:engr /foodbar</userinput>
|
---|
1603 | </screen>
|
---|
1604 | </para>
|
---|
1605 |
|
---|
1606 | <note>
|
---|
1607 | <para>This is the same as doing:</para>
|
---|
1608 | <screen>
|
---|
1609 | &prompt;<userinput>chown jack /foodbar</userinput>
|
---|
1610 | &prompt;<userinput>chgrp engr /foodbar</userinput>
|
---|
1611 | </screen>
|
---|
1612 | </note>
|
---|
1613 | </step>
|
---|
1614 | <step>
|
---|
1615 | <para>Now type:
|
---|
1616 |
|
---|
1617 | <screen>
|
---|
1618 | &prompt;<userinput>chmod 2775 /foodbar</userinput>
|
---|
1619 | &prompt;<userinput>ls -al /foodbar/..</userinput>
|
---|
1620 | </screen>
|
---|
1621 | </para>
|
---|
1622 |
|
---|
1623 | <para>You should see:
|
---|
1624 | <screen>
|
---|
1625 | drwxrwsr-x 2 jack engr 48 2003-02-04 09:55 foodbar
|
---|
1626 | </screen>
|
---|
1627 | </para>
|
---|
1628 | </step>
|
---|
1629 | <step>
|
---|
1630 |
|
---|
1631 | <para>Now type:
|
---|
1632 | <screen>
|
---|
1633 | &prompt;<userinput>su - jill</userinput>
|
---|
1634 | &prompt;<userinput>cd /foodbar</userinput>
|
---|
1635 | &prompt;<userinput>touch Afile</userinput>
|
---|
1636 | &prompt;<userinput>ls -al</userinput>
|
---|
1637 | </screen>
|
---|
1638 | </para>
|
---|
1639 |
|
---|
1640 | <para>
|
---|
1641 | You should see that the file <filename>Afile</filename> created by Jill will have ownership
|
---|
1642 | and permissions of Jack, as follows:
|
---|
1643 | <screen>
|
---|
1644 | -rw-r--r-- 1 jill engr 0 2007-01-18 19:41 Afile
|
---|
1645 | </screen>
|
---|
1646 | </para>
|
---|
1647 | </step>
|
---|
1648 |
|
---|
1649 | <step>
|
---|
1650 | <para>
|
---|
1651 | If the user that must have write permission in the directory is not a member of the group
|
---|
1652 | <emphasis>engr</emphasis> set in the &smb.conf; entry for the share:
|
---|
1653 | <smbconfblock>
|
---|
1654 | <smbconfoption name="force group">engr</smbconfoption>
|
---|
1655 | </smbconfblock>
|
---|
1656 | </para>
|
---|
1657 | </step>
|
---|
1658 | </procedure>
|
---|
1659 | </sect2>
|
---|
1660 |
|
---|
1661 |
|
---|
1662 | <sect2>
|
---|
1663 | <title>File Operations Done as <emphasis>root</emphasis> with <emphasis>force user</emphasis> Set</title>
|
---|
1664 |
|
---|
1665 | <para>
|
---|
1666 | When you have a user in <smbconfoption name="admin users"/>, Samba will always do file operations for
|
---|
1667 | this user as <emphasis>root</emphasis>, even if <smbconfoption name="force user"/> has been set.
|
---|
1668 | </para>
|
---|
1669 | </sect2>
|
---|
1670 |
|
---|
1671 | <sect2>
|
---|
1672 | <title>MS Word with Samba Changes Owner of File</title>
|
---|
1673 |
|
---|
1674 | <para>
|
---|
1675 | <emphasis>Question:</emphasis> <quote>When user B saves a word document that is owned by user A,
|
---|
1676 | the updated file is now owned by user B. Why is Samba doing this? How do I fix this?</quote>
|
---|
1677 | </para>
|
---|
1678 |
|
---|
1679 | <para>
|
---|
1680 | <emphasis>Answer:</emphasis> Word does the following when you modify/change a Word document: MS Word creates a new document with
|
---|
1681 | a temporary name. Word then closes the old document and deletes it, then renames the new document to the original document name.
|
---|
1682 | There is no mechanism by which Samba can in any way know that the new document really should be owned by the owners
|
---|
1683 | of the original file. Samba has no way of knowing that the file will be renamed by MS Word. As far as Samba is able
|
---|
1684 | to tell, the file that gets created is a new file, not one that the application (Word) is updating.
|
---|
1685 | </para>
|
---|
1686 |
|
---|
1687 | <para>
|
---|
1688 | There is a workaround to solve the permissions problem. It involves understanding how you can manage file
|
---|
1689 | system behavior from within the &smb.conf; file, as well as understanding how UNIX file systems work. Set on the directory
|
---|
1690 | in which you are changing Word documents: <command>chmod g+s `directory_name'.</command> This ensures that all files will
|
---|
1691 | be created with the group that owns the directory. In &smb.conf; share declaration section set:
|
---|
1692 | </para>
|
---|
1693 |
|
---|
1694 | <para>
|
---|
1695 | <smbconfblock>
|
---|
1696 | <smbconfoption name="force create mode">0660</smbconfoption>
|
---|
1697 | <smbconfoption name="force directory mode">0770</smbconfoption>
|
---|
1698 | </smbconfblock>
|
---|
1699 | </para>
|
---|
1700 |
|
---|
1701 | <para>
|
---|
1702 | These two settings will ensure that all directories and files that get created in the share will be readable/writable by the
|
---|
1703 | owner and group set on the directory itself.
|
---|
1704 | </para>
|
---|
1705 |
|
---|
1706 | </sect2>
|
---|
1707 |
|
---|
1708 | </sect1>
|
---|
1709 |
|
---|
1710 | </chapter>
|
---|