Skip to content

Commit

Permalink
pam-selinux 1.4.0-3 update
Browse files Browse the repository at this point in the history
  • Loading branch information
fishilico committed Aug 20, 2020
1 parent 92a949f commit b3e2b77
Show file tree
Hide file tree
Showing 7 changed files with 218 additions and 44 deletions.
30 changes: 20 additions & 10 deletions .SRCINFO
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
pkgbase = pam-selinux
pkgdesc = SELinux aware PAM (Pluggable Authentication Modules) library
pkgver = 1.3.1
pkgrel = 1
pkgver = 1.4.0
pkgrel = 3
url = http://linux-pam.org
arch = x86_64
groups = selinux
Expand All @@ -11,29 +11,39 @@ pkgbase = pam-selinux
makedepends = docbook-xml>=4.4
makedepends = docbook-xsl
depends = glibc
depends = cracklib
depends = libtirpc
depends = pambase-selinux
depends = audit
depends = libselinux
provides = pam=1.3.1-1
provides = selinux-pam=1.3.1-1
optdepends = pambase-selinux: SELinux aware base PAM configuration
provides = pam=1.4.0-3
provides = selinux-pam=1.4.0-3
conflicts = pam
conflicts = selinux-pam
options = !emptydirs
backup = etc/security/access.conf
backup = etc/security/faillock.conf
backup = etc/security/group.conf
backup = etc/security/limits.conf
backup = etc/security/namespace.conf
backup = etc/security/namespace.init
backup = etc/security/pam_env.conf
backup = etc/security/time.conf
backup = etc/default/passwd
backup = etc/environment
source = https://github.com/linux-pam/linux-pam/releases/download/v1.3.1/Linux-PAM-1.3.1.tar.xz
source = https://github.com/linux-pam/linux-pam/releases/download/v1.3.1/Linux-PAM-1.3.1.tar.xz.asc
source = https://github.com/linux-pam/linux-pam/releases/download/v1.4.0/Linux-PAM-1.4.0.tar.xz
source = https://github.com/linux-pam/linux-pam/releases/download/v1.4.0/Linux-PAM-1.4.0.tar.xz.asc
source = 395915dae1571e10e2766c999974de864655ea3a.patch
source = af0faf666c5008e54dfe43684f210e3581ff1bca.patch
source = 0e9b286afe1224b91ff00936058b084ad4b776e4.patch
source = pam.tmpfiles
validpgpkeys = 8C6BFD92EE0F42EDF91A6A736D1A7F052E5924BB
md5sums = 558ff53b0fc0563ca97f79e911822165
md5sums = SKIP
validpgpkeys = 296D6F29A020808E8717A8842DB5BD89A340AEB7
sha256sums = cd6d928c51e64139be3bdb38692c68183a509b83d4f2c221024ccd4bcddfd034
sha256sums = SKIP
sha256sums = cd2440d7bec55fa91e499060c0bf248f4fd20e7a0ef613eb7a06ee083f7ce21b
sha256sums = ac3e1d307756f5975587a7846500414c02d2b60acb271017b9c7aa6f47c89875
sha256sums = 68f81b67dde5ee6003524b6b14e2d6f27edcfc0a2bde4c55a1cacbc6e299c207
sha256sums = 5631f224e90c4f0459361c2a5b250112e3a91ba849754bb6f67d69d683a2e5ac

pkgname = pam-selinux

31 changes: 31 additions & 0 deletions 0e9b286afe1224b91ff00936058b084ad4b776e4.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
From 0e9b286afe1224b91ff00936058b084ad4b776e4 Mon Sep 17 00:00:00 2001
From: ikerexxe <ipedrosa@redhat.com>
Date: Tue, 16 Jun 2020 14:44:04 +0200
Subject: [PATCH] pam_usertype: avoid determining if user exists

