Я вошел в свою удаленную виртуальную машину (заканчивается ESXi
) как пользователь xyz. Я хотел изменить свой, /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
Я подумал, что это странно, потому что root (к которому я переключаюсь, когда я 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
являетсянеизменныйатрибут.
Файл был помеченнеизменный.
Это означает, что он не может быть изменен вообще никаким пользователем, включая root. Root по-прежнему может изменять атрибуты и удалять атрибут immutable, но должен сделать это перед внесением изменений в файл, в отличие от стандартных разрешений no-write для файла, которые root может просто игнорировать.
Насколько мне известно, эти атрибуты применимы только к файловым системам 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
выходные данные, включая атрибут, который я изменил.