home *** CD-ROM | disk | FTP | other *** search
/ NetNews Usenet Archive 1992 #30 / NN_1992_30.iso / spool / comp / sys / sun / admin / 9407 < prev    next >
Encoding:
Text File  |  1992-12-14  |  3.2 KB  |  78 lines

  1. Newsgroups: comp.sys.sun.admin
  2. Path: sparky!uunet!gatech!news.ans.net!cmcl2!prism.poly.edu!kapela
  3. From: kapela@prism.poly.edu (Theodore S. Kapela)
  4. Subject: Re: Need to let Non-Root use Mount
  5. Message-ID: <1992Dec14.140327.17774@prism.poly.edu>
  6. Organization: Polytechnic University, New York
  7. References: <hq8qvm+@lynx.unm.edu> <1931@enst.enst.fr>
  8. Date: Mon, 14 Dec 92 14:03:27 GMT
  9. Lines: 67
  10.  
  11. This has been brought up several times in the past, and someone always
  12. makes the same suggestion.  (Hopefully) before someone gets "burned"
  13. I thought it wise to mention this. . .
  14.  
  15. In article <1931@enst.enst.fr> tardieu@inf.enst.fr writes:
  16. >In article <hq8qvm+@lynx.unm.edu>, khan@us17501.mdc.com (Naseer Khan) writes:
  17. >-> Hello Sun Gurus,
  18. >-> 
  19. >-> The command they need to execute is 'mount -r /dev/sr0 /cdrom'
  20. >-> So, I thought I'd see if I could put that in a shell file and
  21. >-> set it's permission to 4755 (with setuid) and have it owned
  22. >-> by root.  I didn't have much hope for this, suspecting that the
  23. >-> shell probably wouldn't be passing the user-id around.  Well,
  24. >-> I guess I was right in my pessimism.  It gives the same old
  25.  
  26. Set-UID shell scripts are generally *BAD* for security.
  27.  
  28. >main()
  29. >{
  30. >    if (getuid()==getpwnam("username")->pw_uid) {
  31. >        setuid(0);
  32. >        execl("/usr/etc/mount","mount","param1","param2",...,(char *)0);
  33. >        }
  34. >    else write(2,"Permission denied\n",18);
  35. >}
  36. >
  37. >where you put the username instead of 'username', and the parameters you 
  38. >want to give to mount instead of 'param1',...
  39. >
  40.  
  41. NO NO NO NO NO!!!!  This is an even worse security risk than Set-UID shell
  42. scripts (You can thank Sun for that).  /usr/etc/mount does *NOT* handle the
  43. actual mounting of the device.  Instead, it does an execlp - NOTE THE
  44. "p" in the funtion name - to mount the actual device.  If you look in /usr/etc,
  45. you will see a bunch of files "mount_*".  These are what actually do the
  46. mounting, and, even though /usr/etc/mount is the one that complains about
  47. your perms, it is these that actually need you to be root.
  48.  
  49. >You need to BE root to execute the mount command, not to have the effective uid
  50. >root. 
  51. >
  52.  
  53. The reason that just setting your effective uid to 0 (IE the setuid shell
  54. script) does not work is that effective uid is *NOT* preserved accross the
  55. execlp() in /usr/etc/mount.
  56.  
  57. Now - in case anyone hasn't noticed yet, I specifically pointed out which 
  58. version of the exec() routines is used.  If you don't know why I said this, 
  59. or where the security risk is, you should see the man pages for execl()
  60. (and friends. . .)
  61.  
  62. If you want to write a proper wrapper for /usr/etc/mount to let normal
  63. users mount/umount the cdrom (or floppy, or tape drive. . .), you
  64. must search the environment for the "PATH", and munge it so it *only*
  65. contains /usr/etc (getenv()/putenv() will work fine here).  In the
  66. case of SunOS, you should also REMOVE any LD_LIBRARY_PATH you may
  67. find.  You may also set up a simple access control list using a
  68. unix group.  Add a group to /etc/group (say, "mounters") that contains
  69. those users you want to be able to use your "mount" wrapper.  Then, 
  70. search the group list (via getgrnam) for permission.
  71.  
  72.  
  73. -- 
  74. ..............................................................................
  75.  Theodore S. Kapela                kapela@poly.edu
  76.  Center for Applied Large-Scale Computing    
  77.  Polytechnic University
  78.