Stephen Powell wrote:
> ...logged in as root...
>    su barney
>    vi stuff
>    Error: messages not turned on: /dev/pts/0: Operation not permitted

The above is basically a normal result of the current environment.  At
another level it is a bug in nvi.  I suggest that you understand it
and then ignore it.  Or jump into the nvi code and fix it.

There are two issues.  First is that root needs to protect itself
against attacks against its smart terminal.  Therefore "messages"?
will be off by default for root.  What does that mean?  It means the
ability of processes to send text to the terminal.  Processes may be a
"biff" mail notification program saying "you have mail".  Or it may be
a user trying to "write(1)" (old Unix IM program) to your terminal.
Or it may be a local user (think student on a multiuser university
system) trying to crack into your terminal by sending smart terminal
escape sequences.  (Most terminals have those disabled these days for
security surrounding this issue too.  Because even for non-root smart
terminal attacks is still an issue.)

Non-Root User:
  $ ls -l /dev/pts/23
  crw--w---- 1 rwp tty 136, 23 Jun 29 19:02 /dev/pts/23

Root User:
  $ ls -l /dev/pts/11
  crw------- 1 root tty 136, 0 Jun 29 19:00 /dev/pts/11

Or in the old days on other systems I recall it being world writable
by other too.  But that may be an incorrect memory.

For root the standard is that no one else can write(1) to the
terminal.  (And probably "talk" and others too.)  See the man page for
mesg(1) for a small amount of additional information.  It was common
in the old days to see "mesg n" in root's dot profile file.

  man mesg

So back to your problem...  You are starting from a /dev/pts/X that is
owned by root and is not otherwise writable.  That is good.  Safe from
various attacks.  That is what you want.

But then the second issue comes into play.  You are using su to switch
user to a non-root user.  After you have switched to that user the pty
hasn't changed.  That is intentional due to the security risk nature
of root.  But it means that the non-root user processes can't make
changes to the tty device.

Now is where the nvi bug/misfeature comes into play.  There really
isn't any reason for nvi to need to touch the pty.  In my opinion it
should do nothing to it by default.  Emacs doesn't touch the pty.  If
you try your test case with emacs there will be no error printed.  Nor
with vim.  This is only a problem in the nvi program.  Why?  Because
it is trying to do too much.

What the nvi program is trying to do is to turn off messages to the
terminal while it is running.  It is trying to prevent other local
users from using write(1) to you while you are editing.

  man nvi

       mesg [on]
              Permit messages from other users.

In order to prevent messages from other users it tries to run chmod on
your pty device.  This can be seen with strace.

  $ strace -v -e chmod -o /tmp/nvi.strace.out nvi .bashrc
  $ cat /tmp/nvi.strace.out
  chmod("/dev/pts/0", 020620)             = -1 EPERM (Operation not permitted)
  chmod("/var/tmp/vi.recover/vi.ryTzPt", 0700) = 0
  chmod("/dev/pts/0", 020600)             = -1 EPERM (Operation not% permitted)

And those chmod's are the source of the messages that you are seeing.
The only way to fix this is to patch the nvi source code to avoid the
chmod calls.

Basically I ignore the errors.  The file is edited successfully
anyway.  It is just noise.  Annoying.  But since I know what is
happening and I only do that a very few times I just ignore it.

This would be a reasonable issue to submit as a bug against nvi.
However there are worse problems with nvi.  See Bug#497342 which has
been around for years which is much more annoying.  Filing bugs is
easy but if no one is around to fix them then it doesn't do much
good.  But this is a valid bug in my opinion.  Though much less of a
problem than Bug#497342 which is very annoying.  Especially since the
previous version 1.79 of nvi didn't have it.  But that is a different
story.

Hope this explanation helps!
Bob

Attachment: signature.asc
Description: Digital signature

Reply via email to