'sudo chmod +w /etc/hosts' を実行できません

'sudo chmod +w /etc/hosts' を実行できません

私は、ユーザー xyz としてリモート VM ( を実行中) にログインしています。 を変更して、デフォルトでは表示されないネットワーク名をいくつか追加したいとESXi考えていました。/etc/hosts

私は最初に走ろうとした

sudo vi /etc/hosts

しかし、 に入るとvi、ファイルは読み取り専用であると表示されました。権限は次のとおりです。

>ls -l /etc/hosts
-rw-r--r-- 1 root root 416 2013-06-19 08:08 /etc/hosts

また、 のほぼすべてのファイル/etcには の がありlsattr-----------------e-のみがhostsあることに気付きました----i------------e-。例:

>lsattr /etc
...
-----------------e- ./python
----i------------e- ./hosts
...

そして試してみたところchmod、次のような結果が得られました:

>sudo chmod +w /etc/hosts
chmod: changing permissions of `/etc/hosts': Operation not permitted

ルート(私が するときに切り替えられるsudo)では何でもできるはずなので、これは奇妙だと思いました。私のsudoersファイルはごく普通に見えます:

  1 # /etc/sudoers
  2 #
  3 # This file MUST be edited with the 'visudo' command as root.
  4 #
  5 # See the man page for details on how to write a sudoers file.
  6 #
  7 
  8 Defaults        env_reset
  9 
 10 # Host alias specification
 11 
 12 # User alias specification
 13 
 14 # Cmnd alias specification
 15 
 16 # User privilege specification
 17 root    ALL=(ALL) ALL
 18 
 19 # Allow members of group sudo to execute any command after they have
 20 # provided their password
 21 # (Note that later entries override this, so you might need to move
 22 # it further down)
 23 %sudo ALL=(ALL) ALL
 24 #
 25 #includedir /etc/sudoers.d
 26 
 27 # Members of the admin group may gain root privileges
 28 %admin ALL=(ALL) ALL

なぜこのようなことが起こるのか、またそれを回避するにはどうすればよいのか、説明を求めています。

答え1

この問題の具体的な属性はi不変属性。

ファイルはマークされました不変

これは、ルートを含むすべてのユーザーがまったく変更できないことを意味します。ルートは属性を変更したり、不変属性を削除したりできますが、ルートが単に無視できるファイルへの標準の書き込み禁止権限とは異なり、ファイルに変更を加える前にまずこれを行う必要があります。

私の知る限り、これらの属性はext[234]ファイルシステムにのみ適用されます。

chattrのマニュアルページを参照できます。

$man chattr

利用可能な属性の完全なリストと説明を表示します。

私が実際に使ったことがあるのは i だけです。しかし、他には次のようなものがあります:

A: atime remains unmodified when accessed
a: can only be opened for writing in append-only mode
c: compressed automatically
j: all data is written to the journal before being written to the file
s: blocks are zeros when file is deleted
u: contents of file are saved when file is deleted for later undelete

他にも属性はありますが、それらは少々難解なので、chattr のマニュアル ページでさらに詳しい情報を確認できます。

答え2

拡張属性を変更してこれを削除するiと、問題は解決しました。

>sudo chattr -i /etc/hosts

lsattrsただし、変更した属性を含め、出力の読み方についての説明がまだ必要です。

関連情報