Пользователи системы


Доступ к файлу и каталогу



страница15/42
Дата01.12.2017
Размер5.38 Mb.
ТипПрограмма
1   ...   11   12   13   14   15   16   17   18   ...   42

Доступ к файлу и каталогу


Но довольно насилия. Пора Мефодию задуматься и о другой стороне работы с Linux: о правах и свободах. Для начала – о свободах. Таблица процессовсодержит список важнейших объектов системы – процессов. Однако не менее важны и объекты другого класса, те, что доступны в файловой системе: файлы, каталоги и специальные файлы (символьные ссылки, устройства и т. п.). По отношению к объектам файловой системы процессывыступают в роли действующих субъектов: именно процессы пользуются файлами, создают, удаляют и изменяют их. Факт использования файлапроцессом называется доступом к файлу, а способ воспользоваться файлом (каталогом, ссылкой и т. д.) – видом доступа.

Чтение, запись и использование


Видов доступа в файловой системе Linux три. Доступ на чтение (read) разрешает получать информацию из объекта, доступ на запись (write) – изменять информацию в объекте, а доступ на использование (execute) – выполнить операцию, специфичную для данного типа объектов. Доступ к объекту можно изменить командой chmod (change mode, сменить режим (доступа)). В простых случаях формат этой команды таков: chmod доступ объект, где объект – это имя файла, каталога и т. п., а доступ описывает вид доступа, который необходимо разрешить или запретить. Значение "+r" разрешает доступ к объекту на чтение (read), "-r" – запрещает. Аналогично "+w", "-w", "+x" и "-x" разрешают и запрещают доступ на запись (write) и использование (execute).

Доступ к файлу


Доступ к файлу на чтение и запись – довольно очевидные понятия:

[methody@localhost methody]$ date > tmpfile

[methody@localhost methody]$ cat tmpfile

Срд Сен 22 14:52:03 MSD 2004

[methody@localhost methody]$ chmod -r tmpfile

[methody@localhost methody]$ cat tmpfile

cat: tmpfile: Permission denied

[methody@localhost methody]$ date -u > tmpfile

[methody@localhost methody]$ chmod +r tmpfile; chmod -w tmpfile

[methody@localhost methody]$ cal > tmpfile

-bash: tmpfile: Permission denied

[methody@localhost methody]$ cat tmpfile

Срд Сен 22 10:52:35 UTC 2004

[methody@localhost methody]$ rm tmpfile

