[prev in list] [next in list] [prev in thread] [next in thread] 

List:       pam-list
Subject:    PAM authentification for apache
From:       "Stefan-W. Hahn" <stefan.hahn () s-hahn ! de>
Date:       2001-02-14 20:46:24
[Download RAW message or body]

Hi folks,

I'm using Debian potato (r2.2) with PAM-support v0.72.
For authenticating against apache (v1.3.9) I would like to
use PAM (libapache-mod-auth v0.8.5). 
I installed the mentioned modules and configured 
/etc/pam.d/hhtpd in the following manner:

auth	  required	  pam_unix_auth.so shadow audit
account	  required  	  pam_unix_acct.so shadow audit
password  required        pam_unix_passwd.so shadow audit

The configuration in apache looks like:
- the pam modules is loaded:
  LoadModule pam_auth_module /usr/lib/apache/1.3/mod_auth_pam.so
- the secured site is declared as:

  Alias /secure/ "/home/secure/"

  <Directory "/home/secure">
    Options Indexes FollowSymlinks
    AllowOverride AuthConfig
    AuthType Basic
    AuthName "====== secure user area ======"
    AuthAuthoritative on
    AuthPAM_Enabled on
    AuthPAM_FallThrough off
    require group projekte
    require user doedel
    Order allow,deny
    Allow from all
  </Directory>

When going to the site http://localhost/secure/ my netscape (v4.7)
asks me my for username and password. Using an apropriet user/password
apache rejects the connection.

The logging in /var/log/auth.log says:
 PAM_unix[3026]: authentication failure; (uid=33) -> xxx for httpd service
 (where xxx is the used username)

The logging in /var/log/apache/error.log says:
 [error] (25)Inappropriate ioctl for device: access to
 /secure/ failed for 127.0.0.1, reason: Authentication failure

After trying this for a while I set 
  chmod o+r /etc/shadow  
and there it works. But this cannot be the solution, because
shadow wouldn't be shadowing anymore.

So, after reverting this chmod, I made an strace of the apache running,
while connecting to the site:

Interesting are the marked points, where the reading of /etc/shadow is forbidden
first and the the tool unix_chkpwd is running afterwards with allowing to
read from /etc/shadow.