Taking a look at the time for the password prompt to appear it was
possible to determine if a user existed in a system. Solved it by
matching the runtime until the password prompt was shown by always
checking the password hash for an existing and a non-existing user.

Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1629598
---
modules/pam_usertype/pam_usertype.c | 3 +++
1 file changed, 3 insertions(+)

diff --git a/modules/pam_usertype/pam_usertype.c b/modules/pam_usertype/pam_usertype.c
index 2807c306..d03b73b5 100644
--- a/modules/pam_usertype/pam_usertype.c
+++ b/modules/pam_usertype/pam_usertype.c
@@ -139,8 +139,11 @@ pam_usertype_get_uid(struct pam_usertype_opts *opts,
"error retrieving information about user %s", username);
}

+ pam_modutil_getpwnam(pamh, "root");
+
return PAM_USER_UNKNOWN;
}
+ pam_modutil_getpwnam(pamh, "pam_usertype_non_existent:");

*_uid = pwd->pw_uid;

47 changes: 47 additions & 0 deletions 395915dae1571e10e2766c999974de864655ea3a.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
From 395915dae1571e10e2766c999974de864655ea3a Mon Sep 17 00:00:00 2001
From: ikerexxe <ipedrosa@redhat.com>
Date: Mon, 15 Jun 2020 09:52:11 +0200
Subject: [PATCH] pam_faillock: change /run/faillock/$USER permissions to 0660

Nowadays, /run/faillock/$USER files have user:root ownership and 0600
permissions. This forces the process that writes to these files to have
CAP_DAC_OVERRIDE capabilites. Just by changing the permissions to 0660
the capability can be removed, which leads to a more secure system.

Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1661822
---
modules/pam_faillock/faillock.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)

diff --git a/modules/pam_faillock/faillock.c b/modules/pam_faillock/faillock.c
index e492f5f9..4ea94cbe 100644
--- a/modules/pam_faillock/faillock.c
+++ b/modules/pam_faillock/faillock.c
@@ -76,7 +76,7 @@ open_tally (const char *dir, const char *user, uid_t uid, int create)
flags |= O_CREAT;
}

- fd = open(path, flags, 0600);
+ fd = open(path, flags, 0660);

free(path);

@@ -88,6 +88,18 @@ open_tally (const char *dir, const char *user, uid_t uid, int create)
if (st.st_uid != uid) {
ignore_return(fchown(fd, uid, -1));
}
+
+ /*
+ * If umask is set to 022, as will probably in most systems, then the
+ * group will not be able to write to the file. So, change the file
+ * permissions just in case.
+ * Note: owners of this file are user:root, so if the permissions are
+ * not changed the root process writing to this file will require
+ * CAP_DAC_OVERRIDE.
+ */
+ if (!(st.st_mode & S_IWGRP)) {
+ ignore_return(fchmod(fd, 0660));
+ }
}
}

48 changes: 34 additions & 14 deletions PKGBUILD
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
# $Id$
# Maintainer: Tobias Powalowski <tpowa@archlinux.org>
# Contributor: judd <jvinet@zeroflux.org>
# SELinux Maintainer: Nicolas Iooss (nicolas <dot> iooss <at> m4x <dot> org)
Expand All @@ -9,45 +8,66 @@
# If you want to help keep it up to date, please open a Pull Request there.

