author | Christian Urban <christian dot urban at kcl dot ac dot uk> |
Sun, 19 Oct 2014 16:44:31 +0100 | |
changeset 251 | 64e62d636737 |
parent 249 | 31a749eba8c1 |
child 252 | fa151c0a3cf4 |
permissions | -rw-r--r-- |
245
630a3dd1efda
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff
changeset
|
1 |
\documentclass{article} |
630a3dd1efda
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff
changeset
|
2 |
\usepackage{../style} |
630a3dd1efda
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff
changeset
|
3 |
\usepackage{../langs} |
247
95e14b2dbc94
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
245
diff
changeset
|
4 |
|
245
630a3dd1efda
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff
changeset
|
5 |
\usetikzlibrary{patterns,decorations.pathreplacing} |
630a3dd1efda
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff
changeset
|
6 |
|
630a3dd1efda
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff
changeset
|
7 |
\begin{document} |
630a3dd1efda
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff
changeset
|
8 |
|
247
95e14b2dbc94
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
245
diff
changeset
|
9 |
\section*{Handout 4 (Access Control)} |
245
630a3dd1efda
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff
changeset
|
10 |
|
630a3dd1efda
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff
changeset
|
11 |
Access control is essentially about deciding whether to grant |
247
95e14b2dbc94
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
245
diff
changeset
|
12 |
access to a resource or deny it. Sounds easy. No? Well it |
95e14b2dbc94
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
245
diff
changeset
|
13 |
turns out that things are not as simple as they seem at first |
95e14b2dbc94
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
245
diff
changeset
|
14 |
glance. Let us first look as a case-study at how access |
95e14b2dbc94
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
245
diff
changeset
|
15 |
control is organised in Unix-like systems (Windows systems |
95e14b2dbc94
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
245
diff
changeset
|
16 |
have similar access controls, although the details might be |
95e14b2dbc94
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
245
diff
changeset
|
17 |
quite different). |
95e14b2dbc94
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
245
diff
changeset
|
18 |
|
95e14b2dbc94
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
245
diff
changeset
|
19 |
|
95e14b2dbc94
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
245
diff
changeset
|
20 |
\subsubsection*{Unix-Style Access Control} |
95e14b2dbc94
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
245
diff
changeset
|
21 |
|
245
630a3dd1efda
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff
changeset
|
22 |
Following the Unix-philosophy that everything is considered as |
247
95e14b2dbc94
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
245
diff
changeset
|
23 |
a file, even memory, ports and so on, access control in Unix |
95e14b2dbc94
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
245
diff
changeset
|
24 |
is organised around 11 Bits that specify how a file can be |
95e14b2dbc94
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
245
diff
changeset
|
25 |
accessed. These Bits are sometimes called the \emph{permission |
95e14b2dbc94
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
245
diff
changeset
|
26 |
attributes} of a file. There are typically three modes for |
251
64e62d636737
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
249
diff
changeset
|
27 |
access: \underline{\textbf{r}}ead, \underline{\textbf{w}}rite |
64e62d636737
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
249
diff
changeset
|
28 |
and e\underline{\textbf{x}}ecute. Moreover there are three |
64e62d636737
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
249
diff
changeset
|
29 |
user groups to which the modes apply: the owner of the file, |
64e62d636737
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
249
diff
changeset
|
30 |
the group the file is associated with and everybody else. This |
64e62d636737
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
249
diff
changeset
|
31 |
relatively fine granularity seems to cover many useful |
64e62d636737
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
249
diff
changeset
|
32 |
scenarios of access control. A typical example of some files |
64e62d636737
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
249
diff
changeset
|
33 |
with permission attributes is as follows: |
247
95e14b2dbc94
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
245
diff
changeset
|
34 |
|
95e14b2dbc94
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
245
diff
changeset
|
35 |
{\small\lstinputlisting[language={}]{../slides/lst}} |
95e14b2dbc94
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
245
diff
changeset
|
36 |
|
95e14b2dbc94
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
245
diff
changeset
|
37 |
\noindent The leading \pcode{d} in Lines 2 and 6 indicate that |
95e14b2dbc94
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
245
diff
changeset
|
38 |
the file is a directory, whereby in the Unix-tradition the |
95e14b2dbc94
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
245
diff
changeset
|
39 |
\pcode{.} points to the directory itself. The \pcode{..} |
95e14b2dbc94
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
245
diff
changeset
|
40 |
points at the directory ``above'', or parent directory. The |
95e14b2dbc94
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
245
diff
changeset
|
41 |
second to fourth letter specify how the owner of the file can |
95e14b2dbc94
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
245
diff
changeset
|
42 |
access the file. For example Line 3 states that \pcode{ping} |
251
64e62d636737
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
249
diff
changeset
|
43 |
can read and write \pcode{manual.txt}, but cannot execute it. |
64e62d636737
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
249
diff
changeset
|
44 |
The next three letters specify how the group members of the |
64e62d636737
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
249
diff
changeset
|
45 |
file can access the file. In Line 4, for example, all students |
64e62d636737
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
249
diff
changeset
|
46 |
can read and write the file \pcode{report.txt}. Finally the |
64e62d636737
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
249
diff
changeset
|
47 |
last three letters specify how everybody else can access a |
64e62d636737
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
249
diff
changeset
|
48 |
file. This should all be relatively familiar and |
247
95e14b2dbc94
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
245
diff
changeset
|
49 |
straightforward. No? |
95e14b2dbc94
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
245
diff
changeset
|
50 |
|
249
31a749eba8c1
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
248
diff
changeset
|
51 |
There are already some special rules for directories and |
31a749eba8c1
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
248
diff
changeset
|
52 |
links. If the execute attribute of a directory is \emph{not} |
31a749eba8c1
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
248
diff
changeset
|
53 |
set, then one cannot change into the directory and one cannot |
31a749eba8c1
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
248
diff
changeset
|
54 |
access any file inside it. If the write attribute is not set, |
31a749eba8c1
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
248
diff
changeset
|
55 |
then one can change existing files (provide they are |
31a749eba8c1
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
248
diff
changeset
|
56 |
changeable), but one cannot create new files. If the read |
31a749eba8c1
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
248
diff
changeset
|
57 |
attribute is not set, one cannot search inside the directory |
31a749eba8c1
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
248
diff
changeset
|
58 |
(\pcode{ls -la} does not work) but one can access an existing |
31a749eba8c1
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
248
diff
changeset
|
59 |
file, provided one knows its name. Links to files never depend |
31a749eba8c1
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
248
diff
changeset
|
60 |
on the permission of the link, but the file they are pointing |
31a749eba8c1
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
248
diff
changeset
|
61 |
to. |
247
95e14b2dbc94
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
245
diff
changeset
|
62 |
|
249
31a749eba8c1
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
248
diff
changeset
|
63 |
While the above might sound already moderately complicated, |
31a749eba8c1
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
248
diff
changeset
|
64 |
the real complications with Unix-style file permissions |
31a749eba8c1
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
248
diff
changeset
|
65 |
involve the setuid and setgid attributes. For example the file |
247
95e14b2dbc94
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
245
diff
changeset
|
66 |
\pcode{microedit} in Line 5 has the setuid attribute set |
95e14b2dbc94
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
245
diff
changeset
|
67 |
(indicated by the \pcode{s} in place of the usual \pcode{x}). |
95e14b2dbc94
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
245
diff
changeset
|
68 |
The purpose of setuid and setgid is to solve the following |
95e14b2dbc94
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
245
diff
changeset
|
69 |
puzzle: The program \pcode{passwd} allows users to change |
95e14b2dbc94
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
245
diff
changeset
|
70 |
their passwords. Therefore \pcode{passwd} needs to have write |
95e14b2dbc94
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
245
diff
changeset
|
71 |
access to the file \pcode{/etc/passwd}. But this file cannot |
95e14b2dbc94
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
245
diff
changeset
|
72 |
be writable for every user, otherwise anyone can set anyone |
95e14b2dbc94
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
245
diff
changeset
|
73 |
else's password. So changing securely passwords cannot be |
95e14b2dbc94
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
245
diff
changeset
|
74 |
achieved with the simple Unix access rights discussed so far. |
95e14b2dbc94
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
245
diff
changeset
|
75 |
While this situation might look like an anomaly, it is in fact |
95e14b2dbc94
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
245
diff
changeset
|
76 |
an often occurring problem. For example looking at current |
95e14b2dbc94
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
245
diff
changeset
|
77 |
active processes with \pcode{/bin/ps} requires access to |
251
64e62d636737
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
249
diff
changeset
|
78 |
internal data structures of the operating system, which only |
64e62d636737
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
249
diff
changeset
|
79 |
root should be allowed to. In fact any of the following |
64e62d636737
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
249
diff
changeset
|
80 |
actions cannot be configured for single users, but need |
64e62d636737
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
249
diff
changeset
|
81 |
privileged root access |
247
95e14b2dbc94
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
245
diff
changeset
|
82 |
|
95e14b2dbc94
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
245
diff
changeset
|
83 |
\begin{itemize} |
95e14b2dbc94
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
245
diff
changeset
|
84 |
\item changing system databases (users, groups, routing tables |
95e14b2dbc94
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
245
diff
changeset
|
85 |
and so on) |
95e14b2dbc94
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
245
diff
changeset
|
86 |
\item opening a network port below 1024 |
95e14b2dbc94
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
245
diff
changeset
|
87 |
\item interacting with peripheral hardware, such as printers, |
95e14b2dbc94
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
245
diff
changeset
|
88 |
harddisk etc |
95e14b2dbc94
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
245
diff
changeset
|
89 |
\item overwriting operating system facilities, like |
95e14b2dbc94
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
245
diff
changeset
|
90 |
process scheduling and memory management |
95e14b2dbc94
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
245
diff
changeset
|
91 |
\end{itemize} |
95e14b2dbc94
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
245
diff
changeset
|
92 |
|
249
31a749eba8c1
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
248
diff
changeset
|
93 |
\noindent This will typically involve quite a lot of programs |
31a749eba8c1
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
248
diff
changeset
|
94 |
on a Unix system. I counted 90 programs with the setuid |
31a749eba8c1
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
248
diff
changeset
|
95 |
attribute set on my bog-standard Mac OSX system (including the |
251
64e62d636737
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
249
diff
changeset
|
96 |
program \pcode{/usr/bin/login} for example). The problem is |
64e62d636737
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
249
diff
changeset
|
97 |
that if there is a security problem with only one of them, be |
64e62d636737
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
249
diff
changeset
|
98 |
it a buffer overflow for example, then malicious users |
64e62d636737
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
249
diff
changeset
|
99 |
can gain root access (and for outside attackers it is much |
64e62d636737
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
249
diff
changeset
|
100 |
easier to take over a system). Unfortunately it is rather easy |
64e62d636737
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
249
diff
changeset
|
101 |
to make errors since the handling of elevating and dropping |
64e62d636737
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
249
diff
changeset
|
102 |
access rights in such programs rests entirely with the |
64e62d636737
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
249
diff
changeset
|
103 |
programmer. |
247
95e14b2dbc94
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
245
diff
changeset
|
104 |
|
251
64e62d636737
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
249
diff
changeset
|
105 |
The fundamental idea behind the setuid attribute is that a |
64e62d636737
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
249
diff
changeset
|
106 |
file with this attribute will be able to run not with the |
64e62d636737
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
249
diff
changeset
|
107 |
callers access rights, but with the rights of the owner of the |
64e62d636737
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
249
diff
changeset
|
108 |
file. So \pcode{/usr/bin/login} will always be running with |
64e62d636737
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
249
diff
changeset
|
109 |
root access rights, no matter who invokes this program. The |
64e62d636737
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
249
diff
changeset
|
110 |
problem is that this entails a rather complicated semantics of |
64e62d636737
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
249
diff
changeset
|
111 |
what the identity of a process (that runs the program) is. One |
249
31a749eba8c1
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
248
diff
changeset
|
112 |
would hope there is only one such ID, but in fact Unix |
31a749eba8c1
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
248
diff
changeset
|
113 |
distinguishes three(!): |
31a749eba8c1
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
248
diff
changeset
|
114 |
|
31a749eba8c1
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
248
diff
changeset
|
115 |
\begin{itemize} |
31a749eba8c1
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
248
diff
changeset
|
116 |
\item \emph{real identity}\\ |
31a749eba8c1
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
248
diff
changeset
|
117 |
This is the ID of the user who creates |
31a749eba8c1
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
248
diff
changeset
|
118 |
the process; can only be changed to something else by root. |
31a749eba8c1
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
248
diff
changeset
|
119 |
\item \emph{effective identity}\\ |
31a749eba8c1
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
248
diff
changeset
|
120 |
This is the ID that is used to |
31a749eba8c1
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
248
diff
changeset
|
121 |
grant or deny access to a resource; can be changed to either |
31a749eba8c1
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
248
diff
changeset
|
122 |
the real identity or saved identity by users, can be changed |
31a749eba8c1
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
248
diff
changeset
|
123 |
to anything by root. |
31a749eba8c1
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
248
diff
changeset
|
124 |
\item \emph{saved identity}\\ |
31a749eba8c1
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
248
diff
changeset
|
125 |
If the setuid bit set in a file then the process is started |
31a749eba8c1
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
248
diff
changeset
|
126 |
with the real identity of the user who started the program, |
31a749eba8c1
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
248
diff
changeset
|
127 |
and the identity of the owner of the program as effective and |
31a749eba8c1
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
248
diff
changeset
|
128 |
saved identity. If the setuid bit is not set, then the |
31a749eba8c1
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
248
diff
changeset
|
129 |
saved identity will be the real identity. |
31a749eba8c1
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
248
diff
changeset
|
130 |
\end{itemize} |
31a749eba8c1
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
248
diff
changeset
|
131 |
|
251
64e62d636737
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
249
diff
changeset
|
132 |
\noindent As an example consider again the \pcode{passwd} |
64e62d636737
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
249
diff
changeset
|
133 |
program. When started by, say the user \pcode{foo}, it has at |
64e62d636737
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
249
diff
changeset
|
134 |
the beginning the identities: |
249
31a749eba8c1
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
248
diff
changeset
|
135 |
|
31a749eba8c1
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
248
diff
changeset
|
136 |
\begin{itemize} |
31a749eba8c1
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
248
diff
changeset
|
137 |
\item \emph{real identity}: \pcode{foo}\\ |
31a749eba8c1
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
248
diff
changeset
|
138 |
\emph{effective identity}: \pcode{foo}\\ |
31a749eba8c1
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
248
diff
changeset
|
139 |
\emph{saved identity}: \pcode{root} |
31a749eba8c1
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
248
diff
changeset
|
140 |
\end{itemize} |
31a749eba8c1
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
248
diff
changeset
|
141 |
|
31a749eba8c1
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
248
diff
changeset
|
142 |
\noindent It is then allowed to change the effective |
31a749eba8c1
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
248
diff
changeset
|
143 |
identity to the saved identity to have |
31a749eba8c1
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
248
diff
changeset
|
144 |
|
31a749eba8c1
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
248
diff
changeset
|
145 |
\begin{itemize} |
31a749eba8c1
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
248
diff
changeset
|
146 |
\item \emph{real identity}: \pcode{foo}\\ |
31a749eba8c1
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
248
diff
changeset
|
147 |
\emph{effective identity}: \pcode{root}\\ |
31a749eba8c1
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
248
diff
changeset
|
148 |
\emph{saved identity}: \pcode{root} |
31a749eba8c1
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
248
diff
changeset
|
149 |
\end{itemize} |
31a749eba8c1
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
248
diff
changeset
|
150 |
|
31a749eba8c1
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
248
diff
changeset
|
151 |
\noindent It can now read and write the file |
251
64e62d636737
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
249
diff
changeset
|
152 |
\pcode{/etc/passwd}. After finishing the job it is supposed to |
64e62d636737
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
249
diff
changeset
|
153 |
drop the effective identity back to \pcode{foo}. This is the |
64e62d636737
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
249
diff
changeset
|
154 |
responsibility of the programmers who wrote \pcode{passwd}. |
64e62d636737
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
249
diff
changeset
|
155 |
Notice that the effective identity is not automatically |
64e62d636737
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
249
diff
changeset
|
156 |
elevated to \pcode{root}, but the program itself must make |
64e62d636737
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
249
diff
changeset
|
157 |
this change. After it has done the work, the effective |
64e62d636737
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
249
diff
changeset
|
158 |
identity should go back to the real identity. |
249
31a749eba8c1
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
248
diff
changeset
|
159 |
|
31a749eba8c1
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
248
diff
changeset
|
160 |
|
251
64e62d636737
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
249
diff
changeset
|
161 |
Despite these complicated semantics, Unix-style access control |
64e62d636737
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
249
diff
changeset
|
162 |
is of no use in a number of situations. For example it cannot |
64e62d636737
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
249
diff
changeset
|
163 |
be used to exclude some subset of people, but otherwise have |
64e62d636737
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
249
diff
changeset
|
164 |
files readable by everybody else (say you want to restrict |
64e62d636737
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
249
diff
changeset
|
165 |
access to a file such that your office mates cannot access |
64e62d636737
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
249
diff
changeset
|
166 |
a file). You could try setting the group of the file to this |
64e62d636737
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
249
diff
changeset
|
167 |
subset and then restrict access accordingly. But this does not |
64e62d636737
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
249
diff
changeset
|
168 |
help, because users can drop membership in groups. |
248
51fa0549fc8f
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
247
diff
changeset
|
169 |
|
247
95e14b2dbc94
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
245
diff
changeset
|
170 |
\subsubsection*{Secrecy and Integrity} |
245
630a3dd1efda
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff
changeset
|
171 |
|
630a3dd1efda
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff
changeset
|
172 |
|
630a3dd1efda
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff
changeset
|
173 |
|
248
51fa0549fc8f
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
247
diff
changeset
|
174 |
\subsubsection*{Further Information} |
51fa0549fc8f
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
247
diff
changeset
|
175 |
|
51fa0549fc8f
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
247
diff
changeset
|
176 |
If you want to know more about the intricacies of the |
51fa0549fc8f
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
247
diff
changeset
|
177 |
``simple'' Unix access control system you might find the |
51fa0549fc8f
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
247
diff
changeset
|
178 |
relatively readable paper about ``Setuid Demystified'' |
51fa0549fc8f
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
247
diff
changeset
|
179 |
useful. |
51fa0549fc8f
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
247
diff
changeset
|
180 |
|
51fa0549fc8f
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
247
diff
changeset
|
181 |
\begin{center}\small |
249
31a749eba8c1
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
248
diff
changeset
|
182 |
\url{http://www.cs.berkeley.edu/~daw/papers/setuid-usenix02.pdf} |
248
51fa0549fc8f
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
247
diff
changeset
|
183 |
\end{center} |
51fa0549fc8f
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
247
diff
changeset
|
184 |
|
51fa0549fc8f
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
247
diff
changeset
|
185 |
|
245
630a3dd1efda
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff
changeset
|
186 |
\end{document} |
630a3dd1efda
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff
changeset
|
187 |
|
630a3dd1efda
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff
changeset
|
188 |
%%% Local Variables: |
630a3dd1efda
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff
changeset
|
189 |
%%% mode: latex |
630a3dd1efda
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff
changeset
|
190 |
%%% TeX-master: t |
630a3dd1efda
updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff
changeset
|
191 |
%%% End: |