Назад | Перейти на главную страницу

Chmod: определение каждого (777)

Если я изменю каталог a на 777. Что именно означает "Все"? Любой, кто подключается к FTP без пароля или чего-то еще?

У меня есть Wordpress CMS, и я пытаюсь установить плагин, однако он решил, что не может загрузить плагин во временный каталог, поэтому я предполагаю, что мне нужно что-то chmod, но не говорит что. Но я не хочу использовать chmod на 777 и давать кому-либо доступ к серверу?

Как сказал Кристофер Эванс, подключил подключаемые модули и временные каталоги к пользователю (или группе), от имени которого работает веб-сервер, и установил соответствующие разрешения. Если у вас нет доступа к каталогам, вы в значительной степени застряли с установкой режима на 777 (доступ для записи всем).

Что-то еще - это сокращенная лекция о разрешениях Unix - вы можете получить то же самое из man chmod с большим количеством деталей.


Три поля для разрешений unix: владелец, группа и Другой.

Каждое поле представляет собой битовую маску со значениями 1 (выполнить (& перечислить содержимое каталога)), 2 (Написать) и 4 (Читать)

Разрешения на файл определяются этими значениями -

  • 777 предоставляет Владельцу, Группе и «Другим» (людям, которые не являются ни владельцем, ни в группе) полный доступ для чтения, записи / изменения и выполнения / вывода содержимого соответствующего файла / каталога.
  • 007 предоставляет этот уровень доступа только «Другим» людям - у владельца не будет доступа
  • 770 предоставляет пользователю и группе полный доступ, но запрещает его всем остальным
    Вероятно, это то, что вы хотите сделать - оставить себя владельцем и передать каталог группе веб-сервера.
                           user  group other(anybody)
chmod 777 directory - gives rwx - rwx - rwx

r - read
w - write
x - execute

в основном вы даете полный доступ.

Я рекомендую указать плагин или временную директорию пользователю, от имени которого работает веб-сервер.

Подумайте об этом как о трех отдельных числах, и слева направо он определяет доступ, который есть у пользователя, группы и всех остальных. Под всеми это означает любого, кто вошел на ваш сервер (через FTP, SSH или что-то еще).

Если вы дадите всем 7 разрешений (что означает чтение, запись И выполнение), они смогут выполнять любые из этих действий. Что касается каталога, им нужно выполнить, чтобы открыть каталог, поэтому единственной реальной проблемой является w, что означает, что они могут создать новый файл внутри каталога или переименовать его. Если ваш веб-сервер может создавать файлы .php внутри DocumentRoot, это очень плохо в том случае, если ваш веб-сайт каким-то образом позволяет это (не так необычно, как вы думаете).

Wordpress пытается записать в каталог, поэтому ему действительно нужен доступ только как пользователю, от имени которого он запущен. К сожалению, я думаю, что Wordpress проверяет пользователя каталога, а не его способность писать в него, так что это может быть вашей проблемой. В качестве альтернативы создайте файл php внутри веб-сайта с помощью <?php phpinfo(); ?> внутри него. Перейдите на эту страницу и дважды убедитесь, что безопасный режим PHP не включен (еще одна распространенная проблема с написанием PHP). Также проверьте журнал ошибок для этого веб-сайта, поскольку он будет содержать много полезной информации.

Как было указано в других ответах, три числа определяют разрешение доступа в следующем порядке:

  • владелец (соответствует UID)
  • члены GID файлов (исключая владельца)
  • любой UID, не охваченный двумя предыдущими спецификациями.

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

[dave@store01 tmp]$ touch this
[dave@store01 tmp]$ sudo chmod 007 this
[dave@store01 tmp]$ ls -l this
-------rwx 1 dave users 0 Jan 20 22:15 this
[dave@store01 tmp]$ cat this
cat: this: Permission denied

Исключением является root. Любому файлу, над которым root имеет контроль, нельзя отказать root (*).

[root@store01 tmp]# touch that
[root@store01 tmp]# chmod 007 that
[root@store01 tmp]# ls -l that
-------rwx 1 root root 0 Jan 20 22:17 that
[root@store01 tmp]# cat that
[root@store01 tmp]#

В вашем конкретном случае chmod'ing каталога на 777 будет означать, что любой, кто может получить доступ к каталогу, будет иметь полный доступ ко всему. Проще всего предоставить 777 доступ к целевому каталогу, выполнить загрузку и сразу же заблокировать каталог. Вы НЕ хотите оставлять свою систему таким образом.

Я бы лично попытался понять, какой UID связан с неудачной транзакцией, и посмотреть, будет ли лучше работать предоставление другого владения или группового доступа, в зависимости как от того, что я хотел сделать немедленно, так и от того, что я мог бы захотеть сделать в будущем.

-

(*) = используя этот механизм. С ACL и расширенными атрибутами все становится сложнее, но это выходит за рамки этого вопроса.