unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
* emacsclient socket ownership
@ 2018-11-01 16:43 Glenn Morris
  2018-11-02 15:38 ` Stefan Monnier
  0 siblings, 1 reply; 30+ messages in thread
From: Glenn Morris @ 2018-11-01 16:43 UTC (permalink / raw)
  To: emacs-devel


Hi,

emacsclient defaults to predictable socket file names in /tmp:

/tmp/emacsUID/server

It checks if the socket is owned by the same user (function socket_status).
If the user is root, however, this check is ignored (master emacsclient
line 1370). Is this not a security issue? Any user can create a socket
/tmp/emacs0/server, and root emacsclient will use it.



^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: emacsclient socket ownership
  2018-11-01 16:43 emacsclient socket ownership Glenn Morris
@ 2018-11-02 15:38 ` Stefan Monnier
  2018-11-02 16:53   ` Yuri Khan
  2018-11-05  1:13   ` Glenn Morris
  0 siblings, 2 replies; 30+ messages in thread
From: Stefan Monnier @ 2018-11-02 15:38 UTC (permalink / raw)
  To: emacs-devel

> It checks if the socket is owned by the same user (function socket_status).
> If the user is root, however, this check is ignored (master emacsclient
> line 1370). Is this not a security issue? Any user can create a socket
> /tmp/emacs0/server, and root emacsclient will use it.

Sounds like a security issue, yes: root may end up talking to some other
user's Emacs.  This seems to date back to

    commit 9f637eea618b3b6b764b92405a480c254756f94a
    Author: Gerd Moellmann <gerd@gnu.org>
    Date:   Fri Jan 28 15:02:20 2000 +0000

        (socket_status): New function.
        (main): if $LOGNAME or $USER exist and differ from our euid, look
        for a socket based on the UID associated with the name.

so it's likely meant for the case where you `su` (or `sudo`) and want to
use emacsclient from root but connect to your main (non-root) Emacs server.

Not sure how to reconcile the two.  I guess the risk is reduced in
practice for the following reason: server.el should hopefully signal an
error if it can't create&own /tmp/emacsUID/server, so emacsclient only
risks connecting to a wrong Emacs if:
- you forgot to start your Emacs server.
- your Emacs failed to start and you didn't notice it.
- server.el did not check things carefully enough and the attacker
  managed to replace your socket with his (e.g. /tmp/emacsUID/ or /tmp is
  somehow writable for the attacker).


        Stefan




^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: emacsclient socket ownership
  2018-11-02 15:38 ` Stefan Monnier
@ 2018-11-02 16:53   ` Yuri Khan
  2018-11-02 18:49     ` Stefan Monnier
  2018-11-05  1:13   ` Glenn Morris
  1 sibling, 1 reply; 30+ messages in thread
From: Yuri Khan @ 2018-11-02 16:53 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: Emacs developers

On Fri, Nov 2, 2018 at 10:39 PM Stefan Monnier <monnier@iro.umontreal.ca> wrote:
>
> > It checks if the socket is owned by the same user (function socket_status).
> > If the user is root, however, this check is ignored (master emacsclient
> > line 1370). Is this not a security issue? Any user can create a socket
> > /tmp/emacs0/server, and root emacsclient will use it.
>
> Sounds like a security issue, yes: root may end up talking to some other
> user's Emacs.

Talking, in and of itself, is not a vulnerability. Can the limited
user’s server.el actually entice the root’s emacsclient to do
something that user would not be able to do?



^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: emacsclient socket ownership
  2018-11-02 16:53   ` Yuri Khan
@ 2018-11-02 18:49     ` Stefan Monnier
  2018-11-02 20:08       ` Paul Eggert
  0 siblings, 1 reply; 30+ messages in thread
From: Stefan Monnier @ 2018-11-02 18:49 UTC (permalink / raw)
  To: emacs-devel

> Talking, in and of itself, is not a vulnerability. Can the limited
> user’s server.el actually entice the root’s emacsclient to do
> something that user would not be able to do?

Right, the problem is not really that the other end of the socket
belongs to another user, but that the other end may be something else
than intended (e.g. it could be some unsuspecting daemon running as
root: the attacker just made the root user send "garbage" to that
daemon which may lead to exploiting a vulnerability in the daemon).

I agree that the problem may not be the most threatening there is if you
consider random attackers trying to exploit vulnerabilities anywhere
they can, but if you consider an attacker aiming at a particular user
and able to adjust its attack based on knowledge of the user's usage
pattern, I'm sure we can come up with scenarios where this problem can
be exploited.


        Stefan




^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: emacsclient socket ownership
  2018-11-02 18:49     ` Stefan Monnier
@ 2018-11-02 20:08       ` Paul Eggert
  2018-11-02 20:30         ` Stefan Monnier
  0 siblings, 1 reply; 30+ messages in thread
From: Paul Eggert @ 2018-11-02 20:08 UTC (permalink / raw)
  To: Stefan Monnier, emacs-devel

