README.snmpv3
-------------
How to setup SNMPv3, a very brief document for Dave to elaborate and
do a better job on since I suck at writing documentation and he
doesn't ;-) --Wes:

Note: SHA authentication and DES/AES encryption support is only available
if you have OpenSSL installed or if you've compiled using
--with-openssl=internal.  If you use --with-openssl=internal please
read the documentation in snmplib/openssl/README for important details.

Note: encryption support now *is* enabled in the binary releases downloadable
from the net-snmp web site.

Note: this description assumes you're using the software compiled from
source, and so installed using the default prefix location (/usr/local).
If you're working with a vendor-provided system, or have configured
things with a different prefix, you'll need to adjust locations accordingly.

CREATING THE FIRST USER:
------------------------
  First, you need to create a new snmpv3 user and give them rights to
  do things:

    net-snmp-config --create-snmpv3-user -a "my_password" myuser

  WARNING: SNMPv3 pass phrases must be at least 8 characters long!

  The above line creates the user "myuser" with a password of
  "my_password" (and uses MD5 and DES for protection).  (Note that
  encryption support isn't enabled in the binary releases downloadable
  from the net-snmp web site.)  net-snmp-config will also add a line
  to your snmpd.conf file to let that user have read/write access to
  your agent.  You may want to change this in your snmpd.conf file
  (see the snmpd.conf manual page).  Run net-snmp-config --help for
  more information about it.

  Start the agent and test your setup:
    /usr/local/sbin/snmpd
       [...wait a few seconds...  It will run in the background and
        return you to your shell immediately.]

    snmpget -v 3 -u myuser -l authNoPriv -a MD5 -A my_password localhost sysUpTime.0
       [ this should return information about how long your agent has been up]
  
    snmpget -v 3 -u myuser -l authPriv   -a MD5 -A my_password
                                         -x DES -X my_password localhost sysUpTime.0
       [ this should return similar information, but encrypts the transmission ]

CREATING A SECOND USER:
-----------------------
  Start the agent (if you didn't do so above).

  You can create as many users as you like using the above method, but
  this details another way of doing it while the agent is running by
  modifying the user database using the snmp protocol itself:

  Now, lets create a second user using the first user (just for fun)
  for both authentication purposes and as a template (or "cloning
  source"):

    snmpusm -v 3 -u myuser -l authNoPriv -a MD5 -A my_password localhost create wes myuser

  The above should have created the user "wes" with the same password as
  the "myuser" user.  So then, you need to change his password using:

    snmpusm -v 3 -u wes -l authNoPriv -a MD5 -A my_password localhost passwd my_password new_passphrase

  See, wasn't that easy?  You can now create users.  Wheeee....

  But, you'll have to add a configuration line that allows them access
  to do things.  Do this with another "rwuser" line in your
  /usr/local/share/snmp/snmpd.conf file (you'll need to stop and start 
  the agent again, or send the agent a SIGHUP signal):

    rwuser wes

  Or, optional use the "rouser" token instead of the "rwuser" token to
  only grant them read-only access.

  Now, test your new user:

    snmpget -v 3 -u wes -l authNoPriv -a MD5 -A new_passphrase localhost sysUpTime.0


FURTHER STUDIES:
---------------

Tired of all those command line authentication options?
----------------------------------------
put something like this in your $HOME/.snmp/snmp.conf file (make it
readable only by you!!!):

  defSecurityName wes
  defContext ""
  defAuthType MD5
  defSecurityLevel authNoPriv
  defAuthPassphrase new_passphrase
  defVersion 3

And this is in place the last of the above example lines boils down to:

  snmpget localhost sysUpTime.0

Which is about as simple as I can make it for ya ;-)
