forked from pool/pam_mount
291 lines
15 KiB
Plaintext
291 lines
15 KiB
Plaintext
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/pam_mount-0.32/doc/pam_mount.8 new/pam_mount-0.33/doc/pam_mount.8
|
||
--- old/pam_mount-0.32/doc/pam_mount.8 2007-09-09 14:10:23.000000000 +0200
|
||
+++ new/pam_mount-0.33/doc/pam_mount.8 2008-02-06 00:46:20.000000000 +0100
|
||
@@ -24,9 +24,8 @@
|
||
in an automount/supermount config file. This is also necessary for securing
|
||
encrypted filesystems.
|
||
.PP
|
||
-pam_mount "understands" SMB, NCP, and any type of filesystem that can be
|
||
-mounted using the standard mount command. If someone has a particular need for
|
||
-a different filesystem, feel free to ask me to include it and send me patches.
|
||
+pam_mount can mount any filesystem the kernel supports, and has supports the
|
||
+userspace helpers for SMB, CIFS, NCP, davfs, FUSE, and crypto mounts.
|
||
.PP
|
||
If you intend to use pam_mount to protect volumes on your computer using an
|
||
encrypted filesystem system, please know that there are many other issues you
|
||
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/pam_mount-0.32/doc/pam_mount.txt new/pam_mount-0.33/doc/pam_mount.txt
|
||
--- old/pam_mount-0.32/doc/pam_mount.txt 2007-09-09 14:10:23.000000000 +0200
|
||
+++ new/pam_mount-0.33/doc/pam_mount.txt 2008-02-06 00:46:20.000000000 +0100
|
||
@@ -27,26 +27,25 @@
|
||
remote volume in /etc/fstab or in an automount/supermount config
|
||
file. This is also necessary for securing encrypted filesystems.
|
||
|
||
- pam_mount "understands" SMB, NCP, and any type of filesystem that can
|
||
- be mounted using the standard mount command. If someone has a particu‐
|
||
- lar need for a different filesystem, feel free to ask me to include it
|
||
- and send me patches.
|
||
-
|
||
- If you intend to use pam_mount to protect volumes on your computer
|
||
- using an encrypted filesystem system, please know that there are many
|
||
- other issues you need to consider in order to protect your data. For
|
||
- example, you probably want to disable or encrypt your swap partition
|
||
+ pam_mount can mount any filesystem the kernel supports, and has sup‐
|
||
+ ports the userspace helpers for SMB, CIFS, NCP, davfs, FUSE, and crypto
|
||
+ mounts.
|
||
+
|
||
+ If you intend to use pam_mount to protect volumes on your computer
|
||
+ using an encrypted filesystem system, please know that there are many
|
||
+ other issues you need to consider in order to protect your data. For
|
||
+ example, you probably want to disable or encrypt your swap partition
|
||
(the cryptoswap can help you do this). Do not assume a system is secure
|
||
without carefully considering potential threats.
|
||
|
||
NASTY DETAILS
|
||
- The primary configuration file for the pam_mount module is
|
||
- pam_mount.conf.xml. On most platforms this file is read from
|
||
- /etc/security/pam_mount.conf.xml. On OpenBSD pam_mount reads its con‐
|
||
- figuration file from /etc/pam_mount.conf.xml. pam_mount.conf.xml con‐
|
||
+ The primary configuration file for the pam_mount module is
|
||
+ pam_mount.conf.xml. On most platforms this file is read from
|
||
+ /etc/security/pam_mount.conf.xml. On OpenBSD pam_mount reads its con‐
|
||
+ figuration file from /etc/pam_mount.conf.xml. pam_mount.conf.xml con‐
|
||
tains many comments documenting its use.
|
||
|
||
- In addition, you must include two entries in the system's applicable
|
||
+ In addition, you must include two entries in the system's applicable
|
||
/etc/pam.d/SERVICE config files, as the following example shows:
|
||
|
||
auth required pam_securetty.so
|
||
@@ -61,14 +60,14 @@
|
||
+++ session optional pam_mount.so
|
||
|
||
When "sufficient" is used in the second column, you must make sure that
|
||
- pam_mount is added before this entry. Otherwise pam_mount will not get
|
||
- executed should a previous PAM module succeed. Also be aware of the
|
||
- "include" statements. These make PAM look into the specified file. If
|
||
+ pam_mount is added before this entry. Otherwise pam_mount will not get
|
||
+ executed should a previous PAM module succeed. Also be aware of the
|
||
+ "include" statements. These make PAM look into the specified file. If
|
||
there is a "sufficient" statement, then the pam_mount entry must either
|
||
be in the included file before the "sufficient" statement or before the
|
||
"include" statement.
|
||
|
||
- If you use pam_ldap, pam_winbind, or any other authentication services
|
||
+ If you use pam_ldap, pam_winbind, or any other authentication services
|
||
that make use of PAM's sufficient keyword then model your configuration
|
||
on the following:
|
||
|
||
@@ -81,17 +80,17 @@
|
||
|
||
This allows the following:
|
||
|
||
- 1. pam_mount will prompt for a password and export it to the PAM sys‐
|
||
+ 1. pam_mount will prompt for a password and export it to the PAM sys‐
|
||
tem.
|
||
|
||
- 2. pam_ldap will use the password from the PAM system to try and
|
||
+ 2. pam_ldap will use the password from the PAM system to try and
|
||
authenticate the user. If this succedes, the user will be authenti‐
|
||
cated. If it fails, pam_unix will try to authenticate.
|
||
|
||
- 3. pam_unix will try to authenticate the user if pam_ldap fails. If
|
||
+ 3. pam_unix will try to authenticate the user if pam_ldap fails. If
|
||
pam_unix fails, then the authentication will be refused.
|
||
|
||
- Alternatively, the following is possible (thanks to Andrew Morgan for
|
||
+ Alternatively, the following is possible (thanks to Andrew Morgan for
|
||
the hint!):
|
||
|
||
auth [success=2 default=ignore] pam_unix2.so
|
||
@@ -99,20 +98,20 @@
|
||
auth requisite pam_deny.so
|
||
auth optional pam_mount.so use_first_pass
|
||
|
||
- It may seem odd, but the first three lines will make it so that at
|
||
- least one of pam_unix2 or pam_ldap has to succeed. As you can see,
|
||
- pam_mount will be run after successful authentification with theses
|
||
+ It may seem odd, but the first three lines will make it so that at
|
||
+ least one of pam_unix2 or pam_ldap has to succeed. As you can see,
|
||
+ pam_mount will be run after successful authentification with theses
|
||
subsystems.
|
||
|
||
- If your volume has a different password than your system account, then
|
||
- encrypt the password to the volume you wish mounted using your system
|
||
- password as the key and store it somewhere on your system's local
|
||
+ If your volume has a different password than your system account, then
|
||
+ encrypt the password to the volume you wish mounted using your system
|
||
+ password as the key and store it somewhere on your system's local
|
||
filesystem. pam_mount supports transparently decrypting this filesystem
|
||
key, as long as the cipher used is supported by openssl. Given:
|
||
|
||
sk system key, the key or password used to log into the system
|
||
|
||
- fsk filesystem key, the key that allows you to use the filesystem
|
||
+ fsk filesystem key, the key that allows you to use the filesystem
|
||
you wish pam_mount to mount for you
|
||
|
||
E and D
|
||
@@ -121,48 +120,48 @@
|
||
efsk encrypted filesystem key, efsk = E_sk (fsk), stored somewhere on
|
||
the local filesystem (ie: /home/user.key)
|
||
|
||
- pam_mount will read efsk from the local filesystem, perform fsk = D_sk
|
||
- (efsk) and use fsk to mount the filesystem. If you change your system
|
||
- password, simply regenerate efsk using efsk = E_sk (fsk). If you want
|
||
- to mount this volume by hand, use something like openssl enc -d
|
||
- -aes-256-ecb -in /home/user.key | mount -p0 /home/user. More informa‐
|
||
+ pam_mount will read efsk from the local filesystem, perform fsk = D_sk
|
||
+ (efsk) and use fsk to mount the filesystem. If you change your system
|
||
+ password, simply regenerate efsk using efsk = E_sk (fsk). If you want
|
||
+ to mount this volume by hand, use something like openssl enc -d
|
||
+ -aes-256-ecb -in /home/user.key | mount -p0 /home/user. More informa‐
|
||
tion about this technique is included in pam_mount.conf.xml.
|
||
|
||
- A script named mkehd is provided with pam_mount to help create
|
||
- encrypted home directories. If you have an entry for a user using
|
||
- encrypted home directories in pam_mount.conf.xml, mkehd will create
|
||
+ A script named mkehd is provided with pam_mount to help create
|
||
+ encrypted home directories. If you have an entry for a user using
|
||
+ encrypted home directories in pam_mount.conf.xml, mkehd will create
|
||
necessary filesystem images and possibly encrypted filesystem keys.
|
||
|
||
- Individual users may define additional volumes to mount if allowed by
|
||
- pam_mount.conf.xml (usually ~/.pam_mount.conf.xml). The volume keyword
|
||
+ Individual users may define additional volumes to mount if allowed by
|
||
+ pam_mount.conf.xml (usually ~/.pam_mount.conf.xml). The volume keyword
|
||
is the only valid keyword in these per-user configuration files. If the
|
||
luserconf parameter is set in pam_mount.conf.xml, allowing user-defined
|
||
- volume, then users may mount and unmount any volume they own at any
|
||
- mount point they own. On some filesystem configurations this may be a
|
||
- security flaw so user-defined volumes are not allowed by the example
|
||
+ volume, then users may mount and unmount any volume they own at any
|
||
+ mount point they own. On some filesystem configurations this may be a
|
||
+ security flaw so user-defined volumes are not allowed by the example
|
||
pam_mount.conf.xml distributed with pam_mount.
|
||
|
||
- In general, you will leave all the first (general) parameters as pro‐
|
||
- vided by default. You only have to provide the user/volume list in the
|
||
+ In general, you will leave all the first (general) parameters as pro‐
|
||
+ vided by default. You only have to provide the user/volume list in the
|
||
end of the file, following the examples.
|
||
|
||
- To ensure that your system and, possibly, the remote server are all
|
||
+ To ensure that your system and, possibly, the remote server are all
|
||
properly configured, you should try to mount all or some of the volumes
|
||
by hand, using the same commands and mount points provided in
|
||
pam_mount.conf.xml. This will save you a lot of grief, since it is more
|
||
difficult to debug the mounting process via pam_mount.
|
||
|
||
- If you can mount the volumes by hand but it is not happening via
|
||
- pam_mount, you may want to enable the "debug" option in
|
||
+ If you can mount the volumes by hand but it is not happening via
|
||
+ pam_mount, you may want to enable the "debug" option in
|
||
pam_mount.conf.xml to see what is happening.
|
||
|
||
- Verify if the user owns the mount point and has sufficient permissions
|
||
- over that. pam_mount will verify this and will refuse to mount the
|
||
+ Verify if the user owns the mount point and has sufficient permissions
|
||
+ over that. pam_mount will verify this and will refuse to mount the
|
||
remote volume if the user does not own that directory.
|
||
|
||
- If pam_mount is having trouble unmounting volumes upon logging out,
|
||
- enable the debug variable and check the lsof variable in
|
||
- pam_mount.conf.xml. This causes pam_mount to run lsof upon logging out
|
||
+ If pam_mount is having trouble unmounting volumes upon logging out,
|
||
+ enable the debug variable and check the lsof variable in
|
||
+ pam_mount.conf.xml. This causes pam_mount to run lsof upon logging out
|
||
and write lsof's output to the system's logs.
|
||
|
||
AUTHORS
|
||
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/pam_mount-0.32/Makefile.am new/pam_mount-0.33/Makefile.am
|
||
--- old/pam_mount-0.32/Makefile.am 2007-09-26 18:36:28.000000000 +0200
|
||
+++ new/pam_mount-0.33/Makefile.am 2008-02-06 00:46:20.000000000 +0100
|
||
@@ -23,3 +23,6 @@
|
||
|
||
AUTOMAKE_OPTIONS = foreign subdir-objects
|
||
SUBDIRS = config doc scripts src
|
||
+
|
||
+install-data-hook:
|
||
+ mkdir -p ${DESTDIR}${localstatedir}/run/pam_mount;
|
||
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/pam_mount-0.32/scripts/mount.crypt new/pam_mount-0.33/scripts/mount.crypt
|
||
--- old/pam_mount-0.32/scripts/mount.crypt 2007-10-20 16:57:03.000000000 +0200
|
||
+++ new/pam_mount-0.33/scripts/mount.crypt 2008-02-06 00:46:20.000000000 +0100
|
||
@@ -111,7 +111,7 @@
|
||
(keyfile)
|
||
keyfile="$VAL";;
|
||
(loop)
|
||
- if ! losetup "$DEVICE" &>/dev/null; then
|
||
+ if [ "`stat --format=\"%t\" \"$DEVICE\"`" == 7 ]; then
|
||
LOOP="true";
|
||
fi;
|
||
;;
|
||
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/pam_mount-0.32/src/mount.c new/pam_mount-0.33/src/mount.c
|
||
--- old/pam_mount-0.32/src/mount.c 2007-12-06 23:05:08.000000000 +0100
|
||
+++ new/pam_mount-0.33/src/mount.c 2008-02-06 02:13:15.000000000 +0100
|
||
@@ -397,6 +397,13 @@
|
||
}
|
||
hmc_strcat(&ret, ",");
|
||
}
|
||
+
|
||
+ if (*ret != '\0')
|
||
+ /*
|
||
+ * When string is not empty, there is always at least one
|
||
+ * comma -- nuke it. */
|
||
+ ret[hmc_length(ret)-1] = '\0';
|
||
+
|
||
return ret;
|
||
}
|
||
static void log_pm_input(const struct config *const config,
|
||
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/pam_mount-0.32/src/pam_mount.c new/pam_mount-0.33/src/pam_mount.c
|
||
--- old/pam_mount-0.32/src/pam_mount.c 2007-12-01 13:34:59.000000000 +0100
|
||
+++ new/pam_mount-0.33/src/pam_mount.c 2008-02-06 00:45:50.000000000 +0100
|
||
@@ -96,8 +96,10 @@
|
||
Args.auth_type = SOFT_TRY_PASS;
|
||
else if (strcmp("nullok", argv[i]) == 0)
|
||
Args.nullok = true;
|
||
+ else if (strcmp("debug", argv[i]) == 0)
|
||
+ Debug = true;
|
||
else
|
||
- w4rn("bad pam_mount option\n");
|
||
+ w4rn("bad pam_mount option \"%s\"\n", argv[i]);
|
||
}
|
||
return;
|
||
}
|
||
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/pam_mount-0.32/src/rdconf1.c new/pam_mount-0.33/src/rdconf1.c
|
||
--- old/pam_mount-0.32/src/rdconf1.c 2007-12-06 23:05:08.000000000 +0100
|
||
+++ new/pam_mount-0.33/src/rdconf1.c 2008-02-06 00:45:50.000000000 +0100
|
||
@@ -727,9 +727,13 @@
|
||
}
|
||
|
||
/* realloc */
|
||
- config->volume = xrealloc(config->volume,
|
||
- sizeof(struct vol) * (config->volcount + 1));
|
||
- vpt = &config->volume[config->volcount++];
|
||
+ vpt = xrealloc(config->volume, sizeof(struct vol) *
|
||
+ (config->volcount + 1));
|
||
+ if (vpt == NULL)
|
||
+ return strerror(errno);
|
||
+
|
||
+ config->volume = vpt;
|
||
+ vpt = &config->volume[config->volcount];
|
||
memset(vpt, 0, sizeof(*vpt));
|
||
|
||
vpt->globalconf = config->level == CONTEXT_GLOBAL;
|
||
@@ -737,6 +741,8 @@
|
||
vpt->type = CMD_LCLMOUNT;
|
||
vpt->options = HXbtree_init(HXBT_MAP | HXBT_CKEY | HXBT_CDATA |
|
||
HXBT_SCMP | HXBT_CID);
|
||
+ if (vpt->options == NULL)
|
||
+ return strerror(errno);
|
||
|
||
/* [1] */
|
||
strncpy(vpt->fstype, attr->fstype, sizeof(vpt->fstype));
|
||
@@ -793,6 +799,7 @@
|
||
|
||
/* expandconfig() will set this later */
|
||
vpt->used_wildcard = 0;
|
||
+ ++config->volcount;
|
||
return NULL;
|
||
|
||
notforme:
|