I am wondering about the process of fetching the tgz files and running them
on slaves. Basically, I am trying to run hadoop-mesos, but still use the
LinuxTaskController (http://hadoop.apache.org/docs/r1.0.4/cluster_setup.html
for details).

When I am using hadoop, I have to swich to the defaultTaskController
because when Mesos untars the tgz, it loses the setuid bit on the binary.
I've done a bit of testing around this, and I am unsure why it loses it
(even if the running process is root) but it does.

Basically, tar by itself works like this: If the user is a super user, tar
maintain all permissions that are in the tgz. (I've tested this, when I
manually untar with tar zxf myhadoop.tgz it untars properly, including
permissions and setuid on the Linux Task Controller.)

When I untar as a non-super user, the permissions all get moved to the user
that untared it, and the setuid bit is lost. It makes sense from a security
point of view.

So how does this work in mesos and hadoop?

Well, if I run the jobtracker as user hadoop, hadoop is not a super user,
all the files in the untared hadooop folder are owned by hadoop:hadoop, and
the setuid bit is lost.

Ok, next test, well, let's run jobtracker as root, and see what happens.
 (remember, when I untared as root, the setuid and all permissions were
preserved).   So, when we run JT as root, all the files become root:root,
and the setuid bit is lost.  That's weird?  What happened here? (This is
where I get lost, perhaps the untar/gzipping isn't using the tar command
thus permissions are not preserved like I would expect)

Either way, when using the LinuxTaskController, tasktrackers WILL NOT RUN
if the setuid bit is not set.  That's a pain, the LinuxTaskController is
really nice from an impersonation/security setup with hadoop jobs.  I CAN
run  my hadoop framework as hadoop:hadoop, but then I am limited in how
things are setup and I get strange permissions issues when trying to run
certain jobs as other users.

The fix?

I am hoping we can have a discussion around this.  As I see it, the slaves
are running as root, they have the power to run however we need them to
run.  Ideally, I'd like to see the untarring happen with the preserve
permissions bit. I.e. the archives for mesos, at the very least having the
OPTION to preserve permissions in the tgz. If we could do this, as an
option somehow, this would be a win.

Also ideally, I don't want to run the framework as root, just untar the tgz
as root, preserving permissions.  There is a difference between the action
of untarring, and the execution of the framework, and the security nerd in
me would like to ensure while the slave COULD run the framework as root, we
avoid it if possible.

I am not sure how exactly mesos untars things, nor am I aware how hard it
would be to do this, but I think from a security perspective, the
flexibility that untarting/preserving permissions (especially the setuid
bit) would bring Mesos would warrant the dev time.

Thoughts?

Reply via email to