web-dev-qa-db-ja.com

「書き込み権限がオフになっている」他のユーザーに書き込めない

何らかの理由で、システム上の他のユーザーに書き込むことができません。

[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.

これを機能させるには、他に何を有効化/修正する必要がありますか?

5
Steve Robbins

_strace write_と_strace mesg_をテストすると、ttyの識別方法にわずかな違いがあることがわかります。

writeは、最初にreadlink("/proc/self/fd/0", ...)を実行してttyの名前を検索し、次に結果のパスでstat呼び出しを実行します。

一方、mesgfstat(1, ...)を呼び出します。これは、readlinkを使用するステップをスキップし、_/proc_ファイルシステムに依存しません。

また、異なるファイル記述子_0_と_1_も調べていることに注意してください。通常、対話型シェルには、_0_、_1_、および_2_のすべてが同じttyを参照するファイル記述子があります。たとえば、シェルを_0_と_1_で実行して、別の何かを参照している場合、たとえば、それらの1つをリダイレクトした場合、mesgwriteの出力の不一致が説明される可能性があります。

ファイル記述子が両方とも同じttyを参照している場合、不一致のもう1つの考えられる理由は、_/proc_マウントが期待どおりに動作していないか、ttyの文字デバイスiノードが置き換えられていることです。

1
kasperd

mesgを無効にして(nを返す)rootとして実行すると、同じエラーが発生します。コマンドmesg yを実行すると、書き込みを実行できます。 rootとして実行しているmesgが無効になっているユーザーに書き込むことができますが、非rootとしてはできません。

write機能を提供するユーティリティは複数あります。それらすべてが端末に書き込むことができる必要があります。ただし、rootとして実行しているため、権限は問題になりません。

0
BillThor