- Question: Q: can’t chmod directories
- All replies
- Question: Q: The correct syntax for a recursive chmod command in Terminal
- All replies
- Почти все о правах доступа в MacOS X, часть 2 (практическая)
- Средства работы с правами доступа
- Выбор инструмента для работы с правами доступа
- Установка прав доступа с помощью окна Info
- Установка прав доступа с помощью командной строки
Question: Q: can’t chmod directories
I’m running a web server (OSX 10.5). Recently, I’ve had trouble installing cms’s. The system refuses to allow me to change the permissions of directories and files. My attempts to «sudo chmod -r 777» cause the system to tell me the directory I specify doesn’t exist.
The directory does exist in both the terminal list and in the Finder window.
Without acknowledging that the directories exist, the system turns the directories I try to chmod into write-only «drop boxes». (I’m definitely typing 777, not 733.)
Unable to change permissions using the «get info» method either.
mini, G5, TiBook, Mac OS X (10.4.4)
Posted on Nov 30, 2010 6:44 PM
All replies
Loading page content
Page content loaded
Did you intend -R and not -r on that chmod And a sudo?
You might need to chown and chmod the parent directory.
And I will mention the risks of 777 for web-facing directories; that allows a breach to be written to disk.
Nov 30, 2010 8:06 PM
MrHoffman has given the chmod syntax corrections. Without knowing anything about what you are trying to do, I would think 755 would be a bit more secure as directory permissions, especially if you also change the owner to make it easy for you to add/remove content, but not for Apache to have write access.
Are there spaces or any other shell magic characters in the directory path. That will make the chmod command think the directory does not exist.
Can you show us the actual command including the path to the directory? To make sure the forum does not mess with your command, wrap the command in
sudo chmod -R 755 the path_to_thedirectory
Message was edited by: BobHarris
Dec 1, 2010 6:14 AM
I generally don’t allow the web server to write to web directories, and I deliberately configure the web server to not own the web directories and web-facing files.
Specific CMS packages and features will require a specific directory or two to be open to the web server and the CMS (for uploads, usually). Packages that require more than that can indicate a problem with the design of the CMS itself; a potential security problem.
If a CMS required everything be writable to the CMS and the web server package and particularly of the package needed 777, I’d evaluate alternatives.
I’ve seen cases where folks assign 777 to allow developers access, and I’d tend to look for ACLs for that. The ACL is configured enable the necessary access specific folks. And configured to continue to disallow write access to most or all of the web files and directories from the web server and the CMS.
Dec 1, 2010 6:23 AM
Sorry I wasn’t more clear earlier. I was hoping this was a known issue that would only need some keywords.
Never mind, for the moment, the purpose for which I’m doing this. This is a hobby project, so I’m not all that concerned about the security of the cms’s I’m fiddling with.
What I’m curious about is why:
1. I put a directory full of its own directories and files into my web directory.
2. I go into that directory and try to modify permissions, as in.
3. The response I then get is: «no such directory exists» (even though an immediate ‘ls’ command shows the directory is there.
4. Investigating the issue through the finder reveals that the directory in question has been turned into a «Drop Box».
An earlier post suggests that capital -R is different than -r in the syntax. What’s the difference, and would -r turn a directory into a drop box that not even root (at least, via sudo) can mess with?
Источник
Question: Q: The correct syntax for a recursive chmod command in Terminal
I need to set recursive permissions on an external HDD to ‘777’ or ‘all read&write’.
I have tried all of the following commands in Terminal:
sudo chmod 777 -r /Volumes/.
sudo chmod -r 777 /Volumes/.
sudo chmod a+rw -r /Volumes/.
sudo chmod -r a+rw /Volumes/.
. all of which being back a ‘no such file or directory’ error, e.g.
sudo chmod 777 -r /Volumes/232Gb
chmod: -r: No such file or directory
Can anyone confirm the correct syntax for this command?
Thanks in advance.
Message was edited by: ChippyDeluxe
MacBook, Mac OS X (10.6.6)
Posted on Apr 7, 2011 4:36 AM
All replies
Loading page content
Page content loaded
This is almost certainly not what you should do, but that wasn’t your question.
Apr 7, 2011 5:52 AM
If there were a solution that didn’t involve using Terminal, I would prefer that.
The reason I ask is, since my old iMac died and I connected my iMac’s external HDD to my MacBook, thousands of folders on my external HDD have ‘stop signs’ on them and require me to go to
Get Info -> Sharing & Permissions
. and add my MacBook username and set the privilege as «read and write». A bigger problem is, no backup software I’ve tried will back up this external HDD onto another external HDD any more, so I no longer have an up-to-date backup, which is very worrying.
I am looking for a way of fixing this, and the chmod command appears to be the answer.
Ideally, I don’t want any permission restrictions on my external HDD at all, so I can connect it to any machine without problems.
Источник
Почти все о правах доступа в MacOS X, часть 2 (практическая)
В первой части статьи мы рассмотрели что собой представляют права доступа в операционной системе MacOS X, и почему важно уметь управлять ими. Если Вы еще не прочитали первую (теоретическую) часть статьи, настоятельно рекомендуем сделать это.
В этой, второй части, мы научимся управлять правами доступа. И только в третей части поговорим об обьединении пользователей в группы и об организации многопользовательской работы на компьютере.
Как Вы уже могли заметить, всего есть девять исходных прав доступа, каждое из которых может быть включено или выключено (почему девять? Потому что есть Read, Write, Execute для Владельца, Группы и Других). Всего существует 512 возможных комбинаций из прав доступа! (Почему 512? Потому что 2^9=512.)
Дабы упростить жизнь пользователям, в компании Apple придумали имена для наиболее часто используемых комбинаций прав доступа, вот они:
- Read&Write: Пользователь может просматривать содержимое файла и вносить изменения;
- ReadOnly: Пользователь может просматривать содержимое, но НЕ может изменять его;
- WriteOnly: Пользователь может производить запись но не может просматривать содержимое. В первой части статьи я приводил пример использования права «WriteOnly» – это папка Drop Box которая есть у каждого пользователя. Все остальные пользователи могут сбрасывать файлы в папку Drop Box, но только владелец может видеть ее содержимое.
- No Access: Доступ к обьекту отсутствует.
Любая из этих четырех предустановленных настроек может быть применена к каждому из трех классов пользователей (Владельцу, Группе и Другим) через окно «Info» Файндера.
Средства работы с правами доступа
Стоит заметить что работать с правами доступа можно (и даже нужно!) не только с помощью окна «Info» которое вызывается из программы Finder. Для управления правами доступа Вы можете использовать на свой вкус:
- Окно «Info» программы Finder;
- Специализированные программы для работы с правами доступа от сторонних разработчиков (про них мы еще поговорим отдельно);
- Команды Unix и программу Терминал (это для любителей и знатоков командной строки).
Каждый из трех указанных выше способов работы с правами доступа имеет свои преимущества и недостатки, рассмотрим их…
Выбор инструмента для работы с правами доступа
Инструмент | Преимущества | Недостатки |
Окно Info (вызывается по нажатию Cmd+I) | Проще и интуитивно понятнее чем команды UNIX | Ограниченные возможности. Значительно уступает в гибкости командам UNIX |
Программы сторонних разработчиков | Предоставляют гораздо больше возможностей чем окно Info | Отсутствуют по умолчанию, приходится приобретать дополнительно |
UNIX команды | Значительно мощнее и гибче чем окно Info. Позволяют быстро управлять правами доступа, при условии конечно, что Вы хорошо знакомы с командной строкой UNIX | Для новичков абсолютно не понятны 😉 |
Сейчас мы рассмотрим установку прав доступа с помощью окна Info и с помощью командной строки. Обзоры программ для работы с правами доступа от сторонних разработчиков выйдут как дополнение к этой статье.
Установка прав доступа с помощью окна Info
Для простых задач устанавливайте права доступа при помощи окошка Info. Окно Info не обеспечивает такого гибкого способа управления правами доступа как, например, команды UNIX. К примеру, вы не можете через окно Info управлять индивидуально любым из девяти прав. Тем не менее, установка прав на доступ через окошко Info чрезвычайно проста, и такой способ вполне достаточен в ежедневных ситуациях.
Для установки прав доступа посредством окна Info проделайте следующее:
1. Выделите нужный обьект в Finder’е;
2. Из меню File выберите Get Info, или, что гораздо проще, нажмите клавишную комбинацию Cmd+I. Кликните по раскрывающему треугольничку около надписи Ownership & Permissions, чтобы раскрылась детальная информация как показано на рис. 1;
3. Теперь можете сделать следующее: а) выбрать что разрешено делать с обьектом вам — из выпадающего меню You Can. Это меню может быть неактивно, если у вас нет прав на изменение этого файла (рис. 1-а). б) установить права на доступ разным категориям пользователей, или поменять владельца (рис. 1-б).
Значек замка около выпадающего меню говорит о том что для изменений этих атрибутов нужно иметь права администратора. Если замочек закрыт, кликните по нему и введите имя и пароль для учетной записи администратора.
4. Если обьект который вы выбрали является папкой, и вы хотите применить определенные права доступа для всего содержимого этой папки, нажмите кнопку Apply to Enclosed Items (рис. 1-б).
5. Закройте окно Info.
Установка прав доступа с помощью командной строки
Обращение с командной строкой требует некоторых навыков, поэтому мы вначале повторим материал первой статьи, а именно – вспомним при помощи какой команды можно посмотреть права доступа, и немного поиграемся с командной строкой.
Запустите Terminal (/Applications/Utilities/Terminal) и введите команду:
Команда «ls» предназначена для вывода содержимого какого-либо каталога в алфавитном порядке. Мы же используем команду «ls» с флагом «-l» – это означает что мы хотим вывести подробную информацию о каждом файле либо каталоге.
Введя команду ls -l сразу после запуска Терминала вы должны увидеть содержимое своей домашней директории, вот например такое (у вас должно быть то же самое):
andrey$ ls -l
total 0
drwx—— 32 andrey andrey 1088 Jun 17 22:16 Desktop
drwx—— 27 andrey andrey 918 Jun 17 22:07 Documents
drwx—— 41 andrey andrey 1394 Jun 8 21:01 Library
drwx—— 3 andrey andrey 102 Mar 3 22:09 Movies
drwx—— 5 andrey andrey 170 May 3 22:13 Music
drwx—— 6 andrey andrey 204 Apr 10 21:53 Pictures
drwxr-xr-x 6 andrey andrey 204 May 28 22:51 Public
drwxr-xr-x 6 andrey andrey 204 May 10 20:16 Sites
Для сравнения, введите команду ls без флагов, вот так:
Вы должны увидеть что-то такое:
andrey$ ls
Desktop Library Music Public
Documents Movies Pictures Sites
Замечаете? В последнем случае мы не видим никакой дополнительной информации, только имена. А так как нас в первую очередь интересуют права доступа, то запомним правило:
Если хотим посмотреть права доступа то используем команду ls -l
Теперь научимся работать с этой командой. Если ввести
то Терминал выведет содержимое текущей папки (то есть той, в которой вы в данный момент находитесь). А если после ls -l указать путь к конкретной папке то получим список содержимого указанной папки. Вернитесь в Терминал и наберите например:
Вы должны получить список того что находится на вашем рабочем столе. Вот что у меня:
andrey$ ls -l Desktop
total 5832
drwxr-xr-x 13 andrey andrey 442 Mar 29 22:20 2art
drwxrwxrwx 24 andrey andrey 816 Mar 28 21:34 APSetup
-rwxr-xr-x 1 andrey andrey 1586160 Jun 1 2005 M4V56052.MP4
drwxrwxrwx 21 andrey andrey 714 Jun 17 13:59 Nikkor
-rw-r–r– 1 andrey andrey 338317 Jun 14 23:21 PermQuiz.pdf
-rw-r–r– 1 andrey andrey 384 Jun 16 08:29 Untitled 4.txt
drwxr-xr-x 11 andrey andrey 374 May 4 08:58 WiFi
-rw-r–r– 1 andrey andrey 222 Mar 22 23:21 WiFiLinks.txt
Как мы помним из первой части статьи, в начале каждой строки с информацией об обьекте находятся права доступа. Если присмотреться внимательно к приведенному выше примеру с содержимым рабочего стола, то можно заметить что некоторые записи начинаются с буквы «d», а некоторые с минуса «–». Что это значит? «d» значит что это каталог (папка), а «–» – обычный файл.
Еще пара советов, которые напрямую не относятся к правам доступа. Для перемещения по каталогам в UNIX следует использовать команду
Но если вы не знаете синтаксис этой команды, то воспользуйтесь следующим приемом – когда необходимо открыть какую-то папку в Терминале, наберите в Терминале команду:
а затем просто перетащите нужную папку из окна Finder’a в окно Терминала и нажмите Return (Enter). Или воспользуйтесь вот этим скриптом [ссылка].
Итак, мы умеем перемещаться по папкам на компьютере и проверять права доступа (командой ls -l). Теперь научимся настраивать права доступа.
Создайте где-нибудь с помощью команды touch пустой файл с именем foo, для этого введите команду:
(мы уже создавали таким образом файл в первой части статьи.) Это будет наш подопытный файл. Проверьте, какие права доступа по умолчанию поставила система на этот файл, для этого введите:
Вы должны увидеть что-то типа этого:
andrey$ ls -l foo
-rw-r–r– 1 andrey andrey 0 Jun 18 20:33 foo
Попробуем поизменять права доступа к файлу foo. Для изменения прав доступа в UNIX существует команда chmod . Эта команда позволяет установить права доступа по чтению, записи и выполнению для одного или более файлов. Синтаксис команды chmod следующий:
chmod код_защиты имя_файла(ов)
Код защиты, он же права доступа, может быть задан в символьном или восьмеричном виде.
Восьмеричный код защиты применяется, если необходимо установить полный код защиты файла. В этом случае невозможно установить одни права доступа без изменения остальных. Восьмеричный код защиты представляет собой число из 4 восьмеричных цифр, каждая из которых представляет три бита. Мы будем рассматривать только последние 3 восьмеричных цифры в коде защиты, поскольку первая цифра представляет информацию нас пока не интересующую. Биты обозначают следующие права доступа:
100 : Разрешение выполнения владельцу файла
200 : Разрешение записи владельцу файла
400 : Разрешение чтения владельцу файла
010 : Разрешение выполнения членам группы
020 : Разрешение записи членам группы
040 : Разрешение чтения членам группы
001 : Разрешение выполнения прочим пользователям
002 : Разрешение записи прочим пользователям
004 : Разрешение чтения прочим пользователям
Теперь представим, что мы хотим присвоить файлу какие-то особенные права доступа. Это очень просто! Пользуясь вышеприведенной табличкой сложите в столбик соответствующие нужным правам числа.
Например, давайте разрешим владельцу запись и чтение, членам группы вообще ничего не разрешим, а прочим пользователям разрешим чтение. Сложим в столбик соотв. числа:
200 разрешаем запись владельцу
+
400 разрешаем чтение владельцу
+
004 разрешаем чтение прочим пользователям
—-
=604
Мы получили число 604. Символьный аналог этих прав -rw—-r– .
Для того чтобы присвоить новые права файлу foo введите команду:
И проверьте результат командой:
Должно быть такое:
-rw—-r– 1 andrey andrey 0 Jun 18 20:33 foo .
С восьмеричным представлением прав доступа разобрались. Используйте восьмеричное представление когда хотите изменить все права доступа к файлу. Также удобно использовать восьмеричное представление в программах типа Transmit (гораздо удобнее чем ставить флажки мышкой).
Символьная форма позволяет установить выборочные биты кода защиты и имеет вид:
u – владелец,
g – группа,
o – прочие,
a – все категории пользователей (по умолчанию),
+ – добавить к уже существующим битам прав указанные,
– – убрать указанные биты,
= – заменить на указанные биты,
r – чтение,
w – запись,
x – выполнение,
s – смена идентификатора пользователя или группы (мы это использовать не будем. Намек для любознательных – это имеет отношение к той первой восьмеричной цифре которую мы договорились не рассматривать, так как материал выходит за рамки данной статьи),
t – сохранение образа файла в области выгрузки (тоже не используем и не рассматриваем по той же причине),
ugo – оставить текущие значения бита доступа.
В первую очередь рассмотрим операции [+][-][=]. Для примера, вначале очистим все права на доступ к файлу foo (то есть отменим доступ совсем):
Проверим результат командой ls -l, должно быть:
———- 1 andrey andrey 0 Jun 18 20:33 foo
Теперь разрешим всем запись и чтение:
В результате должны получить:
-rw-rw-rw- 1 andrey andrey 0 Jun 18 20:33 foo
Для демонстрации работы операции [=] наберите теперь:
—x–x–x 1 andrey andrey 0 Jun 18 20:33 foo
То есть в отличие от операции [+], операция [=] не добавляет указанные биты к существующим, а перезаписывает существующие на указанные.
Напоследок, установим более «приличные» права на наш многострадальный файл foo, а именно – разрешим владельцу чтение и запись, всем остальным – только чтение:
chmod a=r foo
chmod u+w foo
В результате должны получить:
-rw-r–r– 1 andrey andrey 0 Jun 18 20:33 foo
БОЛЬШАЯ И УБЕДИТЕЛЬНАЯ ПРОСЬБА ВСЕ ЭКСПЕРИМЕНТЫ ПО ИЗМЕНЕНИЮ ПРАВ ДОСТУПА ПРОВОДИТЬ ТОЛЬКО С ТЕСТОВЫМ ФАЙЛОМ. НИ В КОЕМ СЛУЧАЕ НЕ ЭКСПЕРИМЕНТИРУЙТЕ НА СВОИХ РАБОЧИХ ФАЙЛАХ, ИНАЧЕ МОЖЕТЕ ПОТЕРЯТЬ К НИМ ДОСТУП. ВСЕ ИЗМЕНЕНИЯ ВНОСИМЫЕ КОМАНДОЙ CHMOD СРАЗУ ПРОВЕРЯЙТЕ С ПОМОЩЬЮ КОМАНДЫ LS -L.
Файл foo можно удалить если он более не нужен:
rm foo
Вот мы и разобрались с управлением правами доступа. Самое время рассказать о том, как организовывать многопользовательскую работу на компьютере, создавать группы, обьединять в них пользователей и правильно выставлять права доступа для эффективной совместной работы. Но ввиду и так большого размера этой статьи, мы поговорим об этом в следующей, третей части. Следите за публикациями на нашем сайте!
Литература
Журнал MACWORLD
Книжка Р. Готье, «Руководство по операционной системе UNIX»
Источник