Тема: Сайт групп факультета ИТ МИРЭА :: Лекции и иже с ними

Прислано paxeefixee 24.02.2012 12:12
#1

Хотел исправить ошибку, которая была допущена на сегодняшней первой лекции по СПО с Воронковым.

Кого не было - сообщу, что он давал общие простейшие базовые сведения об Linux, и в частности затронул систему прав доступа к файлам и папкам ОС Unix. Как он говорил, в простейшем случае она состоит из 9 флагов - по 3 на пользователя-владельца файла, группы-владельца (она не обязательно является группой, в которую входит пользователь-владелец) и всех остальных. Каждая из 3 групп состоит из флагов:

Одним из способов их задания является запись в числовом формате в восьмеричной системе счисления (как раз о таком способе мы и говорили).
Выяснили, что для задания одной из групп флагов хватает одной цифры в восьмеричной системе счисления, и чтобы узнать, какая цифра нужна, предлагалось складывать 1, 2 и 4, дабы получить нужную комбинацию прав для пользователя, группы и остальных. При этом утверждалось, что

И ведь я помнил, что там как раз наоборот, но промолчал... А ведь так и есть: на самом деле


Т.е. например 2+4=6 дает права на запись и чтение, а не на запись и исполнение:
Код
[user@box ~]$ touch test.file # создаем пустой тестовый файл
[user@box ~]$ chmod -v 670 test.file # ключ -v для вывода пояснения действий программы chmod (его можно опустить)
права доступа «test.file» изменены с 0644 (rw-r--r--) на 0670 (rw-rwx---)



Соответственно строка rw-rwx--- и показывает эти 3 группы флагов:
  1. rw-: разрешены чтение и запись для владельца-пользователя,
  2. rwx: разрешены чтение, запись и исполнение для владельца-группы,
  3. ---: нет прав для всех остальных

(прочерком обозначено отсутствие права; то, что идет после символа # - комментарий и не воспринимается командной оболочкой bash; утилита chmod позволяет менять эти самые 9 флагов, chmod = change mode).
В двоичном битовом массиве получаем (исходя из того, что 4(8)=100(2)=r, 2(8)=010(2)=w, 1(8)=001(2)=x):

Прим.: тут, кстати, можно заметить, что мы все-таки спокойно можем дать право на запись, при этом не давая прав на чтение:
Код
[user@box ~]$ chmod 222 test.file # даем всем право только на запись
[user@box ~]$ echo "hello" > test.file # записываем в файл строку "hello"
[user@box ~]$ cat test.file # пытаемся вывести его содержимое на экран
cat: test.file: Отказано в доступе



Тут-то мы и наблюдаем ситуацию, когда мы можем что-то записать в файл, а вот прочитать его не можем :)
Потренироваться можно здесь: http://mistupid.com/internet/chmod.htm

Числовую запись, впрочем, необязательно запоминать или высчитывать (равно как и делать это из командной строки - большинство файловых менеджеров и оболочек предоставляют графический интерфейс для этого), при задании при помощи chmod можно воспользоваться и буквенной:
Код
[user@box ~]$ chmod -v u=rw,g=rwx,o= test.file # устанавливаем такие же права, что и выполнив chmod 670 test.file
права доступа «test.file» оставлены в виде 0670 (rw-rwx---)



При помощи "=" мы устанавливаем "начисто" новые права, вместо знака равно могли бы быть "+" или "-" для установки или снятия определенных флагов соответственно. Несколько групп флагов можно разделять запятой. Также первые буквы означают

Так, например, chmod g-x test.file убирает разрешение на исполнение для группы-владельца файла, а chmod a+rw test.file добавляет всем права на чтение и запись, не трогая флаги разрешений на исполнение.

Подробнее можно посмотреть например здесь:
https://secure.wikimedia.org/wikipedia/ru/wiki/Chmod
https://secure.wikimedia.org/wikibooks/ru/wiki/UNIX
http://www.opennet.ru/man.shtml?topic=chmod&category=1
http://www.opennet.ru/base/sys/file_access.txt.html

Если хотите попробовать - не обязательно устанавливать дистрибутив GNU/Linux себе на компьютер или виртуальную машину, можно воспользоваться эмулятором на JS:
http://bellard.org/jslinux/ (ядро 2.6.20)

И да, кстати, не думайте что в Windows подобного нет :)
Для примера на XP: в Проводнике Сервис->Свойства папки->Вид->снять галочку с "Использовать простой общий доступ к файлам"
На Win7: жмем Win+R->gpedit.msc (Групповые политики)->Enter->Конфигурация пользователя->Административные шаблоны->Компоненты Windows ->Проводник->удалить вкладку "Безопасность", поставить отключить.
А затем открываем окошко свойств любого файла/папки (на диске с ФС, поддерживающей права, напр. NTFS (напр. не FAT)) и открываем вкладку "Безопасность"; видим несколько похожую картину, не так ли?

Надеюсь, что это окажется кому-то полезным :)

Редактировал paxeefixee 25.03.2012 10:15