[pid   518] wait4(-1, 0xbffffcc8, WNOHANG, NULL) = 0
[pid   518] select(0, NULL, NULL, NULL, {1, 0} <unfinished ...>
[pid  1164] <... accept resumed> {sin_family=AF_INET, sin_port=htons(1087),
sin_addr=inet_addr("127.0.0.1")}}, [16]) = 3
[pid  1164] fcntl(20, F_SETLKW, {type=F_UNLCK, whence=SEEK_SET, start=0, len=0}) = 0
[pid  1164] rt_sigaction(SIGUSR1, {SIG_IGN}, {0x805b0f4, [], SA_INTERRUPT|0x4000000}, 8) = 0
[pid  1164] getsockname(3, {sin_family=AF_INET, sin_port=htons(80),
sin_addr=inet_addr("127.0.0.1")}}, [16]) = 0
[pid  1164] setsockopt(3, IPPROTO_TCP1, [1], 4) = 0
[pid  1164] read(3, "GET /secure/ HTTP/1.0\r\nConnection: K"..., 4096) = 273
[pid  1164] rt_sigaction(SIGUSR1, {SIG_IGN}, {SIG_IGN}, 8) = 0
[pid  1164] time(NULL)                  = 981892208
[pid  1164] gettimeofday({981892208, 826060}, NULL) = 0
[pid  1164] stat("/home/hs", ) = 0
[pid  1164] open("/home/secure/.htaccess", O_RDONLY) = -1 ENOENT (No such file or directory)
[pid  1164] write(3, "HTTP/1.1 401 Authorization Requi"..., 707) = 707
[pid  1164] time(NULL)                  = 981892208
[pid  1164] write(18, "127.0.0.1 - - [11/Feb/2001:12"..., 74) = 74
[pid  1164] gettimeofday({981892208, 899724}, NULL) = 0
[pid  1164] times({tms_utime=0, tms_stime=1, tms_cutime=0, tms_cstime=0}) = 148086
[pid  1164] shutdown(3, 1 /* send */)   = 0
[pid  1164] select(4, [3], NULL, NULL, {2, 0} <unfinished ...>
[pid  1162] <... fcntl resumed> )       = 0
[pid  1162] accept(17,  <unfinished ...>
[pid   518] <... select resumed> )      = 0 (Timeout)
[pid   518] time(NULL)                  = 981892209
[pid   518] wait4(-1, 0xbffffcc8, WNOHANG, NULL) = 0
[pid   518] select(0, NULL, NULL, NULL, {1, 0}) = 0 (Timeout)
[pid   518] time(NULL)                  = 981892210
[pid   518] wait4(-1, 0xbffffcc8, WNOHANG, NULL) = 0
[pid   518] select(0, NULL, NULL, NULL, {1, 0} <unfinished ...>
[pid  1164] <... select resumed> )      = 0 (Timeout)
[pid  1164] close(3)                    = 0
[pid  1164] rt_sigaction(SIGUSR1, {0x805b0f4, [], SA_INTERRUPT|0x4000000}, {SIG_IGN}, 8) = 0
[pid  1164] fcntl(20, F_SETLKW, {type=F_WRLCK, whence=SEEK_SET, start=0, len=0} <unfinished ...>
[pid   518] <... select resumed> )      = 0 (Timeout)
[pid   518] time(NULL)                  = 981892211
[pid   518] wait4(-1, 0xbffffcc8, WNOHANG, NULL) = 0
[pid   518] select(0, NULL, NULL, NULL, {1, 0}) = 0 (Timeout)
[pid   518] time(NULL)                  = 981892212
[pid   518] wait4(-1, 0xbffffcc8, WNOHANG, NULL) = 0
[pid   518] select(0, NULL, NULL, NULL, {1, 0} <unfinished ...>
[pid  1162] <... accept resumed> {sin_family=AF_INET, sin_port=htons(1088),
sin_addr=inet_addr("127.0.0.1")}}, [16]) = 3
[pid  1162] fcntl(20, F_SETLKW, {type=F_UNLCK, whence=SEEK_SET, start=0, len=0} <unfinished ...>
[pid  1164] <... fcntl resumed> )       = 0
[pid  1164] accept(17,  <unfinished ...>
[pid  1162] <... fcntl resumed> )       = 0
[pid  1162] rt_sigaction(SIGUSR1, {SIG_IGN}, {0x805b0f4, [], SA_INTERRUPT|0x4000000}, 8) = 0
[pid  1162] getsockname(3, {sin_family=AF_INET, sin_port=htons(80),
sin_addr=inet_addr("127.0.0.1")}}, [16]) = 0
[pid  1162] setsockopt(3, IPPROTO_TCP1, [1], 4) = 0
[pid  1162] read(3, "GET /secure/ HTTP/1.0\r\nConnection: K"..., 4096) = 312
[pid  1162] rt_sigaction(SIGUSR1, {SIG_IGN}, {SIG_IGN}, 8) = 0
[pid  1162] time(NULL)                  = 981892213
[pid  1162] gettimeofday({981892213, 113195}, NULL) = 0
[pid  1162] stat("/home/secure", ) = 0
[pid  1162] open("/home/secure/.htaccess", O_RDONLY) = -1 ENOENT (No such file or directory)
[pid  1162] stat("/etc/pam.d", ) = 0
[pid  1162] open("/etc/pam.d/httpd", O_RDONLY) = 4
[pid  1162] fstat(4, ) = 0
[pid  1162] old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) =
0x40016000
[pid  1162] read(4, "auth	  required	  pam_uni"..., 4096) = 297
[pid  1162] open("/lib/security/pam_unix.so", O_RDONLY) = 5
[pid  1162] fstat(5, ) = 0
[pid  1162] read(5, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\340#\0"..., 4096) = 4096
[pid  1162] old_mmap(NULL, 93652, PROT_READ|PROT_EXEC, MAP_PRIVATE, 5, 0) = 0x40235000
[pid  1162] mprotect(0x4023f000, 52692, PROT_NONE) = 0
[pid  1162] old_mmap(0x4023f000, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 5, 0x9000) =
0x4023f000
[pid  1162] old_mmap(0x40240000, 48596, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS,
-1, 0) = 0x40240000
[pid  1162] close(5)                    = 0
[pid  1162] read(4, "", 4096)           = 0
[pid  1162] close(4)                    = 0
[pid  1162] munmap(0x40016000, 4096)    = 0
[pid  1162] open("/etc/pam.d/other", O_RDONLY) = 4
[pid  1162] fstat(4, ) = 0
[pid  1162] old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) =
0x40016000
[pid  1162] read(4, "#\n# /etc/pam.d/other - specify t"..., 4096) = 341
[pid  1162] read(4, "", 4096)           = 0
[pid  1162] close(4)                    = 0
[pid  1162] munmap(0x40016000, 4096)    = 0
[pid  1162] time(NULL)                  = 981892213
[pid  1162] time([981892213])           = 981892213
[pid  1162] getpid()                    = 1162
[pid  1162] rt_sigaction(SIGPIPE, {0x40140eec, [], 0x4000000}, {SIG_IGN}, 8) = 0
[pid  1162] getuid()                    = 33
[pid  1162] time([981892213])           = 981892213
[pid  1162] getpid()                    = 1162
[pid  1162] rt_sigaction(SIGPIPE, {0x40140eec, [], 0x4000000}, {SIG_IGN}, 8) = 0
[pid  1162] getuid()                    = 33
[pid  1162] open("/etc/passwd", O_RDONLY) = 4
[pid  1162] fcntl(4, F_GETFD)           = 0
[pid  1162] fcntl(4, F_SETFD, FD_CLOEXEC) = 0
[pid  1162] fstat(4, ) = 0
[pid  1162] old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) =
0x40016000
[pid  1162] _llseek(4, 0, [0], SEEK_CUR) = 0
[pid  1162] read(4, "root:x:0:0:root:/root:/bin/bash\n"..., 4096) = 1755
[pid  1162] close(4)                    = 0
[pid  1162] munmap(0x40016000, 4096)    = 0