pkgname=pam-selinux
pkgver=1.3.1
pkgrel=1
pkgver=1.4.0
pkgrel=3
pkgdesc="SELinux aware PAM (Pluggable Authentication Modules) library"
arch=('x86_64')
license=('GPL2')
url="http://linux-pam.org"
depends=('glibc' 'cracklib' 'libtirpc' 'pambase-selinux' 'libselinux')
depends=('glibc' 'libtirpc' 'pambase-selinux' 'audit' 'libselinux')
makedepends=('flex' 'w3m' 'docbook-xml>=4.4' 'docbook-xsl')
optdepends=('pambase-selinux: SELinux aware base PAM configuration')
conflicts=("${pkgname/-selinux}" "selinux-${pkgname/-selinux}")
provides=("${pkgname/-selinux}=${pkgver}-${pkgrel}"
"selinux-${pkgname/-selinux}=${pkgver}-${pkgrel}")
backup=(etc/security/{access.conf,group.conf,limits.conf,namespace.conf,namespace.init,pam_env.conf,time.conf} etc/default/passwd etc/environment)
backup=(etc/security/{access.conf,faillock.conf,group.conf,limits.conf,namespace.conf,namespace.init,pam_env.conf,time.conf} etc/environment)
groups=('selinux')
source=(https://github.com/linux-pam/linux-pam/releases/download/v$pkgver/Linux-PAM-$pkgver.tar.xz
https://github.com/linux-pam/linux-pam/releases/download/v$pkgver/Linux-PAM-$pkgver.tar.xz.asc)
https://github.com/linux-pam/linux-pam/releases/download/v$pkgver/Linux-PAM-$pkgver.tar.xz.asc
395915dae1571e10e2766c999974de864655ea3a.patch
af0faf666c5008e54dfe43684f210e3581ff1bca.patch
0e9b286afe1224b91ff00936058b084ad4b776e4.patch
${pkgname/-selinux}.tmpfiles)
validpgpkeys=(
'8C6BFD92EE0F42EDF91A6A736D1A7F052E5924BB' # Thorsten Kukuk
'296D6F29A020808E8717A8842DB5BD89A340AEB7' #Dimitry V. Levin <ldv@altlinux.org>
)

md5sums=('558ff53b0fc0563ca97f79e911822165'
'SKIP')
sha256sums=('cd6d928c51e64139be3bdb38692c68183a509b83d4f2c221024ccd4bcddfd034'
'SKIP'
'cd2440d7bec55fa91e499060c0bf248f4fd20e7a0ef613eb7a06ee083f7ce21b'
'ac3e1d307756f5975587a7846500414c02d2b60acb271017b9c7aa6f47c89875'
'68f81b67dde5ee6003524b6b14e2d6f27edcfc0a2bde4c55a1cacbc6e299c207'
'5631f224e90c4f0459361c2a5b250112e3a91ba849754bb6f67d69d683a2e5ac')

options=('!emptydirs')

prepare() {
cd Linux-PAM-$pkgver
patch -p1 -i ../395915dae1571e10e2766c999974de864655ea3a.patch
patch -p1 -i ../af0faf666c5008e54dfe43684f210e3581ff1bca.patch
patch -p1 -i ../0e9b286afe1224b91ff00936058b084ad4b776e4.patch
}

build() {
cd $srcdir/Linux-PAM-$pkgver
cd Linux-PAM-$pkgver
# Enable building deprecated pam_tally2.so module (--enable-tally2) in order
# to smooth the transition to pam_faillock.so
# https://github.com/archlinuxhardened/selinux/issues/41#issuecomment-668202328
./configure --libdir=/usr/lib --sbindir=/usr/bin --disable-db \
--enable-selinux
--enable-selinux --enable-tally2
make
}

package() {
cd $srcdir/Linux-PAM-$pkgver
make DESTDIR=$pkgdir SCONFIGDIR=/etc/security install
install -Dm 644 ${pkgname/-selinux}.tmpfiles "$pkgdir"/usr/lib/tmpfiles.d/${pkgname/-selinux}.conf
cd Linux-PAM-$pkgver
make DESTDIR="$pkgdir" SCONFIGDIR=/etc/security install

# set unix_chkpwd uid
chmod +s $pkgdir/usr/bin/unix_chkpwd
chmod +s "$pkgdir"/usr/bin/unix_chkpwd

# remove doc which is not used anymore
# FS #40749
rm $pkgdir/usr/share/doc/Linux-PAM/sag-pam_userdb.html
rm "$pkgdir"/usr/share/doc/Linux-PAM/sag-pam_userdb.html
}
85 changes: 85 additions & 0 deletions af0faf666c5008e54dfe43684f210e3581ff1bca.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
From af0faf666c5008e54dfe43684f210e3581ff1bca Mon Sep 17 00:00:00 2001
From: ikerexxe <ipedrosa@redhat.com>
Date: Tue, 16 Jun 2020 14:32:36 +0200
Subject: [PATCH] pam_unix: avoid determining if user exists

