Replying from home...

On Jan 18, 2011, at 6:29 PM, David Goulet wrote:

First, let me say! This is a very impressive reply!

Thanks a lot for taking that time!

Comments below (in order to make things going!)

On 11-01-18 05:24 AM, Nils Carlson wrote:

ustd - Main daemon that act as a trace session registry
I would name this ust-sessiond, mostly because ustd has already been used
and it might be good to not reuse the name.


Agree. Since it will only manage session, it makes perfect sense.

An ID SHOULD be a unique hash of the session name, trace path name,
date/time, PID and/or UID

What is the ID used for?

Since an application can be trace multiple time, the PID and trace name are the only things that makes them "unique". So, the idea of the ID is to be able for the user to interact with is trace without these information. It's a bit inspired by "screen" when you want to attach to a session :

There are several suitable screens on:
        14864.pts-10.raoul      (11-01-18 11:46:21 AM)  (Attached)
        14820.pts-2.raoul       (11-01-18 11:46:18 AM)  (Attached)
Type "screen [-d] -r [pid.]tty.host" to resume one of them.

That would be the kind og output that ust-sessiond sent you when you list the active session by you client control (ustctl).


Ok, this is basically a pidunique... but maybe shorter?

Figure 4 ustctl starts a trace, telling the sessiond what
the name of the trace should be, which application pid and what consumer it
wants.

Confuse here by "what consumer it wants"... how the application will do that and knows?

Well, we skipped a bunch of steps... At one point we will have some more commands:
ustctl create-trace <pid> <trace name>
ustctl list-consumers
ustctl select-consumer  <pid> <trace-name> <consumer-name>

or some such.


Figure 7 trace still starting, app allocates buffers in shared memory
and passes
each to the consumerd. The consumerd now maps each of them in turn and
checks which
cpu the belong to and passes them to the corresponding cpu thread where
they are added
to the epoll set.

+---------------+ +--------+
| ust-consumerd |<-map buffers-| app_1 |
+---------------+ +---+----+


3. If we want to implement access control we can do it by passing
credentials across the socket (see man unix). These can then be used
by both the consumerd to open files in the right places with the right credentials. DBUS does this. We don't want to re-implement DBUS though.


I would argue here that this is a bit trickier then that. Let's see if I understand correctly what you are saying:

application allocates the buffers and set uid and gid to the app user. (Ex: uid:mysql and gid:mysql).

ust-consumerd has to be run as a privilege user to access applications buffers OR the buffers are set on read for everyone... which WE DON'T want. Also, if ust-consumerd want to write to disk using the app credentials, again privilege user is needed.

However, this brings up two problems:

1) I will suppose that the data on disk is set with the credentials of the user that requested tracing (Ex: nils) in order to be able to read it. If not, mysql:mysql will be used (using the app credentials) and "nils" will not be able to read the data.

2) This kind of architecture makes EVERY user on the machine being able to trace EVERY application... This is a behavior that we want to avoid with that re-engineering. Either ust-sessiond control the access based on the UID/GID (bad..) or the file system does it for us (good)

So this is why ust-sessiond was allocating the shared memory in order to set the "tracing" group so we could have a bit of control over that.

We could easily change that to ust-consumerd doing that but... again... some kind of privileges are needed to set the tracing group.

I hope I put it clearly enough here :S ... the whole point of having a consumerd per apps was the access rights on the buffers and trace data. Having a central consumerd, I agree however it makes that daemon run as a privilege user to manage the right credentials.

Hmm.. lets sort things out from basics.

app has cred A
user has cred B
consumer has cred C

We want consumer to access the apps allocated buffers, it can do this by getting credentials from the app over a unix socket and then doing a setuid while opening the buffers, once buffers are open I believe uid isn't an issue, authentication is done at open time and never after as far as I know. We want the user to be able to access the files which the consumer outputs, this can be done by sending the users credentials over a unix socket to the consumer, and the consumer does setuid while opening the files...

Am I missing something here?


The new "lttngtrace" command line tool MUST be use to interact with
the ustd
registry daemon for every trace action needed by the user.

We currently have a library (libustcmd) for this? ustctl wraps
libustcmd. I have
a small plan of renaming the library libustctl because it sounds better.

The library has to stay as it will in not too distant a future be used
to implement
RPC calls to ust using tcf or some such.

The plan is to get a "strace" tool alike for tracing ust and/or lttng. libustctl is here to stay and lttngtrace will interface with it and lttctl and lttv text dump also.


Ok, so lttngtrace will run on ust and lttng. Thats fine. But just don't compromise ust in any way...

/Nils

However, we should discuss this within another thread. Mathieu and I will put some development effort in that so we have to get on the same page with you at least for UST!

Thanks again!
David

--
David Goulet
LTTng project, DORSAL Lab.

PGP/GPG : 1024D/16BD8563
BE3C 672B 9331 9796 291A  14C6 4AF7 C14B 16BD 8563

_______________________________________________
ltt-dev mailing list
[email protected]
http://lists.casi.polymtl.ca/cgi-bin/mailman/listinfo/ltt-dev

_______________________________________________
ltt-dev mailing list
[email protected]
http://lists.casi.polymtl.ca/cgi-bin/mailman/listinfo/ltt-dev

Reply via email to