私は、ユーザー 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
ただし、変更した属性を含め、出力の読み方についての説明がまだ必要です。