Taking a look at the time for the password prompt to appear it was
possible to determine if a user existed in a system. Solved it by
matching the runtime until the password prompt was shown by always
checking the password hash for an existing and a non-existing user.

Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1629598
---
modules/pam_unix/passverify.c | 6 ++++++
modules/pam_unix/support.c | 33 ++++++++++++++++++++++++++-------
2 files changed, 32 insertions(+), 7 deletions(-)

diff --git a/modules/pam_unix/passverify.c b/modules/pam_unix/passverify.c
index a571b4f7..7455eae6 100644
--- a/modules/pam_unix/passverify.c
+++ b/modules/pam_unix/passverify.c
@@ -1096,6 +1096,12 @@ helper_verify_password(const char *name, const char *p, int nullok)
if (pwd == NULL || hash == NULL) {
helper_log_err(LOG_NOTICE, "check pass; user unknown");
retval = PAM_USER_UNKNOWN;
+ } else if (p[0] == '\0' && nullok) {
+ if (hash[0] == '\0') {
+ retval = PAM_SUCCESS;
+ } else {
+ retval = PAM_AUTH_ERR;
+ }
} else {
retval = verify_pwd_hash(p, hash, nullok);
}
diff --git a/modules/pam_unix/support.c b/modules/pam_unix/support.c
index 41db1f04..dc67238c 100644
--- a/modules/pam_unix/support.c
+++ b/modules/pam_unix/support.c
@@ -601,6 +601,8 @@ _unix_blankpasswd (pam_handle_t *pamh, unsigned long long ctrl, const char *name
char *salt = NULL;
int daysleft;
int retval;
+ int execloop = 1;
+ int nonexistent = 1;

D(("called"));

@@ -624,14 +626,31 @@ _unix_blankpasswd (pam_handle_t *pamh, unsigned long long ctrl, const char *name

/* UNIX passwords area */

- retval = get_pwd_hash(pamh, name, &pwd, &salt);
+ /*
+ * Execute this loop twice: one checking the password hash of an existing
+ * user and another one for a non-existing user. This way the runtimes
+ * are equal, making it more difficult to differentiate existing from
+ * non-existing users.
+ */
+ while (execloop) {
+ retval = get_pwd_hash(pamh, name, &pwd, &salt);

- if (retval == PAM_UNIX_RUN_HELPER) {
- /* salt will not be set here so we can return immediately */
- if (_unix_run_helper_binary(pamh, NULL, ctrl, name) == PAM_SUCCESS)
- return 1;
- else
- return 0;
+ if (retval == PAM_UNIX_RUN_HELPER) {
+ execloop = 0;
+ if(nonexistent) {
+ get_pwd_hash(pamh, "pam_unix_non_existent:", &pwd, &salt);
+ }
+ /* salt will not be set here so we can return immediately */
+ if (_unix_run_helper_binary(pamh, NULL, ctrl, name) == PAM_SUCCESS)
+ return 1;
+ else
+ return 0;
+ } else if (retval == PAM_USER_UNKNOWN) {
+ name = "root";
+ nonexistent = 0;
+ } else {
+ execloop = 0;
+ }
}

/* Does this user have a password? */
1 change: 1 addition & 0 deletions pam.tmpfiles
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
d /run/faillock 0755 root root -
20 changes: 0 additions & 20 deletions pam_unix2-glibc216.patch

This file was deleted.

0 comments on commit b3e2b77

Please sign in to comment.