rm: удалить защищенный от записи обычный файл `tmpfile'? y

Пример 5.10. Что можно и что нельзя делать с файлом, доступ к которому ограничен (html, txt)

Следует заметить, что Мефодию известна операция перенаправления вывода – ">", с помощью которой он создает файлы в своем домашнем каталоге. Добавление "> файл" в командную строку приводит к тому, что все, что было бы выведено на экран терминала1), попадает в файл. Мефодий создает файл, проверяет, можно ли из него читать, командой cat, запрещает доступ на чтение и снова проверяет: на этот раз cat сообщает об отказе в доступе ("Permission denied"). Тем не менее, записать в этот файл, перенаправив выдачу date -u оказывается возможным, потому что доступ на запись не закрыт. Если же закрыть доступ на запись, а доступ на чтение открыть (Мефодий сделал это в одной командной строке, разделив команды символом ";"), невозможным станет изменение этого файла: попытка перенаправить вывод программы cal окажется неудачной, а чтение снова заработает. Сработает иудаление этого файла, хотя rm на всякий случай предупредит о том, что файл защищен от записи.

Доступ к файлу на использование означает возможность запустить этот файл в качестве программы, выполнить его. Например, все файлы из каталога /bin (в том числе /bin/ls, /bin/rm, /bin/cat, /bin/echo и /bin/date) –исполняемые, т. е. доступны для использования, и оттого их можно применять в командной строке в качестве команд. В общем случае необходимо указать путь к программе, например, /bin/ls, однако программы, находящиеся в каталогах, перечисленных в переменной окружения PATH, можно вызывать просто по имени: ls(подробнее о переменных окружения рассказано в лекции 8).

Сценарий


Исполняемые файлы в Linux бывают двух видов. Первый – это файлы в собственно исполняемом (executable) формате. Как правило, такие файлы – результат компиляции программ, написанных на классических языках программирования вроде Си. Попытка прочитать такой файл с помощью, например, cat не приведет ни к чему полезному: на экране начнут появляться разнообразные бессмысленные символы, в том числе управляющие. Это так называемые машинные коды – язык, понятный только компьютеру. В Linux используется несколько форматовисполняемых файлов, состоящих из машинных кодов и служебной информации, необходимой операционной системе для запуска программы: согласно этой информации, ядро Linux выделяет для запускаемой программы оперативную память, загружает программу из файла и передает ей управление. Большинство утилит Linux – программы именно такого, "двоичного" формата.

Второй вид исполняемых файлов – сценарииСценарий – это текстовый файл, предназначенный для обработки какой-нибудь утилитой. Чаще всего такая утилита – это интерпретатор некоторого языка программирования, а содержимое такого файла – программа на этом языке. Мефодий уже написал один сценарий для sh: бесконечно выполняющуюся программу loop. Поскольку к тому времени он еще не знал, как пользоваться chmod, ему всякий раз приходилось явно указывать интерпретатор (sh или bash), а сценарий передавать ему в виде параметра (см. примеры в разделе "Процессы").



сценарий Для выполнения сценария требуется программа-интерпретатор, путь к которой может быть указан в начале сценария в виде "#!путь_к_интерпретатору". Если интерпретатор не задан, им считается /bin/sh.

Если же сделать файл исполняемым, то ту же самую процедуру – запуск интерпретатора и передачу ему сценарияв качестве параметра командной строки – будет выполнять система:

[methody@localhost methody]$ cat > script

echo 'Hello, Methody!'

^D

[methody@localhost methody]$ ./script



-bash: ./script: Permission denied

[methody@localhost methody]$ sh script

Hello, Methody!

[methody@localhost methody]$ chmod +x script

[methody@localhost methody]$ ./script

Hello, Methody!



Пример 5.11. Создание простейшего исполняемого сценария (html, txt)

С первого раза Мефодию не удалось запустить сценарий script, потому что по умолчанию файл создается доступным для записи и чтения, но не для использования. После chmod +x файл стал исполняемым. Посколькудомашний каталог Мефодия не входил в PATH, пришлось использовать путь до созданного сценария, благо он оказался недлинным: "текущий_каталог/имя_сценария", т. е. ./script.

Если системе не дать специального указания, то в качестве интерпретатора она запускает стандартный shell –/bin/sh. Однако есть возможность написать сценарий для любой утилиты, в том числе и написанной самостоятельно. Для этого первыми двумя байтами сценария должны быть символы "#!", тогда всю его первую строку, начиная с третьего байта, система воспримет как команду обработки. Исполнение такого сценарияприведет к запуску указанной после "#!" команды, последним параметром которой будет имя самого файласценария:

[methody@localhost methody]$ cat > to.sort

#!/bin/sort

some


unsorted

lines


[methody@localhost methody]$ sort to.sort

#!/bin/sort

lines

some


unsorted

[methody@localhost methody]$ chmod +x to.sort

[methody@localhost methody]$ ./to.sort

#!/bin/sort

lines

some


unsorted

Пример 5.12. Создание sort-сценария (html, txt)

Утилита sort сортирует – расставляет в алфавитном, обратном алфавитном или другом порядке – строки передаваемого ей файла. То же самое произойдет, если сделать этот файл исполняемым, вписав в начало/bin/sort в качестве интерпретатора, а затем выполнить получившийся сценарий: запустится утилита sort, асценарий (файл с неотсортированными строками) будет передан ей в качестве параметра. Оформлять файлы, которые необходимо отсортировать, в виде sort-сценариев довольно бессмысленно – Мефодий просто хотел еще раз убедиться, что сценарий можно написать для чего угодно.


Доступ к каталогу


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

[methody@localhost methody]$ mkdir dir

[methody@localhost methody]$ date > dir/smallfile

[methody@localhost methody]$ /bin/ls dir

smallfile

[methody@localhost methody]$ cd dir

[methody@localhost dir]$ pwd

/home/methody/dir

[methody@localhost dir]$ cd

[methody@localhost methody]$ pwd

/home/methody

[methody@localhost methody]$ cat dir/smallfile

Срд Сен 22 13:15:20 MSD 2004

Пример 5.13. Доступ к каталогу на чтение и использование (html, txt)

Мефодий создал каталог dir и файл smallfile в нем. При смене текущего каталога bash автоматически изменил строку-подсказку: как было сказано в лекции 4, последнее слово этой подсказки – имя текущего каталога. Описанная в той же лекции команда pwd (print work directory) подтверждает это. Команда cd без параметров, как ей это и полагается, делает текущим домашний каталог пользователя:

[methody@localhost methody]$ chmod -x dir

[methody@localhost methody]$ ls dir

ls: dir/smallfile: Permission denied

[methody@localhost methody]$ alias ls

alias ls='ls --color=auto'

[methody@localhost methody]$ /bin/ls dir

smallfile

[methody@localhost methody]$ cd dir

-bash: cd: dir: Permission denied

[methody@localhost methody]$ cat dir/smallfile

cat: dir/smallfile: Permission denied

Пример 5.14. Доступ к каталогу на чтение без использования (html, txt)

Мефодий запретил доступ на использование каталога, ожидая, что просмотреть его содержимое с помощью lsбудет можно, а сделать его текущим и добыть содержимое находящегося в нем файла – нельзя. Неожиданно команда ls выдала ошибку. Проницательный Мефодий заметил, что имя файла – smallfile – команда ls все-таки добыла, но ей зачем-то понадобился и сам файл. Гуревич посоветовал посмотреть, что выдаст команда alias ls. Оказывается, вместо простого ls умный bash подставляет специфичную для Linux команду ls --color=auto, которая раскрашивает имена файлов в разные цвета в зависимости от их типа. Для того чтобы определить тип файла (например, запускаемый ли он) необходимо получить к нему доступ, а этого-то как раз нельзя сделать, когда невозможно использовать каталог. Если явно вызывать утилиту ls (/bin/ls ), поведение каталога становится вполне предсказуемым. Подробнее о том, чем занимается команда alias (о сокращениях), рассказывается в лекции 8:

[methody@localhost methody]$ chmod +x dir; chmod -r dir

[methody@localhost methody]$ /bin/ls dir

/bin/ls: dir: Permission denied

[methody@localhost methody]$ cat dir/smallfile

Срд Сен 22 13:15:20 MSD 2004

[methody@localhost methody]$ cd dir

[methody@localhost dir]$ /bin/ls

ls: .: Permission denied

[methody@localhost dir]$ cd

[methody@localhost methody]$



Пример 5.15. Доступ к каталогу на использование без чтения (html, txt)

Если каталог, доступный для чтения, но недоступный для использования, требуется редко, то каталог, доступный для использования, но недоступный для чтения, может пригодиться. Как видно из примера, получить список файлов, находящихся в таком каталоге, не удастся, но получить доступ к самим файлам, зная их имена – можно. Мефодий тут же захотел положить в созданный каталог какой-нибудь нужный, но очень секретный файл, чтобы имя этого файла никто, кроме близких друзей, не знал. Поразмыслив, Мефодий отказался от этой затеи: во-первых, не без оснований подозревая, что администратор (суперпользователь) все равно сможет просмотреть содержимое такого каталога, а во-вторых, потому что нужного, но очень секретного файла под рукой не оказалось:

[methody@localhost methody]$ rm -rf dir

rm: невозможно открыть каталог `dir': Permission denied

[methody@localhost methody]$ chmod -R +rwx dir

[methody@localhost methody]$ rm -rf dir



Пример 5.16. Рекурсивное удаление каталога (html, txt)

Потеряв интерес к секретным файлам, Мефодий решил удалить каталог dir. Из лекции 4 он знает, что это можно сделать не с помощью rmdir, а с помощью rm с ключом "-r" (recursive). Но сходу воспользоваться rm не удалось: чтение-то из каталога невозможно, и потому неизвестно, какие файлы там надо удалять. Поэтому сначала надо разрешить все виды доступа к dir. На всякий случай (а вдруг внутри dir попадется такой же нечитаемый подкаталог?) Мефодий выполняет рекурсивный вариант chmod – с ключом "-R" ("R" здесь большое, а не маленькое, потому что "-r" уже занято: означает запрет чтения). Команда chmod -R +rwx dir делает все файлы и каталоги вdir доступными для чтения, записи и использования; при этом все файлы становятся исполняемыми, но кого это тревожит, если следующей командой будет rm?





Поделитесь с Вашими друзьями:
1   ...   11   12   13   14   15   16   17   18   ...   42


База данных защищена авторским правом ©vossta.ru 2019
обратиться к администрации

    Главная страница