SUMMARY: finger information

From: Maciej Baranowski <bmaciej_at_venus.wmid.amu.edu.pl>
Date: Tue, 26 May 1998 13:34:44 +0200 (MET DST)

Thanks much to all the following that answered my question:

Jan Mark Holzer
Ken Brown
Allan E Johannesen
Nestor Ruiz
Jerome M Berkman
Andrew Moar

My original message was:

I have to disable changing finger information on my server. I thought that
changing rights to chfn would be enough, but there is still a possibility
to change finger information by passwd -f. Have you any idea how to solve
this problem?

A common answer was to rewrite passwd command and disable -f option.
Andrew Moar sent me whole C source of new passwd ( it works pretty good )
with clear explanation - so I attached it to the letter.

An interesting idea sent me Jan Mark Holzer. He proposed that to edit
/etc/sia/matrix.conf and to specify a non-existent library for the
sia_chg_finger call. It might work, but i haven't tested it.

Thanks to all!

 Maciej Baranowski ( bmaciej_at_venus.wmid.amu.edu.pl )
                   ( root_at_venus.wmid.amu.edu.pl )




/**********************************************************************/
/* */
/* NAME: passwd.c */
/* */
/* PROGRAMMER: Richard Jackson DATE: 940509 */
/* */
/* PURPOSE: Wrapper for passwd to prevent 'passwd -f' invocation. */
/* Of course, chfn will have to be disabled. */
/* */
/* NOTES: */
/* To execute: */
/* 1. passwd [...] */
/* */
/* To build under ULTRIX: */
/* 1. cc -O -mips3 -o passwd passwd.c (ULTRIX 4.3a) */
/* 1. cc -O -non_shared -o passwd passwd.c (OSF/1 3.0) */
/* 2. strip passwd */
/* 3. mv passwd /usr/bin/ (755 root.system) */
/* */
/* */
/* MODIFICATION HISTORY: */
/* DATE MOD NAME DESCRIPTION */
/* */
/* 940509 AAA rjackson initial version */
/* 940831 AAB rjackson check if TRUE and FALSE are defined first*/
/* */
/**********************************************************************/

#include <limits.h> /* ARG_MAX */
#include <stdio.h> /* sprintf() */
#include <string.h> /* strcmp() */
#include <stdlib.h> /* exit() */

#define PASSWD "/usr/bin/passwd.dist" /* real passwd command */
#ifndef TRUE
#define TRUE 1;
#endif
#ifndef FALSE
#define FALSE 0;
#endif

main(int argc, char *argv[])
{
  int i, j; /* counter */
  int len; /* length of argument */
  int good; /* flag for good argument */
  char cmd[ARG_MAX]; /* command for real passwd */

/*
 * setup for appropriate command.
 */
  if (strstr(argv[0], "chfn") != (char *) NULL)
  {
    printf("Sorry, chfn has been disabled since its use may adversely\n");
    printf(" affect email delivery. Finger information changes are not\n");
    printf(" permitted. Use a .plan file in your home area as an\n");
    printf(" alternative method.\n");
    exit(1);
  }
  else if (strstr(argv[0], "chsh") != (char *) NULL)
    sprintf(cmd, "%s -s ", PASSWD);
  else
    sprintf(cmd, "%s ", PASSWD); /* assume passwd command */

  for (i = 1; i < argc; i++) /* construct real command */
  {
    if (strcmp(argv[i], "-f") == 0) /* disable -f */
    {
      printf("Sorry, -f has been disabled since its use may adversely\n");
      printf(" affect email delivery. Finger information changes are not\n");
      printf(" permitted. Use a .plan file in your home area as an\n");
      printf(" alternative method.\n");
      exit(1);
    }
    else /* append arg[i] to command */
    {
      len = strlen(argv[i]);
      good = TRUE;
      for (j = 0; j < len; j++) /* check for safe system call */
        if (!(isalnum(argv[i][j]) || argv[i][j] == '-'))
        {
          good = FALSE;
          break;
        }

      if (good) /* check if argument is ok */
      {
        strcat(cmd, argv[i]); /* concat argument */
        strcat(cmd, " ");
      }
    }

  } /* for */

  system(cmd);

} /* main() */

-------------------->8---------------->8-------------------->8-------------

- osf1: install passwd wrapper and disable chfn capability
 disable 'chfn' and 'passwd -f'. Reason -
  "chfn has been disabled since its use may adversely
  affect email delivery. Finger information changes are not
  permitted. Use a .plan file in your home area as an
  alternative method."
  1. cd /usr/bin
  2. mv passwd passwd.dist
  3. chmod 4710 passwd.dist (from 4711 root.bin)
     chown root.system passwd.dist
  4. mv ~/util/passwd/passwd .
  5. chmod 2711 passwd
     chown root.system passwd
  6. rm chsh chfn
  7. ln passwd chfn
  8. ln passwd chsh

Received on Tue May 26 1998 - 13:38:32 NZST

This archive was generated by hypermail 2.4.0 : Wed Nov 08 2023 - 11:53:37 NZDT