Поиск файлов на основании их прав доступа (permissions)
Для начала немного о правах доступа к файлам. Правда доступа в Linux играют куда более существенную роль, нежели чем в Windows. Именно правами дается возможность на запуск файла. Так если в Windows файлы которые запускаются имеют расширение .exe, .bat и т.д., то в Linux исполняемые файлы вообще могут быть без расширений или иметь совсем уж нестандартное расширение. А вот можно ли его будет запустить или нет — за это отвечают как раз атрибуты файла.
Войдем в какую-нибудь директорию и там в консоли дадим команду ls -l
или зададим ей в качестве дополнительного параметра имя конкретного файла, например файла, задающего саму команду ls. (Обратите, кстати, внимание на эту возможность команды ls -l
— получить информацию о конкретном файле, а не о всех файлах каталога сразу).
$ ls –l (сейчас мы делаем личтинг текущей директории)
drwxr-xr-x 2 root root 4096 Sep 12 14:58 testdir
-rwxr-x--x 1 root root 0 Sep 11 22:25 testfile
$ ls -l /bin/ls (сейчас командой листинга мы получаем информацию о конкретном файле)
-rwxr-xr-x 1 root root 49940 Sep 12 1999 /bin/ls
Из этого вывода команды ls
нас интересуют первые 10 символов. Первый символ определяет тип файла, остальные — задают правда доступа. В нашем выводе d
определяет признак директории tesdir и - признак файла testfile и признак файла, задающего саму команду ls
. Все возможные признаки первого символа:
- - — обычный файл;
- d —каталог;
- b — файл блочного устройства;
- c — файл символьного устройства;
- s — доменное гнездо (socket);
- p — именованный канал (pipe);
- l — символическая ссылка (link).
Следующие девять символов отображают правда на доступ к файлу для пользователя, группы или тех кто не входит в группу пользователя и не является этим пользователем (назовем таких — другие). Возможные правда доступа: Read (r)— чтение, Write (w)— запись, eXecute (x)— исполнение. Если вместо этих букв стоит прочерк, то соответствующее право отсутствует. Данные права выставляются на три вышеперечисленные видов пользователей и видов групп пользователей.
Посредством выставления правильных прав на файл, директорию или их группы, пользователь может гибко контролировать доступ к созданным им файлам.
Для нашего тестового файла мы имеет следующие флаги: - rwx r-x --x . Это значит, что это обычный файл, который может читаться, модифицироваться и исполняться пользователем, может читаться и исполняться его группой, но не может модифицироваться, и все другие пользователи могут его только выполнять. Для выставления прав на файлы и/или директории, используется консольная команда chmod
. Параметры в данную команду могут передаваться двумя различными способами — числовой и буквенная.
Буквенный вариант:
[user]$ chmod [u|g|o|a][+|-|=][r|w|x} имя_файла
Первый атрибут — указание пользователей:
- u (т. е. пользователь, который является владельцем);
- g (группа);
- o (все пользователи, не входящие в группу, которой принадлежит данный файл);
- a (все пользователи системы, т. е. и владелец, и группа, и все остальные).
Второй атрибут — действия над правами:
- + (предоставляем право);
- – (лишаем соответствующего права);
- = (установить указанные права вместо имеющихся),
Третий атрибут — уточнение какие права изменяются:
- r (чтение);
- w (запись);
- x (выполнение).
Добавление права чтения для группы foo:
# chmod g+r foo
Всем пользователям системы даётся право на выполнение файла testfile:
# chmod a+x testfile
Удалить право на чтение и запись файла testfile для всех пользователей, кроме владельца:
# chmod go-rw testfile
Дать всем право на чтение, запись и выполнение файла testfile:
# chmod ugo+rwx testfile или chmod a+rwx testfile