[smokeping-users] Master/Slave configuration trouble

Eric Chatham echatham at broadvox.com
Thu Jun 11 16:13:40 CEST 2009

On G.W. Thursday, June 11, 2009 03:11, Ged wrote,

> Hi Eric,
> On Wed, 10 Jun 2009, Eric Chatham wrote:
>> [snip] What user is trying to read the master from the slave?
> It isn't quite like that.  The slave sends a request to the master to
> say it has some data to hand over to the master.  If the master is
> happy to accept it, it does so, and at the same time sends to the
> slave an updated configuration if necessary.  They obviously need to
> agree on a protocol to exchange the data, or things will go wrogn.
> If the master doesn't like the slave's idea of the protocol it will
> ignore the slave (see sub answer_slave in Master.pm).
> The slave runs as some user.  So does the master.  Which user is up to
> you to decide, which you do at the time you first install Smokeping.
> It may be that you installed a 'package' from a distribution, in which
> case the package usually has a 'maintainer' who probably decided on
> that for you.  Unfortunately maintainers often stray a long way from
> the path you'd take if you just grabbed the tarball from wherever it
> lives, and installed it yourself.  This is often the case, with any
> software, not just Smokeping.  So this is one of those cases where
> nobody can know the answer without having more information.
> It's possible to set up systems in many different ways.  One of the
> things you can do is create users, for example on your systems you
> might have created a user called 'eric'.  You might choose to log in
> as eric and to run a few processes by starting them at the command
> line.  Those processes will probably be running as user 'eric'.
> Smokeping might even be one of them.  There are ways to find out,
> using a utility such as 'top' or 'ps' for example.
>> The smokeping process is run by root on both slaves and the master.
> Then the processes _should_ be able to read the configuration files,
> unless you're running SELinux, which is another kettle of worms.
>> Does the apache user/group try to read the master config from the
>> slaves?
> Let's step back a little.  We need to get the terminology right or
> we'll all be very confused.
> You have four things going on.
> 1. A smokeping master daemon on a machine somewhere.  A daemon is a
> 'process'.  It has a life all of its own, it does things based on
> things it finds in a configuration file, without you needing to type
> anything to tell it to do them.  This one sends pings (using a variety
> of tools, like fping) waits for replies, writes things into a database
> of RRD files.  You can look at these files with RRDtool, that's how I
> use 'collectd', but it isn't much fun that way and it's another story.
> The daemon is started and runs with whatever user's permissions you
> chose when you (or your package maintainer, or your predecessor, or...)
> installed Smokeping.
> 2. (Optionally) some smokeping slave daemons, on other machines, which
> do everything the master does except the bit about writing databases.
> Instead of that, they collect their data and when they can they send
> it to the master.  It thanks them very much and writes the data to a
> (RRD) database, and tells them if their configuration has changed.
> These slaves have the permissions you decided that they should have.
> These slaves and the master daemon who need to agree on a protocol to
> converse, and if they're all the same version then they will agree.
> 3. A Web server, probably Apache.  Apache can 'drop' permissions for
> security reasons, so although root might start it (and therefore it
> has permission to read its configuration files, which often only root
> can read), it can start child processes which _can't_ read those files
> (they don't need to) and in the unfortunate event that they're taken
> over by some hacker out there on the Internet that is a Good Thing -
> the hacker can't use them to see things he shouldn't.  Well, we hope.
> The server is on the same machine as the Smokeping master daemon, but
> I suppose you could change that if you really wanted to.  Don't try,
> yet.  Anyway, an Apache server doesn't really do anything unless a...
> 4. ...client asks it to do something, using the HTTP protocol.  That's
> the fun part.  The HTTP protocol isn't likely to be a problem, as it's
> fairly stable. :)  The client (most often a browser) can be anywhere,
> on any machine.
>  ..oOo..
> Processes do things.  Users don't.  Users have characteristics, amongst
> which is their permissions to read, write, and execute files.  If we're
> talking about a directory, 'execute' is treated like 'search'.
> When the browser asks the Web server for some 'Smokeping' page, the
> server runs a bunch of Perl code which came as part of the Smokeping
> package.  This code tells the server (which is a process) to read the
> RRD databases that the master made; make a few graphs; send them, and
> other stuff, to the browser.  That's nothing to do with the smokeping
> daemons really, they exist quite separately and just trundle along,
> autonomously, collecting data and writing it to a database for your
> eventual edification and delight, should you choose to look at it by
> means of the client/server pair that is your browser and Apache.
> The master config is not known to the slaves, so it would be pointless
> any process trying to get it from them.  The 'apache' user, if there
> is such a user, doesn't try to read anything.  It's processes that do
> that, not users.  A process usually has the permissions associated
> with a user.  The process might be run by a user called 'apache' but
> that depends very much on your system.  Most often the Apache server
> is actually several different processes, running with the permissions
> of two different users.  Most often the process is known by the name
> 'httpd' - short for the unwieldy "HyperText Transfer Protocol Daemon".
> The parent Apache (httpd) process is the one you actually started.  It
> (usually) runs as user root, i.e. it has root permissions, and so it
> has complete access to anything on the system.  The parent (usually)
> starts some child httpd processes, and kills them when it needs to,
> starts more when it needs to, writes the logs, keeps the score, and
> does very little else.  The children run as a less-privileged user,
> sometimes 'nobody', or 'www'.  They have the permissions associated
> with that user, whatever they happen to be - or rather, whatever you
> decided they should be.  On my Debian systems the user is 'www-data',
> I ask you.  These child processes are responsible for actually serving
> the requests from clients; the parent doesn't do that.  'Clients'
> usually means 'browsers' but it could mean 'smokeping slave daemons'
> who send their data to the master by means of HTTP requests.  So the
> httpd child processes need to be able to put the data they get from
> slaves into the database.
> Did any of it help?
>Tobi, I'd be grateful for any comments, corrections, additions.

Hi Ged,

This information was very helpful.  I'll save this for future reference.

CONFIDENTIAL.  This e-mail and any attached files are confidential and should be destroyed and/or returned if you are not the intended and proper recipient.

More information about the smokeping-users mailing list