On 11/2/18 11:49 AM, Stefan Monnier wrote:
> I'm sure we can come up with scenarios where this problem can
> be exploited.

Yes, me too. Let's close the hole. The (minor) convenience here is not 
worth the security vulnerability.




^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: emacsclient socket ownership
  2018-11-02 20:08       ` Paul Eggert
@ 2018-11-02 20:30         ` Stefan Monnier
  2018-11-02 21:06           ` Paul Eggert
  0 siblings, 1 reply; 30+ messages in thread
From: Stefan Monnier @ 2018-11-02 20:30 UTC (permalink / raw)
  To: Paul Eggert; +Cc: emacs-devel

>> I'm sure we can come up with scenarios where this problem can
>> be exploited.
> Yes, me too.  Let's close the hole.

Not sure how, tho: as mentioned, just checking that the socket is owned
by root might not be sufficient (the attacker may have just put
a symlink to some other socket that belongs to root but that really
doesn't expect the kind of data emacsclient sends).


        Stefan



^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: emacsclient socket ownership
  2018-11-02 20:30         ` Stefan Monnier
@ 2018-11-02 21:06           ` Paul Eggert
  0 siblings, 0 replies; 30+ messages in thread
From: Paul Eggert @ 2018-11-02 21:06 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: emacs-devel

On 11/2/18 1:30 PM, Stefan Monnier wrote:
> the attacker may have just put
> a symlink to some other socket that belongs to root but that really
> doesn't expect the kind of data emacsclient sends

We could refuse to follow symlinks, no? If that's not enough there are 
more drastic things to try.




^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: emacsclient socket ownership
  2018-11-02 15:38 ` Stefan Monnier
  2018-11-02 16:53   ` Yuri Khan
@ 2018-11-05  1:13   ` Glenn Morris
  2018-11-05  4:46     ` Stefan Monnier
  2018-11-05  5:12     ` Paul Eggert
  1 sibling, 2 replies; 30+ messages in thread
From: Glenn Morris @ 2018-11-05  1:13 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: emacs-devel


