По некоторым причинам я не могу записать в других пользователей в моей системе.
[root@hostname ~]# write
write: you have write permission turned off.
[root@hostname ~]# mesg y
[root@hostname ~]# mesg
is y
[root@hostname ~]# write
write: you have write permission turned off.
Какие потребности быть позволенным/исправленным, чтобы это работало?
При запуске от имени пользователя root с отключенным mesg
(возвращая n
) я получаю ту же ошибку, что и вы. Выполнение команды mesg y
позволяет мне выполнить запись. Запустившись как root
, я могу писать пользователям, у которых отключено mesg
, чего я не могу сделать как не root.
Есть несколько утилит, которые предоставляют запись
функциональность. Все они должны иметь возможность писать на терминалы. Однако, поскольку вы работаете с правами root
, проблем быть не должно.
Тестирование strace write
и strace mesg
показывает небольшое различие в том, как они идентифицируют ваш tty.
write
сначала выполнит readlink ("/ proc / self / fd / 0", ...)
, чтобы найти имя tty
и t тогда выполните вызов stat
для полученного пути.
mesg
с другой стороны вызовет fstat (1, ...)
, который пропускает шаг использования readlink
и не полагается на файловую систему / proc
.
Обратите внимание, что они также смотрят на разные файловые дескрипторы 0
vs 1
. Обычно интерактивная оболочка имеет файловые дескрипторы 0
, 1
и 2
, которые все ссылаются на один и тот же tty. Если вы каким-то образом заставили свою оболочку работать с 0
и 1
, ссылаясь на что-то другое, например, если вы перенаправили один из них, это может объяснить несоответствие между выводом из mesg
и пишут
.
Если файловые дескрипторы ссылаются на один и тот же tty, другой возможной причиной несоответствия может быть то, что ваше монтирование / proc
работает не так, как ожидалось или был заменен inode символьного устройства для вашего tty.