Re: Chrooting an SNMP AgentX application

Vincent Bernat <[email protected]>
Newsgroups gmane.network.net-snmp.user
Organization One Piece
Message-ID <[email protected]>
OoO En  ce début d'après-midi nuageux  du samedi 15  novembre 2008, vers
14:15, je disais:

> I am writing some kind of application (https://trac.luffy.cx/lldpd) that
> behaves  like an  AgentX using  NetSNMP  API. I  would like  to do  some
> privilege separation  and chrooting.  However, NetSNMP API  do a  lot of
> things that makes the task a bit difficult:
>  - It  tries to  read a lot  of MIB.  This is not  possible since  it is
>    chrooted. I  have tried to set  MIB and MIBDIRS to  some other values
>    but without success:

> Cannot find module (HOST-RESOURCES-MIB): At line 0 in (none)
> Cannot find module (HOST-RESOURCES-TYPES): At line 0 in (none)
> Cannot find module (UCD-DLMOD-MIB): At line 0 in (none)
> Cannot find module (UCD-DISKIO-MIB): At line 0 in (none)

To solve this, I just used:
	setenv("MIBS", "", 1);

>  - It tries to  use a  persistent store.  I am  not interested  in this
>    feature but  I did not find an  easy way to disable  it. Therefore, I
>    get some errors when exiting:

> Creating directory: /var
> Failed to create the persistent directory for /var/lib/snmp/lldpAgent.conf
> read_config_store open failure on /var/lib/snmp/lldpAgent.conf

>    How to disable this feature?

	netsnmp_ds_set_boolean(NETSNMP_DS_LIBRARY_ID,
	    NETSNMP_DS_LIB_DONT_PERSIST_STATE, TRUE);

> My main  problem is with the socket.  Actually, if NETSNMP_AGENTX_SOCKET
> starts with "/", I chroot  into the base directory containing the socket
> and use  netsnmp_ds_set_string to change  the socket to the  basename of
> the file. However, the user has to configure snmpd to give additional
> permissions on this socket. I would  prefer to handle the opening of the
> socket in the privileged part of the application.

> If I just initialize the agent while outside the chroot, I won't be able
> to reconnect in case of problems.

> Would  it be possible  to write  a custom  transport which  inherits and
> replaces  Unix one  with a  netsnmp_unix_transport() function  that will
> handle correctly  the opening  of the socket?  From the code  source, it
> seems that I  could use netsnmp_tdomain_register. How to  ensure that my
> new transport will override the actual one?

I am in the  way of solving this problem. I register  my own domain with
the  same OID  as  Unix domain  and  therefore the  registration of  the
builtin Unix domain will fail and my implementation will be used.
-- 
No fortunes found

-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
Net-snmp-users mailing list
[email protected]
Please see the following page to unsubscribe or change other options:
https://lists.sourceforge.net/lists/listinfo/net-snmp-users
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.