Thanks for looking at this. (I wish you'd reply-to-all though...)

Stefan Monnier wrote:

> so it's likely meant for the case where you `su` (or `sudo`) and want to
> use emacsclient from root but connect to your main (non-root) Emacs server.

Tramp methods would seem a better alternative for this.
So I suggest favoring (slight) security over (slighter) convenience, and
eliminating the emacsclient UID 0 exception.

> I guess the risk is reduced in practice for the following reason:
> server.el should hopefully signal an error if it can't create&own
> /tmp/emacsUID/server, so emacsclient only risks connecting to a wrong
> Emacs if:
> - you forgot to start your Emacs server.
> - your Emacs failed to start and you didn't notice it.
> - server.el did not check things carefully enough and the attacker
>   managed to replace your socket with his (e.g. /tmp/emacsUID/ or /tmp is
>   somehow writable for the attacker).

If you are in the habit of using emasclient -a "", none of the server.el
checks apply. emacsclient will simply start talking to the running
server if it finds one. /tmp is usually world writable.

> Right, the problem is not really that the other end of the socket
> belongs to another user, but that the other end may be something else
> than intended (e.g. it could be some unsuspecting daemon running as root

That's beyond what I was thinking about initially, and would also apply
to non-root users. I was thinking of the case where non-root Emacs eg
runs a keylogger to watch what root types.


BTW is /tmp still the right default location for these sockets, or
should it be eg /run or XDG_RUNTIME_DIR these days?



^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: emacsclient socket ownership
  2018-11-05  1:13   ` Glenn Morris
@ 2018-11-05  4:46     ` Stefan Monnier
  2018-11-05  7:26       ` Paul Eggert
  2018-11-05  5:12     ` Paul Eggert
  1 sibling, 1 reply; 30+ messages in thread
From: Stefan Monnier @ 2018-11-05  4:46 UTC (permalink / raw)
  To: Glenn Morris; +Cc: emacs-devel

>> so it's likely meant for the case where you `su` (or `sudo`) and want to
>> use emacsclient from root but connect to your main (non-root) Emacs server.
> Tramp methods would seem a better alternative for this.

I think they cover fairly different use-cases.   E.g. this emacsclient
trick is used when root sets his $EDITOR to emacsclient and AFAIK Tramp
isn't an option in that case.

> BTW is /tmp still the right default location for these sockets, or
> should it be eg /run or XDG_RUNTIME_DIR these days?

Good question.  /run is not an option for non-root users, I believe.



^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: emacsclient socket ownership
  2018-11-05  1:13   ` Glenn Morris
  2018-11-05  4:46     ` Stefan Monnier
@ 2018-11-05  5:12     ` Paul Eggert
  2018-12-05 18:53       ` Michael Heerdegen
  1 sibling, 1 reply; 30+ messages in thread
From: Paul Eggert @ 2018-11-05  5:12 UTC (permalink / raw)
  To: Glenn Morris, Stefan Monnier; +Cc: emacs-devel

Glenn Morris wrote:
> BTW is /tmp still the right default location for these sockets, or
> should it be eg /run or XDG_RUNTIME_DIR these days?

XDG_RUNTIME_DIR indeed sounds like it would be better nowadays.



^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: emacsclient socket ownership
  2018-11-05  4:46     ` Stefan Monnier
@ 2018-11-05  7:26       ` Paul Eggert
  2018-11-06 17:19         ` Daniel Pittman
  0 siblings, 1 reply; 30+ messages in thread
From: Paul Eggert @ 2018-11-05  7:26 UTC (permalink / raw)
  To: Stefan Monnier, Glenn Morris; +Cc: emacs-devel

Stefan Monnier wrote:
> /run is not an option for non-root users, I believe.

It works for me on Ubuntu 18.04.1 and seems to be used for this sort of thing:

$ ls -ld $XDG_RUNTIME_DIR
drwx------ 11 eggert eggert 260 Nov  4 23:21 /run/user/1000
$ mkdir $XDG_RUNTIME_DIR/emacs
$ ls -l $XDG_RUNTIME_DIR
total 0
srw-rw-rw-  1 eggert eggert   0 Nov  4 08:32 bus
drwx------  3 eggert eggert  60 Nov  4 08:32 dbus-1
drwx------  2 eggert eggert  60 Nov  4 23:18 dconf
drwxr-xr-x  2 eggert eggert  40 Nov  4 23:21 emacs
drwx--x--x  2 eggert eggert  60 Nov  4 08:32 gdm
drwx------  3 eggert eggert  60 Nov  4 08:32 gnome-shell
drwx------  2 eggert eggert 140 Nov  4 08:32 gnupg
dr-x------  2 eggert eggert   0 Nov  4 08:32 gvfs
drwx------  2 eggert eggert 120 Nov  4 08:43 keyring
drwx------  2 eggert eggert  80 Nov  4 08:32 pulse
drwxr-xr-x  2 eggert eggert  80 Nov  4 08:32 systemd
-rw-------  1 eggert eggert   0 Nov  4 08:33 update-notifier.pid



^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: emacsclient socket ownership
  2018-11-05  7:26       ` Paul Eggert
@ 2018-11-06 17:19         ` Daniel Pittman
  2018-11-06 17:54           ` Stefan Monnier
  2018-11-06 18:17           ` Paul Eggert
  0 siblings, 2 replies; 30+ messages in thread
From: Daniel Pittman @ 2018-11-06 17:19 UTC (permalink / raw)
  To: eggert; +Cc: rgm, monnier, emacs-devel

[-- Attachment #1: Type: text/plain, Size: 1222 bytes --]

On Mon, Nov 5, 2018 at 2:27 AM Paul Eggert <eggert@cs.ucla.edu> wrote:

> Stefan Monnier wrote:
> > /run is not an option for non-root users, I believe.
>
> It works for me on Ubuntu 18.04.1 and seems to be used for this sort of
> thing:


There is no /run on macOS, and I'm pretty sure at least OpenBSD have
rejected the idea.

Would not a better choice be to locate the socket at
${HOME}/.emacs.d/${something} instead?  That avoids the need to make it
globally accessible in the first place.

I'd also note that root can bypass file permissions, and it isn't exactly a
complex protocol to implement ... but also that root can simply change
userid to the appropriate value at will, and access it, should they wish.

At heart, I don't think this is really a security issue, so much as that
root is the ultimate force for bypassing all protection in the Unix world.
Without going to something akin to SELinux, or some similar MAC
system,  there isn't any way to prevent root accessing any socket, by
design.

So, the very best case would be that emacsclient makes this check as a
convenience to prevent surprises to the user, and would not materially
improve the security of the system against users with root permissions.

[-- Attachment #2: Type: text/html, Size: 1591 bytes --]

^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: emacsclient socket ownership
  2018-11-06 17:19         ` Daniel Pittman
@ 2018-11-06 17:54           ` Stefan Monnier
  2018-11-06 18:17           ` Paul Eggert
  1 sibling, 0 replies; 30+ messages in thread
From: Stefan Monnier @ 2018-11-06 17:54 UTC (permalink / raw)
  To: emacs-devel

> There is no /run on macOS, and I'm pretty sure at least OpenBSD have
> rejected the idea.

It's OK: we can use OS-specific filenames.

And we'd want to preserve compatibility between old emacsclient and new
server.el and vice versa.

> Would not a better choice be to locate the socket at
> ${HOME}/.emacs.d/${something} instead?

That's another option, indeed.
IIRC it tends to work poorly when $HOME is on a network file system.

> At heart, I don't think this is really a security issue, so much as that
> root is the ultimate force for bypassing all protection in the Unix world.
> Without going to something akin to SELinux, or some similar MAC
> system,  there isn't any way to prevent root accessing any socket, by
> design.

The problem is not Emacs trying to prevent root's emacsclient from
connecting, but root's emacsclient trying to avoid connecting
inadvertently to an attacker's socket.


        Stefan




^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: emacsclient socket ownership
  2018-11-06 17:19         ` Daniel Pittman
  2018-11-06 17:54           ` Stefan Monnier
@ 2018-11-06 18:17           ` Paul Eggert
  2018-11-13 18:21             ` Glenn Morris
  1 sibling, 1 reply; 30+ messages in thread
From: Paul Eggert @ 2018-11-06 18:17 UTC (permalink / raw)
  To: Daniel Pittman; +Cc: rgm, monnier, emacs-devel

On 11/6/18 9:19 AM, Daniel Pittman wrote:
> On Mon, Nov 5, 2018 at 2:27 AM Paul Eggert <eggert@cs.ucla.edu 
> <mailto:eggert@cs.ucla.edu>> wrote:
>
>     Stefan Monnier wrote:
>     > /run is not an option for non-root users, I believe.
>
>     It works for me on Ubuntu 18.04.1 and seems to be used for this
>     sort of thing:
>
>
> There is no /run on macOS, and I'm pretty sure at least OpenBSD have 
> rejected the idea.

That's OK. Emacs can use /run if available, and fall back on the current 
approach (with /tmp) otherwise.

>
> Would not a better choice be to locate the socket at 
> ${HOME}/.emacs.d/${something} instead?  That avoids the need to make 
> it globally accessible in the first place.

/run is better because it does not survive reboot, and avoids security 
and availability issues on networked filesystems.


> there isn't any way to prevent root accessing any socket, by design.

Of course, but that's not the issue. The concern here is whether a 
non-root user can trick a root program into doing stuff that root 
doesn't really want to do.




^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: emacsclient socket ownership
  2018-11-06 18:17           ` Paul Eggert
@ 2018-11-13 18:21             ` Glenn Morris
  2018-11-13 19:25               ` Eli Zaretskii
  0 siblings, 1 reply; 30+ messages in thread
From: Glenn Morris @ 2018-11-13 18:21 UTC (permalink / raw)
  To: Paul Eggert; +Cc: Daniel Pittman, monnier, emacs-devel


Since discussion seems to have stalled I have gone ahead and removed the
root exception (in master; I think it should be in emacs-26). I have
opened bugs 33366 and 33367 for related topics that were mentioned, I
suggest any future followups go there.



^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: emacsclient socket ownership
  2018-11-13 18:21             ` Glenn Morris
@ 2018-11-13 19:25               ` Eli Zaretskii
  0 siblings, 0 replies; 30+ messages in thread
From: Eli Zaretskii @ 2018-11-13 19:25 UTC (permalink / raw)
  To: Glenn Morris; +Cc: slippycheeze, eggert, monnier, emacs-devel

> From: Glenn Morris <rgm@gnu.org>
> Date: Tue, 13 Nov 2018 13:21:48 -0500
> Cc: Daniel Pittman <slippycheeze@google.com>, monnier@iro.umontreal.ca,
> 	emacs-devel@gnu.org
> 
> 
> Since discussion seems to have stalled I have gone ahead and removed the
> root exception (in master; I think it should be in emacs-26).

No, please don't make this change on the release branch.



^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: emacsclient socket ownership
  2018-11-05  5:12     ` Paul Eggert
@ 2018-12-05 18:53       ` Michael Heerdegen
  2018-12-05 19:38         ` Glenn Morris
  2018-12-06  0:49         ` Paul Eggert
  0 siblings, 2 replies; 30+ messages in thread
From: Michael Heerdegen @ 2018-12-05 18:53 UTC (permalink / raw)
  To: Paul Eggert; +Cc: Glenn Morris, Stefan Monnier, emacs-devel

Paul Eggert <eggert@cs.ucla.edu> writes:

> XDG_RUNTIME_DIR indeed sounds like it would be better nowadays.

What has got installed seems to prevent me to start a server from an
Emacs started with gksu unless I change server-socket-dir in .emacs of
that user:

  signal(file-error ("Creating directory" "Permission denied"
   "/run/user/1000/emacs"))
  files--ensure-directory("/run/user/1000/emacs")
  make-directory("/run/user/1000/emacs" t)
  server-ensure-safe-dir("/run/user/1000/emacs")
  server-start(nil inhibit-prompt)

Internet searching seems to indicate that XDG_RUNTIME_DIR is not always
set by such tools.  Is XDG_RUNTIME_DIR really a good choice?


Thanks,

Michael



^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: emacsclient socket ownership
  2018-12-05 18:53       ` Michael Heerdegen
@ 2018-12-05 19:38         ` Glenn Morris
  2018-12-05 19:46           ` Eli Zaretskii
                             ` (2 more replies)
  2018-12-06  0:49         ` Paul Eggert
  1 sibling, 3 replies; 30+ messages in thread
From: Glenn Morris @ 2018-12-05 19:38 UTC (permalink / raw)
  To: Michael Heerdegen; +Cc: Paul Eggert, Stefan Monnier, emacs-devel

Michael Heerdegen wrote:

> What has got installed seems to prevent me to start a server from an
> Emacs started with gksu unless I change server-socket-dir in .emacs of
> that user:
>
>   signal(file-error ("Creating directory" "Permission denied"
>    "/run/user/1000/emacs"))
>   files--ensure-directory("/run/user/1000/emacs")
>   make-directory("/run/user/1000/emacs" t)
>   server-ensure-safe-dir("/run/user/1000/emacs")
>   server-start(nil inhibit-prompt)
>
> Internet searching seems to indicate that XDG_RUNTIME_DIR is not always
> set by such tools. 

Maybe you need to use gksu -l, though you might then have X auth issues.

> Is XDG_RUNTIME_DIR really a good choice?

It is the right directory to use for these things, yes.

Running a modern graphical application as another user is a complicated
business. I wouldn't do it personally.



^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: emacsclient socket ownership
  2018-12-05 19:38         ` Glenn Morris
@ 2018-12-05 19:46           ` Eli Zaretskii
  2018-12-05 20:02             ` Glenn Morris
  2018-12-05 20:33           ` Glenn Morris
  2018-12-05 20:58           ` Michael Heerdegen
  2 siblings, 1 reply; 30+ messages in thread
From: Eli Zaretskii @ 2018-12-05 19:46 UTC (permalink / raw)
  To: Glenn Morris; +Cc: michael_heerdegen, eggert, monnier, emacs-devel

> From: Glenn Morris <rgm@gnu.org>
> Date: Wed, 05 Dec 2018 14:38:19 -0500
> Cc: Paul Eggert <eggert@cs.ucla.edu>, Stefan Monnier <monnier@iro.umontreal.ca>,
> 	emacs-devel@gnu.org
> 
> > Is XDG_RUNTIME_DIR really a good choice?
> 
> It is the right directory to use for these things, yes.

Maybe we should have a defcustom for those who don't want
XDG_RUNTIME_DIR to be used, even if it exists.  Or maybe we should
check it for being writable before using it, and otherwise fall back
on TMPDIR, as before.



^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: emacsclient socket ownership
  2018-12-05 19:46           ` Eli Zaretskii
@ 2018-12-05 20:02             ` Glenn Morris
  2018-12-05 20:19               ` Eli Zaretskii
  0 siblings, 1 reply; 30+ messages in thread
From: Glenn Morris @ 2018-12-05 20:02 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: michael_heerdegen, eggert, monnier, emacs-devel

Eli Zaretskii wrote:

> Maybe we should have a defcustom for those who don't want
> XDG_RUNTIME_DIR to be used, even if it exists.

emacsclient can't know about defcustoms.

> Or maybe we should check it for being writable before using it, and
> otherwise fall back on TMPDIR, as before.

I don't think Emacs should work around user environments that are bogus
in this way.



^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: emacsclient socket ownership
  2018-12-05 20:02             ` Glenn Morris
@ 2018-12-05 20:19               ` Eli Zaretskii
  2018-12-06  0:36                 ` Paul Eggert
  0 siblings, 1 reply; 30+ messages in thread
From: Eli Zaretskii @ 2018-12-05 20:19 UTC (permalink / raw)
  To: Glenn Morris; +Cc: michael_heerdegen, eggert, monnier, emacs-devel

> From: Glenn Morris <rgm@gnu.org>
> Cc: michael_heerdegen@web.de,  eggert@cs.ucla.edu,  monnier@iro.umontreal.ca,  emacs-devel@gnu.org
> Date: Wed, 05 Dec 2018 15:02:24 -0500
> 
> Eli Zaretskii wrote:
> 
> > Maybe we should have a defcustom for those who don't want
> > XDG_RUNTIME_DIR to be used, even if it exists.
> 
> emacsclient can't know about defcustoms.

emacsclient could have a command-line option for that.

> > Or maybe we should check it for being writable before using it, and
> > otherwise fall back on TMPDIR, as before.
> 
> I don't think Emacs should work around user environments that are bogus
> in this way.

It's for letting users get back pre-27 behavior.  They could want it
for any number of reasons.



^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: emacsclient socket ownership
  2018-12-05 19:38         ` Glenn Morris
  2018-12-05 19:46           ` Eli Zaretskii
@ 2018-12-05 20:33           ` Glenn Morris
  2018-12-05 20:58           ` Michael Heerdegen
  2 siblings, 0 replies; 30+ messages in thread
From: Glenn Morris @ 2018-12-05 20:33 UTC (permalink / raw)
  To: Michael Heerdegen; +Cc: Paul Eggert, Stefan Monnier, emacs-devel


PS this is the same (non-Emacs) issue as https://debbugs.gnu.org/32413 .
You would have the same issue with dbus-related features of Emacs.

See also https://bugs.debian.org/766464 etc.



^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: emacsclient socket ownership
  2018-12-05 19:38         ` Glenn Morris
  2018-12-05 19:46           ` Eli Zaretskii
  2018-12-05 20:33           ` Glenn Morris
@ 2018-12-05 20:58           ` Michael Heerdegen
  2 siblings, 0 replies; 30+ messages in thread
From: Michael Heerdegen @ 2018-12-05 20:58 UTC (permalink / raw)
  To: Glenn Morris; +Cc: Paul Eggert, Stefan Monnier, emacs-devel

Glenn Morris <rgm@gnu.org> writes:

> Maybe you need to use gksu -l, though you might then have X auth
> issues.

If you mean that emacs then doesn't start - yes, I have this little
issue then.

> Running a modern graphical application as another user is a
> complicated business. I wouldn't do it personally.

Well, I used to start another separate xsession for other users, but
that already stopped working some time ago.  Thanks to the switch to
systemd or something like this, when I finish one session, the other X
session immediately crashes.

I guess I only have some years left to work with my computer in a
reasonable way...not the fault of Emacs, of cause.


Michael.



^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: emacsclient socket ownership
  2018-12-05 20:19               ` Eli Zaretskii
@ 2018-12-06  0:36                 ` Paul Eggert
  2018-12-06  6:37                   ` Eli Zaretskii
  0 siblings, 1 reply; 30+ messages in thread
From: Paul Eggert @ 2018-12-06  0:36 UTC (permalink / raw)
  To: Eli Zaretskii, Glenn Morris; +Cc: michael_heerdegen, monnier, emacs-devel

On 12/5/18 12:19 PM, Eli Zaretskii wrote:
> emacsclient could have a command-line option for that.

emacsclient already has the '-s SOCKET' option. Plus, you can set 
XDG_RUNTIME_DIR (or unset it) in the environment before invoking 
emacsclient. As far as I can see, this should let users avoid the 
problems Michael describes. (And if I'm wrong, what further emacsclient 
option would be useful?)

> It's for letting users get back pre-27 behavior.  They could want it
> for any number of reasons.
Unsetting XDG_RUNTIME_DIR should get the pre-27 behavior in emacsclient.

PS. One really should know what one is doing to be playing with this 
stuff (due to security reasons), and unless I'm missing something the 
people who know what they're doing should be able to get the behavior 
they want by using the knobs that are already in master.




^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: emacsclient socket ownership
  2018-12-05 18:53       ` Michael Heerdegen
  2018-12-05 19:38         ` Glenn Morris
@ 2018-12-06  0:49         ` Paul Eggert
  1 sibling, 0 replies; 30+ messages in thread
From: Paul Eggert @ 2018-12-06  0:49 UTC (permalink / raw)
  To: Michael Heerdegen; +Cc: Glenn Morris, Stefan Monnier, emacs-devel

gksu has been removed from Debian and other GNU/Linux distributions for 
maintenance and security reasons (see 
<https://jeremy.bicha.net/2018/03/21/gksu-is-dead/>), so I'd rather 
focus on any other tools having similar problems. That being said, you 
should be able to work around the gksu issue by setting (or unsetting) 
XDG_RUNTIME_DIR in gksu's subsidiary environment before invoking Emacs 
(not that I recommend using gksu at all...).



^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: emacsclient socket ownership
  2018-12-06  0:36                 ` Paul Eggert
@ 2018-12-06  6:37                   ` Eli Zaretskii
  2018-12-06 19:08                     ` Paul Eggert
  0 siblings, 1 reply; 30+ messages in thread
From: Eli Zaretskii @ 2018-12-06  6:37 UTC (permalink / raw)
  To: Paul Eggert; +Cc: michael_heerdegen, rgm, monnier, emacs-devel

> Cc: michael_heerdegen@web.de, monnier@iro.umontreal.ca, emacs-devel@gnu.org
> From: Paul Eggert <eggert@cs.ucla.edu>
> Date: Wed, 5 Dec 2018 16:36:59 -0800
> 
> On 12/5/18 12:19 PM, Eli Zaretskii wrote:
> > emacsclient could have a command-line option for that.
> 
> emacsclient already has the '-s SOCKET' option. Plus, you can set 
> XDG_RUNTIME_DIR (or unset it) in the environment before invoking 
> emacsclient. As far as I can see, this should let users avoid the 
> problems Michael describes. (And if I'm wrong, what further emacsclient 
> option would be useful?)
> 
> > It's for letting users get back pre-27 behavior.  They could want it
> > for any number of reasons.
> Unsetting XDG_RUNTIME_DIR should get the pre-27 behavior in emacsclient.

How about mentioning these in NEWS, then?  Maybe in the manual as
well?



^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: emacsclient socket ownership
  2018-12-06  6:37                   ` Eli Zaretskii
@ 2018-12-06 19:08                     ` Paul Eggert
  2018-12-06 19:18                       ` Eli Zaretskii
  2018-12-06 20:26                       ` Glenn Morris
  0 siblings, 2 replies; 30+ messages in thread
From: Paul Eggert @ 2018-12-06 19:08 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: michael_heerdegen, rgm, monnier, emacs-devel

[-- Attachment #1: Type: text/plain, Size: 151 bytes --]

On 12/5/18 10:37 PM, Eli Zaretskii wrote:
> How about mentioning these in NEWS, then?  Maybe in the manual as
> well?

Sure I installed the attached.


[-- Attachment #2: 0001-Mention-unsetting-XDG_RUNTIME_DIR-in-doc.patch --]
[-- Type: text/x-patch, Size: 1662 bytes --]

From 2f613d37554660ca7119d4b0a6d5553b55807102 Mon Sep 17 00:00:00 2001
From: Paul Eggert <eggert@cs.ucla.edu>
Date: Thu, 6 Dec 2018 11:07:18 -0800
Subject: [PATCH] Mention unsetting XDG_RUNTIME_DIR in doc.

---
 doc/misc/efaq.texi | 5 ++++-
 etc/NEWS           | 2 ++
 2 files changed, 6 insertions(+), 1 deletion(-)

diff --git a/doc/misc/efaq.texi b/doc/misc/efaq.texi
index d457267c24..19770455f1 100644
--- a/doc/misc/efaq.texi
+++ b/doc/misc/efaq.texi
@@ -2009,7 +2009,10 @@ Using an already running Emacs process
 @file{server} in a well-known directory, typically
 @file{$XDG_RUNTIME_DIR/emacs} if Emacs is running under an X Window System
 desktop and @file{$TMPDIR/emacs@var{userid}} otherwise.  See the variable
-@code{server-socket-dir}.
+@code{server-socket-dir}.  Traditionally, Emacs used
+@file{$TMPDIR/emacs@var{userid}} even when running under an X desktop;
+if you prefer this traditional (and less-secure) behavior, unset
+@env{XDG_RUNTIME_DIR} before invoking Emacs and @samp{emacsclient}.
 
 To get your news reader, mail reader, etc., to invoke
 @samp{emacsclient}, try setting the environment variable @code{EDITOR}
diff --git a/etc/NEWS b/etc/NEWS
index 60cba9ed46..e7f2d606f8 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -133,6 +133,8 @@ to apply.
 as the directory for client/server sockets, if Emacs is running
 under an X Window System desktop that sets the XDG_RUNTIME_DIR
 environment variable to indicate where session sockets should go.
+To get the old and less-secure behavior, unset XDG_RUNTIME_DIR before
+invoking emacs and emacsclient.
 
 ---
 *** When run by root, emacsclient no longer connects to non-root sockets.
-- 
2.19.2


^ permalink raw reply related	[flat|nested] 30+ messages in thread

* Re: emacsclient socket ownership
  2018-12-06 19:08                     ` Paul Eggert
@ 2018-12-06 19:18                       ` Eli Zaretskii
  2018-12-06 20:26                       ` Glenn Morris
  1 sibling, 0 replies; 30+ messages in thread
From: Eli Zaretskii @ 2018-12-06 19:18 UTC (permalink / raw)
  To: Paul Eggert; +Cc: michael_heerdegen, rgm, monnier, emacs-devel

> Cc: rgm@gnu.org, michael_heerdegen@web.de, monnier@iro.umontreal.ca,
>  emacs-devel@gnu.org
> From: Paul Eggert <eggert@cs.ucla.edu>
> Date: Thu, 6 Dec 2018 11:08:33 -0800
> 
> On 12/5/18 10:37 PM, Eli Zaretskii wrote:
> > How about mentioning these in NEWS, then?  Maybe in the manual as
> > well?
> 
> Sure I installed the attached.

Thanks.



^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: emacsclient socket ownership
  2018-12-06 19:08                     ` Paul Eggert
  2018-12-06 19:18                       ` Eli Zaretskii
@ 2018-12-06 20:26                       ` Glenn Morris
  2018-12-06 21:01                         ` Paul Eggert
  1 sibling, 1 reply; 30+ messages in thread
From: Glenn Morris @ 2018-12-06 20:26 UTC (permalink / raw)
  To: Paul Eggert; +Cc: michael_heerdegen, Eli Zaretskii, monnier, emacs-devel

Paul Eggert wrote:

> Subject: [PATCH] Mention unsetting XDG_RUNTIME_DIR in doc.

XDG_RUNTIME_DIR isn't specific to Emacs, so the Emacs docs should not
suggest unsetting it, because this will affect external processes that
Emacs spawns. It would be better to refer to EMACS_SOCKET_NAME.



^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: emacsclient socket ownership
  2018-12-06 20:26                       ` Glenn Morris
@ 2018-12-06 21:01                         ` Paul Eggert
  0 siblings, 0 replies; 30+ messages in thread
From: Paul Eggert @ 2018-12-06 21:01 UTC (permalink / raw)
  To: Glenn Morris; +Cc: michael_heerdegen, Eli Zaretskii, monnier, emacs-devel

[-- Attachment #1: Type: text/plain, Size: 140 bytes --]

On 12/6/18 12:26 PM, Glenn Morris wrote:
> It would be better to refer to EMACS_SOCKET_NAME.

Sure, that's easy. I installed the attached.


[-- Attachment #2: 0001-Mention-EMACS_SOCKET_NAME-not-XDG_RUNTIME_DIR.patch --]
[-- Type: text/x-patch, Size: 1995 bytes --]

From 0e8e5da1e8da0752fc02bf590a17697af4c0afd3 Mon Sep 17 00:00:00 2001
From: Paul Eggert <eggert@cs.ucla.edu>
Date: Thu, 6 Dec 2018 12:59:42 -0800
Subject: [PATCH] Mention EMACS_SOCKET_NAME, not XDG_RUNTIME_DIR.

---
 doc/misc/efaq.texi | 8 ++++++--
 etc/NEWS           | 4 ++--
 2 files changed, 8 insertions(+), 4 deletions(-)

diff --git a/doc/misc/efaq.texi b/doc/misc/efaq.texi
index 19770455f1..18a857f7dc 100644
--- a/doc/misc/efaq.texi
+++ b/doc/misc/efaq.texi
@@ -2011,8 +2011,12 @@ Using an already running Emacs process
 desktop and @file{$TMPDIR/emacs@var{userid}} otherwise.  See the variable
 @code{server-socket-dir}.  Traditionally, Emacs used
 @file{$TMPDIR/emacs@var{userid}} even when running under an X desktop;
-if you prefer this traditional (and less-secure) behavior, unset
-@env{XDG_RUNTIME_DIR} before invoking Emacs and @samp{emacsclient}.
+if you prefer this traditional (and less-secure) behavior, you
+can set the environment variable @env{EMACS_SOCKET_NAME} to
+@samp{$TMPDIR/emacs@var{userid}/server} before invoking Emacs and
+@samp{emacsclient}, although it will be your responsibility to create
+the directory @samp{$TMPDIR/emacs@var{userid}} with appropriate
+ownership and permissions.
 
 To get your news reader, mail reader, etc., to invoke
 @samp{emacsclient}, try setting the environment variable @code{EDITOR}
diff --git a/etc/NEWS b/etc/NEWS
index e7f2d606f8..cad44f9233 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -133,8 +133,8 @@ to apply.
 as the directory for client/server sockets, if Emacs is running
 under an X Window System desktop that sets the XDG_RUNTIME_DIR
 environment variable to indicate where session sockets should go.
-To get the old and less-secure behavior, unset XDG_RUNTIME_DIR before
-invoking emacs and emacsclient.
+To get the old, less-secure behavior, you can set the
+EMACS_SOCKET_NAME environment variable to an appropriate value.
 
 ---
 *** When run by root, emacsclient no longer connects to non-root sockets.
-- 
2.19.2


^ permalink raw reply related	[flat|nested] 30+ messages in thread

end of thread, other threads:[~2018-12-06 21:01 UTC | newest]

Thread overview: 30+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-11-01 16:43 emacsclient socket ownership Glenn Morris
2018-11-02 15:38 ` Stefan Monnier
2018-11-02 16:53   ` Yuri Khan
2018-11-02 18:49     ` Stefan Monnier
2018-11-02 20:08       ` Paul Eggert
2018-11-02 20:30         ` Stefan Monnier
2018-11-02 21:06           ` Paul Eggert
2018-11-05  1:13   ` Glenn Morris
2018-11-05  4:46     ` Stefan Monnier
2018-11-05  7:26       ` Paul Eggert
2018-11-06 17:19         ` Daniel Pittman
2018-11-06 17:54           ` Stefan Monnier
2018-11-06 18:17           ` Paul Eggert
2018-11-13 18:21             ` Glenn Morris
2018-11-13 19:25               ` Eli Zaretskii
2018-11-05  5:12     ` Paul Eggert
2018-12-05 18:53       ` Michael Heerdegen
2018-12-05 19:38         ` Glenn Morris
2018-12-05 19:46           ` Eli Zaretskii
2018-12-05 20:02             ` Glenn Morris
2018-12-05 20:19               ` Eli Zaretskii
2018-12-06  0:36                 ` Paul Eggert
2018-12-06  6:37                   ` Eli Zaretskii
2018-12-06 19:08                     ` Paul Eggert
2018-12-06 19:18                       ` Eli Zaretskii
2018-12-06 20:26                       ` Glenn Morris
2018-12-06 21:01                         ` Paul Eggert
2018-12-05 20:33           ` Glenn Morris
2018-12-05 20:58           ` Michael Heerdegen
2018-12-06  0:49         ` Paul Eggert

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).