On 2013-12-10, Canek Pel??ez Vald??s <can...@gmail.com> wrote:

>> How do you grant a capability (e.g. CAP_NET_RAW) to a user?

> From man:capabilities(7): "Capabilities are a per-thread attribute."
>
> I don't think you can grant any capability to a user.

I've found some indications that you can.  Various references to
PAM_CAP imply that I should be able to do what I want.  From
http://blog.siphos.be/2013/05/restricting-and-granting-capabilities/:

     You can also grant capabilities to users selectively, using
     pam_cap.so (the Capabilities Pluggable Authentication Module).

But the example provided only shows how to grant capabilities to a
user that can then be inherited by files which must also have that
same capability enabled.  That's not quite what I want to do (and it
doesn't seem to work).

There are two reasons that granting the capability to the executable
isn't feasible:

  1) Some of the programs are written in Python, and I don't want to
     grant the capability to all Python programs by setting the
     capability on /usr/bin/python.

  2) Some of the programs are ELF executables (compiled C programs)
     that are under developement and are being continuously re-built
     and re-run.  If I have to do a "sudo setcap" everytime I
     compile/run a program, then I might as well just do "sudo
     <program>" the way I do now.

> A workaround for what you want is to write a little executable that
> only execvp's bash (or whatever shell you use), grant that executable
> CAP_NET_RAW, and then set it as default shell with usermod.

I thought about that, but that seems fragile.

I supposed I could set the capability on /bin/bash with +p instead of
+ep, then it should only take effect for users who have the capability
enabled (though I haven't been able to get that to work yet).

-- 
Grant Edwards               grant.b.edwards        Yow! My vaseline is
                                  at               RUNNING...
                              gmail.com            


Reply via email to