何らかの理由で、システム上の他のユーザーに書き込むことができません。
[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.
これを機能させるには、他に何を有効化/修正する必要がありますか?
_strace write
_と_strace mesg
_をテストすると、ttyの識別方法にわずかな違いがあることがわかります。
write
は、最初にreadlink("/proc/self/fd/0", ...)
を実行してtty
の名前を検索し、次に結果のパスでstat
呼び出しを実行します。
一方、mesg
はfstat(1, ...)
を呼び出します。これは、readlink
を使用するステップをスキップし、_/proc
_ファイルシステムに依存しません。
また、異なるファイル記述子_0
_と_1
_も調べていることに注意してください。通常、対話型シェルには、_0
_、_1
_、および_2
_のすべてが同じttyを参照するファイル記述子があります。たとえば、シェルを_0
_と_1
_で実行して、別の何かを参照している場合、たとえば、それらの1つをリダイレクトした場合、mesg
とwrite
の出力の不一致が説明される可能性があります。
ファイル記述子が両方とも同じttyを参照している場合、不一致のもう1つの考えられる理由は、_/proc
_マウントが期待どおりに動作していないか、ttyの文字デバイスiノードが置き換えられていることです。
mesg
を無効にして(n
を返す)rootとして実行すると、同じエラーが発生します。コマンドmesg y
を実行すると、書き込みを実行できます。 root
として実行しているmesg
が無効になっているユーザーに書き込むことができますが、非rootとしてはできません。
write
機能を提供するユーティリティは複数あります。それらすべてが端末に書き込むことができる必要があります。ただし、root
として実行しているため、権限は問題になりません。