20 окт. 2009 г.

Применение атрибутов файлов в Linux

Среди широко применяемых свойств файлов и каталогов находятся владелец и его группа, права доступа и ACL. Но кроме них (по крайней мере в файловых системах ext2 и ext3) существуют атрибуты. Большинство из них предназначено для довольно сомнительных целей или требуют экспериментальных патчей, но есть два достаточно полезных, которые мы здесь и рассмотрим.

Установка атрибутов файлов

Вы можете установить атрибуты с помощью команды chattr. Ее использование выглядит примерно так:
chattr [-R] <-|+|=><список атрибутов>

Ключ -R приводит к рекурсивному изменению для всего каталога, «-», «+» и «=» удаляют, добавляют, или устанавливают единственными перечисленные за ними атрибуты.

Атрибут «i» (immutable) — полный запрет изменений

Этот атрибут позволяет запретить любые изменения файла или каталога. Пользователи не смогут ни изменить содержание, ни перезаписать его, ни удалить, ни создать жесткую ссылку. Может пригодится, для защиты от случайного удаления, например файла с правилами использования или справкой для пользователя, или запрета изменения им собственных настроек.Рассмотрим его в действии.

[baturin@zax /tmp/testdir]$mkdir ./test                    # Создаем каталог
[baturin@zax /tmp/testdir]$touch ./testfile                # Создаем файл  
[baturin@zax /tmp/testdir]$sudo chattr +i ./test           
[baturin@zax /tmp/testdir]$sudo chattr +i ./testfile       # Присваиваем атрибут i
[baturin@zax /tmp/testdir]$ls -al
итого 28
drwxr-xr-x  3 baturin users  4096 Окт 20 08:33 .           # Убеждаемся, что все имеет права
drwxrwxrwt 54 root    root  20480 Окт 20 08:30 ..          # на запись для владельца
drwxr-xr-x  2 baturin users  4096 Окт 20 08:33 test
-rw-r--r--  1 baturin users     0 Окт 20 08:33 testfile    
[baturin@zax /tmp/testdir]$
[baturin@zax /tmp/testdir]$echo "Test" > ./testfile        # Убеждаемся, что мы не можем писать
zsh: Отказано в доступе: ./testfile
[baturin@zax /tmp/testdir]$echo "test" >> ./testfile       # И дописать в конец тоже не можем
zsh: Отказано в доступе: ./testfile
[baturin@zax /tmp/testdir]$rm ./testfile                   # И уж тем более удалить
rm: невозможно удалить `./testfile': Операция не позволяется
[baturin@zax /tmp/testdir]$ln ./testfile ./testlink        # Жесткую ссылку создать не удастся
ln: создание жесткой ссылки `./testlink' => `./testfile': Операция не позволяется
[baturin@zax /tmp/testdir]$                                # Теперь то же с каталогом
[baturin@zax /tmp/testdir]$mkdir ./test/dir
mkdir: невозможно создать каталог `./test/dir': Отказано в доступе
[baturin@zax /tmp/testdir]$rmdir ./test 
rmdir: failed to remove `./test': Операция не позволяется
[baturin@zax /tmp/testdir]$
[baturin@zax /tmp/testdir]$sudo rm ./testfile              # Даже root не сможет ничего сделать
rm: невозможно удалить `./testfile': Операция не позволяется
[baturin@zax /tmp/testdir]$sudo chattr -i ./testfile       # Пока не снимет атрибут
[baturin@zax /tmp/testdir]$sudo rm ./testfile       
 

Атрибут «a» (append only) — разрешение записи только в конец файла

К содержанию файла с эти атрибутом можно будет только добавить что-то в конец, но не перезаписать существеющее. Пригодится, к примеру, для файла с просьбами к системному администратору. Каждый пользователь сможет добавить туда свою, но не сможет повлиять на чужие. Смотрим в действии:

[baturin@zax /tmp/testdir]$touch ./append_only
[baturin@zax /tmp/testdir]$sudo chattr +a ./append_only 
[baturin@zax /tmp/testdir]$echo "test" > ./append_only 
zsh: Операция не позволяется: ./append_only
[baturin@zax /tmp/testdir]$echo "test" >> ./append_only
[baturin@zax /tmp/testdir]$echo "test test" >> ./append_only
[baturin@zax /tmp/testdir]$rm ./append_only 
rm: невозможно удалить `./append_only': Операция не позволяется

Заключение

На сегодня пока все, надеюсь, эти сведения окажутся полезными. Можно только добавить, что просмотреть атрибуты файла вы сможете командой lsattr, а в man chattr и в man lsattr найти дополнительные сведения.

1 комментарий:

  1. не помогло, все равно не могу удалить файл...

    ОтветитьУдалить