!!!
[pid  1162] open("/etc/shadow", O_RDONLY) = -1 EACCES (Permission denied)
[pid  1162] geteuid()                   = 33
[pid  1162] pipe([4, 5])                = 0
[pid  1162] fork()                      = 2117
[pid  1162] close(4)                    = 0
[pid  1162] write(5, "nonull\0\0", 8)   = 8
[pid  1162] write(5, "xxxxx\0", 9)   = 9     !! here the entred password
[pid  1162] close(5)                    = 0
[pid  1162] wait4(2117,  <unfinished ...>
[pid  2117] close(5)                    = 0
[pid  2117] dup2(4, 0)                  = 0
[pid  2117] execve("/sbin/unix_chkpwd", ["/sbin/unix_chkpwd"], []) = 0
[pid  2117] brk(0)                      = 0x804c614
[pid  2117] open("/etc/ld.so.preload", O_RDONLY) = -1 ENOENT (No such file or directory)
[pid  2117] open("/etc/ld.so.cache", O_RDONLY) = 5
[pid  2117] fstat(5, ) = 0
[pid  2117] old_mmap(NULL, 13799, PROT_READ, MAP_PRIVATE, 5, 0) = 0x40014000
[pid  2117] close(5)                    = 0
[pid  2117] open("/lib/libnsl.so.1", O_RDONLY) = 5
[pid  2117] fstat(5, ) = 0
[pid  2117] read(5, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\0@\0\000"..., 4096) = 4096
[pid  2117] old_mmap(NULL, 88200, PROT_READ|PROT_EXEC, MAP_PRIVATE, 5, 0) = 0x40018000
[pid  2117] mprotect(0x4002a000, 14472, PROT_NONE) = 0
[pid  2117] old_mmap(0x4002a000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 5, 0x11000) =
0x4002a000
[pid  2117] old_mmap(0x4002c000, 6280, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS,
-1, 0) = 0x4002c000
[pid  2117] close(5)                    = 0
[pid  2117] open("/lib/libcrypt.so.1", O_RDONLY) = 5
[pid  2117] fstat(5, ) = 0
[pid  2117] read(5, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\340\16"..., 4096) = 4096
[pid  2117] old_mmap(NULL, 183228, PROT_READ|PROT_EXEC, MAP_PRIVATE, 5, 0) = 0x4002e000
[pid  2117] mprotect(0x40033000, 162748, PROT_NONE) = 0
[pid  2117] old_mmap(0x40033000, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 5, 0x4000) =
0x40033000
[pid  2117] old_mmap(0x40034000, 158652, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS,
-1, 0) = 0x40034000
[pid  2117] close(5)                    = 0
[pid  2117] open("/lib/libc.so.6", O_RDONLY) = 5
[pid  2117] fstat(5, ) = 0
[pid  2117] read(5, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\264\213"..., 4096) = 4096
[pid  2117] old_mmap(NULL, 902044, PROT_READ|PROT_EXEC, MAP_PRIVATE, 5, 0) = 0x4005b000
[pid  2117] mprotect(0x40130000, 29596, PROT_NONE) = 0
[pid  2117] old_mmap(0x40130000, 16384, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 5, 0xd4000) =
0x40130000
[pid  2117] old_mmap(0x40134000, 13212, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS,
-1, 0) = 0x40134000
[pid  2117] close(5)                    = 0
[pid  2117] munmap(0x40014000, 13799)   = 0
[pid  2117] personality(PER_LINUX)      = 0
[pid  2117] getpid()                    = 2117
[pid  2117] fcntl(0, F_GETFD)           = 0
[pid  2117] fcntl(1, F_GETFD)           = 0
[pid  2117] fcntl(2, F_GETFD)           = 0
[pid  2117] rt_sigaction(SIGILL, {0x8048b4c, [], SA_ONESHOT|0x4000000}, NULL, 8) = 0
[pid  2117] rt_sigaction(SIGTRAP, {0x8048b4c, [], SA_ONESHOT|0x4000000}, NULL, 8) = 0
[pid  2117] rt_sigaction(SIGBUS, {0x8048b4c, [], SA_ONESHOT|0x4000000}, NULL, 8) = 0
[pid  2117] rt_sigaction(SIGSEGV, {0x8048b4c, [], SA_ONESHOT|0x4000000}, NULL, 8) = 0
[pid  2117] rt_sigaction(SIGTERM, {SIG_IGN}, NULL, 8) = 0
[pid  2117] rt_sigaction(SIGHUP, {SIG_IGN}, NULL, 8) = 0
[pid  2117] rt_sigaction(SIGINT, {SIG_IGN}, NULL, 8) = 0
[pid  2117] rt_sigaction(SIGQUIT, {SIG_IGN}, NULL, 8) = 0
[pid  2117] ioctl(0, TCGETS, 0xbffffd48) = -1 EINVAL (Invalid argument)
[pid  2117] getuid()                    = 33
[pid  2117] brk(0)                      = 0x804c614
[pid  2117] brk(0x804ca2c)              = 0x804ca2c
[pid  2117] brk(0x804d000)              = 0x804d000
[pid  2117] socket(PF_UNIX, SOCK_STREAM, 0) = 5
[pid  2117] connect(5, ) = -1 ECONNREFUSED (Connection refused)
[pid  2117] close(5)                    = 0
[pid  2117] open("/etc/nsswitch.conf", O_RDONLY) = 5
[pid  2117] fstat(5, ) = 0
[pid  2117] old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) =
0x40014000
[pid  2117] read(5, "# /etc/nsswitch.conf\n#\n# Example"..., 4096) = 465
[pid  2117] read(5, "", 4096)           = 0
[pid  2117] close(5)                    = 0
[pid  2117] munmap(0x40014000, 4096)    = 0
[pid  2117] open("/etc/ld.so.cache", O_RDONLY) = 5
[pid  2117] fstat(5, ) = 0
[pid  2117] old_mmap(NULL, 13799, PROT_READ, MAP_PRIVATE, 5, 0) = 0x40014000
[pid  2117] close(5)                    = 0
[pid  2117] open("/lib/libnss_compat.so.2", O_RDONLY) = 5
[pid  2117] fstat(5, ) = 0
[pid  2117] read(5, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0000\31\0"..., 4096) = 4096
[pid  2117] brk(0x804e000)              = 0x804e000
[pid  2117] old_mmap(NULL, 44332, PROT_READ|PROT_EXEC, MAP_PRIVATE, 5, 0) = 0x40138000
[pid  2117] mprotect(0x40142000, 3372, PROT_NONE) = 0
[pid  2117] old_mmap(0x40142000, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 5, 0x9000) =
0x40142000
[pid  2117] close(5)                    = 0
[pid  2117] munmap(0x40014000, 13799)   = 0
[pid  2117] uname({sysname="Linux", ) = 0
[pid  2117] open("/etc/passwd", O_RDONLY) = 5
[pid  2117] fcntl(5, F_GETFD)           = 0
[pid  2117] fcntl(5, F_SETFD, FD_CLOEXEC) = 0
[pid  2117] fstat(5, ) = 0
[pid  2117] old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) =
0x40014000
[pid  2117] _llseek(5, 0, [0], SEEK_CUR) = 0
[pid  2117] read(5, "root:x:0:0:root:/root:/bin/bash\n"..., 4096) = 1755
[pid  2117] close(5)                    = 0
[pid  2117] munmap(0x40014000, 4096)    = 0
[pid  2117] read(0, "nonull\0\0", 8)    = 8

!!!
[pid  2117] read(0, "xxxxx\0", 200)  = 9    !! here the entered password
[pid  2117] open("/etc/passwd", O_RDONLY) = 5
[pid  2117] fcntl(5, F_GETFD)           = 0
[pid  2117] fcntl(5, F_SETFD, FD_CLOEXEC) = 0
[pid  2117] open("/etc/passwd", O_RDONLY) = 6
[pid  2117] fcntl(6, F_GETFD)           = 0
[pid  2117] fcntl(6, F_SETFD, FD_CLOEXEC) = 0
[pid  2117] fstat(6, ) = 0
[pid  2117] old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) =
0x40014000
[pid  2117] _llseek(6, 0, [0], SEEK_CUR) = 0
[pid  2117] read(6, "root:x:0:0:root:/root:/bin/bash\n"..., 4096) = 1755
[pid  2117] close(6)                    = 0
[pid  2117] munmap(0x40014000, 4096)    = 0
[pid  2117] close(5)                    = 0
[pid  2117] open("/etc/shadow", O_RDONLY) = 5
[pid  2117] fcntl(5, F_GETFD)           = 0
[pid  2117] fcntl(5, F_SETFD, FD_CLOEXEC) = 0

!!!
[pid  2117] open("/etc/shadow", O_RDONLY) = 6
[pid  2117] fcntl(6, F_GETFD)           = 0
[pid  2117] fcntl(6, F_SETFD, FD_CLOEXEC) = 0
[pid  2117] fstat(6, ) = 0
[pid  2117] old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) =
0x40014000
[pid  2117] _llseek(6, 0, [0], SEEK_CUR) = 0
[pid  2117] read(6, "root:xxxxxxx:10901:0:99999"..., 4096) = 1157
[pid  2117] close(6)                    = 0
[pid  2117] munmap(0x40014000, 4096)    = 0
[pid  2117] close(5)                    = 0
[pid  2117] _exit(0)                    = ?
[pid  1162] <... wait4 resumed> [WIFEXITED(s) && WEXITSTATUS(s) == 0], 0, NULL) = 2117
[pid  1162] --- SIGCHLD (Child exited) ---


I also tested the tool /sbin/unix_chkpwd with
 echo -n "nonull  xxxx" | /sbin/unix_chkpwd && echo ok
where xxxx is the password of the logged user; it's ok.


Can anyone help me ?? Is anyone else using PAM in this way ??

Thanks!

-- 
Stefan-W. Hahn / mailto:stefan.hahn@online.de /



_______________________________________________
Pam-list mailing list
Pam-list@redhat.com
https://listman.redhat.com/mailman/listinfo/pam-list

[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic