README.linux-privs
上传用户:pycemail
上传日期:2007-01-04
资源大小:329k
文件大小:5k
源码类别:

Ftp客户端

开发平台:

Unix_Linux

  1. Section 1.
  2. What is linux-privs?  What is the proftpd mod_linuxprivs module?
  3. ================================================================
  4. The linux-privs project is a project aimed at providing the POSIX.1e
  5. security model under Linux.  Documentation on the project as a whole
  6. can be found at:
  7. ftp://linux.kernel.org/pub/linux/libs/security/linux-privs
  8. Without going into gory detail, POSIX.1e basically specifies an interface
  9. to such goodies as capabilities, capability sets, access control lists,
  10. mandatory access control and much, much more.  The end result of this
  11. security model allows compliant systems and daemons to have VERY
  12. fine-grained control over what operations are allowed by which services
  13. on the system.
  14. The best part of the whole story is that Linux development kernels (2.1)
  15. already have two important facets of the security model in place, namely
  16. capabilities and capability sets.  Using these features allows a user-land
  17. program to specifically drop capabilities (which can be thought of as
  18. "privileges") which it does not need.  Once such capabilities are
  19. completely dropped, neither the user-land program OR any binary it should
  20. spawn will be allowed to perform privileged operations, *regardless*
  21. of whether the program is running as root or not.  Essentially, this
  22. limits the power of root to only those specific functions that are
  23. necessary, with the end effect of making the program much more secure.
  24. A non-supported contributed module has been added in the proftpd
  25. distribution, named mod_linuxprivs.  It can be found in the contrib
  26. directory, and a symlink in modules/ points to it.  Because Linux 2.1
  27. is a development kernel, the module is not compiled by default.
  28. Additionally, a small library is included in contrib; libcap.  This
  29. library provides the interface between mod_linuxprivs and the capability
  30. syscalls present in Linux 2.1 kernels.  (Note that this library is simply
  31. a slightly modified version of the libcap library which can be found at
  32. linux.kernel.org).  Building proftpd with the mod_linuxprivs module
  33. included (see below for instructions on how to do this) will automatically
  34. build and link in the required libcap library.
  35. When proftpd runs with mod_linuxprivs installed, its operation changes
  36. slightly:
  37. 1. The master proftpd process runs per normal (with full capabilities).
  38. 2. Child proftpd processes (or those run from inetd) drop ALL capabilities
  39.    except for cap_net_bind_service (which allows a process to bind to
  40.    ports < 1024) *immediately* after a client has authenticated.
  41.    Additionally, switching back and forth between root and the
  42.    authenticated user is no longer necessary, so uid swapping is disabled.
  43.    Once the additional capabilities have been dropped, proftpd (or
  44.    any programs it should exec) is not capable of performing any other
  45.    privileged functions (including chroot, mknod or mount).  If
  46.    proftpd should somehow be "coerced" into exec()ing another binary,
  47.    the kernel will drop ALL capabilities (including cap_net_bind_service),
  48.    and the binary that is exec'd will be incapable of performing
  49.    "dangerous" syscalls, REGARDLESS of the user it runs as.  With
  50.    capabilities and capability sets, root isn't necessarily "all
  51.    powerful" any more. ;)
  52. Section 2.
  53. What do I need to do to run mod_linuxprivs?
  54. ===========================================
  55. mod_linuxprivs currently requires that you be running a Linux kernel
  56. version 2.1.104 or newer.  It's been tested and verified to work with
  57. 2.1.122.  Should the kernel interface change in newer versions, we'll try
  58. to get the libcap library updated as quickly as possible. ;)
  59. Steps to building proftpd with mod_linuxprivs:
  60. 1. Verify you are running at LEAST kernel 2.1.104
  61. 2. Make absolutely sure that /usr/src/linux is a symlink to your
  62.    2.1.* kernel source tree.  This is required by libcap.
  63. 3. Run the top-level configure script using the --with-modules
  64.    argument to include mod_linuxprivs.  You don't need to copy
  65.    mod_linuxprivs.c from contrib/ to modules/, as there is already
  66.    a symlink in the modules/ directory.  Example:
  67.    ./configure --prefix=/usr --with-modules=mod_linuxprivs
  68.    If you're compiling in multiple modules (such as mod_ratio), you
  69.    would:
  70.    ./configure --prefix=/usr --with-modules=mod_ratios:mod_linuxprivs
  71. 4. Run make from the top-level directory just as you normally would.
  72.    This will build and link the library in contrib/libcap automatically.
  73. 5. "make install", etc, etc.
  74. If you want to verify that mod_linuxprivs is actually working, set
  75. proftpd's debug level to 1 (add the command line option: -d 1).  You
  76. should see a debug syslog message along the lines of "module linuxprivs:
  77. capabilities '= cap_net_bind_service+ep'" _after_ a client logs in.  This
  78. message indicates that proftpd has no capabilities except for
  79. cap_net_bind_service in the Effective and Permitted sets.  See the
  80. linux-privs documentation on linux.kernel.org for a detailed explanation
  81. of Effective, Permitted and Inheritable capability sets.  Normally, root
  82. runs with "=eip cap_setpcap-eip", meaning that all capabilities are raised
  83. (allowed) in each of the three sets, with the exception of cap_setpcap
  84. (only the pid 1 init process has this capability).  If you see the above
  85. log message, this indicates that proftpd has successfully dropped almost
  86. all of the capabilities that give root it's "power."
  87. Section 2.
  88. There is no section 2.