RFR 8197387: jcmd started by "root" must be allowed to access all VM processes
Daniil Titov
daniil.x.titov at oracle.com
Thu May 24 18:25:30 UTC 2018
Hi David,
In addition to what Thomas said I just wanted to mention that currently jcmd started with elevated privileges ("sudo jcmd") already lists all VM processes running on the host machine and the assumption is that every process in this list could be used by jcmd for further communication (e.g. "sudo jcmd <PID> help"). However, jcmd fails to connect to VMs from the list "sudo jcmd" returns if VM process was started by another user. These changes were supposed to fix this inconsistency in jcmd behavior.
Best regards,
Daniil
On 5/23/18, 9:55 PM, "Thomas Stüfe" <thomas.stuefe at gmail.com> wrote:
Hi Daniil, David,
I think this fix makes a lot of sense.
First off, contacting a VM with foreign jcmd should not cause the VM
to sputter out thread dumps, nor should jcmd hang and timeout after 10
seconds (which it does). So I'd consider that a bug in any case.
If the desired behavior is really that root shall not see and/or be
able to contact VMs started from a different UID, then this should be
handled gracefully and fast.
However, I think we want jcmd started by root to see all processes and
be able to contact all processes. It is not a security issue, we
agree, yes? Since we are root anyway and can su to be everyone, it
would be security-by-inconvenience :)
So the only reason one would want to prevent root from seeing other
user's processes is because one wants to see only root's processes.
Like in a scenario where tons of processes run on a machine, only some
of them root. But in my experience, this is not a common scenario. It
is way more common (and expected behavior) to want to see everything
as root.
We have a very similar tool in our port (which may slowly phase out in
favour of jcmd), and that tool behaves just like that: when root, you
see everything and can contact everyone. Our support people need that
too.
Just my 5 cent.
Thanks, Thomas
On Thu, May 24, 2018 at 4:53 AM, David Holmes <david.holmes at oracle.com> wrote:
> Hi Daniil,
>
> I'm not sure I can accept on face-value the proposition that root "must be
> allowed to access all VM processes". I can see it may be convenient in some
> cases. But is it really necessary? Is it always desirable? I'd like to know
> what a sys admin might think of this. :)
>
> Further root can always "su" to another user and run jcmd that way.
>
> Cheers,
> David
>
>
> On 24/05/2018 11:11 AM, Daniil Titov wrote:
>>
>> Please review the changes that fix JDK-8197387.
>>
>> There are 2 problems here:
>> 1. JVM ignores .attach_pid<pid> file if it is owned by the user different
>> from the one that owns this JVM process
>> 2. jcmd checks that .java_pid<pid> socket is owned by the same user that
>> runs jcmd and reports an error otherwise
>>
>> The fix relaxes these checks to allow jcmd started by "root" (UID = 0)
>> access JVMs started by another users.
>>
>> Bug: https://bugs.openjdk.java.net/browse/JDK-8197387
>> Webrev: http://cr.openjdk.java.net/~dtitov/8197387/webrev.01/
>>
>> Best regards,
>> Daniil
>>
>>
>
More information about the serviceability-dev
mailing list