chmod 1,2 и 4, что именно они делают?

348
WorkyNob

Мне было интересно иметь разрешение только на чтение, только запись или только выполнение и что это значит.

Если у меня есть только разрешение на запись, означает ли это, что я могу добавлять или заменять содержимое файла, но не читать текущее содержимое?

Еще более запутанно: если я только для чтения, почему я не могу просто скопировать файл и выполнить его тогда? Есть ли причина, по которой разрешение на чтение не дает автоматически разрешение на выполнение? Какой смысл не давать кому-либо разрешение на выполнение, если он может просто скопировать, вставить файл в другое место и выполнить его там?

И если они имеют только разрешение на исполнение, что это значит? Разве выполнение файла не требует от вас его просмотра?

И мой последний вопрос: где разница, если дано разрешение на выполнение? выполнение файла .txt не имеет смысла. В Windows есть, например, .exes, .bats и так далее. В системах Unix я знаю только .sh. Существует ли определенное количество расширений, определяющих исполняемые файлы? Если сейчас, как я могу найти один?

0
Барабанная дробь и победитель есть? Pimp Juice IT 6 лет назад 0

3 ответа на вопрос

0
Pimp Juice IT

Что это означает

Восьмеричные значения разрешений безопасности позволяют явно устанавливать соответствующие разрешения для объекта. Вы можете получить явные разрешения, которые вы установили для объекта chmod. См. Нижеприведенную таблицу для более подробной информации об этом.


Что я имею

Например, если вы хотите, чтобы кто-то мог выполнить файл для выполнения некоторой логики и в соответствии с Шебангом, не имея возможности читать содержимое или видеть логику, то эта гибкость есть.


Установите в соответствии с вашими потребностями

Разрешения безопасности устанавливаются в соответствии с вашими индивидуальными потребностями, поэтому, если какая-то конфигурация безопасности не имеет смысла для вас, вам просто не нужно использовать ее как таковую.


Числовые разрешения

Числовой формат chmod принимает до четырех восьмеричных цифр. Три крайние правые цифры относятся к разрешениям для владельца файла, группы и других пользователей соответственно. Опциональная первая цифра, когда 4 цифры даны, определяет специальные setuid, setgidи stickyфлаги.

Каждая цифра из трех крайних правых цифр представляет двоичное значение, биты которого управляют чтением, записью и выполнением соответственно, где 1средства позволяют, а 0средства - нет. Это похоже на восьмеричное обозначение, но представлено в десятичных числах.

# Permission rwx Binary 7 read, write and execute rwx 111 6 read and write rw- 110 5 read and execute r-x 101 4 read only r-- 100 3 write and execute -wx 011 2 write only -w- 010 1 execute only --x 001 0 none --- 000 

Например, 754позволит:

  • чтение, запись и выполнение для OWNER, как двоичного значения 7есть 111, это означает, что все биты включены.

  • чтение и выполнение для GROUP, поскольку двоичное значение 5равно 101, то есть чтение и выполнение включены, но запись выключена.

  • только для чтения EVERYONE ELSE, поскольку двоичное значение 4- это 100означает, что включено только чтение.

0
dbeasy

В UNIX chmod 1 = execute, чтение равно 4, а запись равно 2.

Chmod'ed 1 может сделать что угодно, и тогда текущая оболочка попытается запустить его, вы можете ввести его имя в качестве команды. В начале файла есть файл "magic", если первые пара символов - "#!" (шебанг), затем в следующей части строки указывается путь к исполняемому реальному исполняемому файлу и любые параметры, передаваемые в оболочку. Текстовый скрипт передается в этот исполняемый двоичный файл, чтобы прочитать файл и эффективно запустить его.

Вы спросили, не нужно ли выполнять чтение, ну да, но это будет на усмотрение бинарной программы, например, оболочки korn, чтобы показать вам файл. Как правило, это похоже на DRM, оно учитывается программами для проверки ваших прав доступа к файлу. Я установил подпрограммы в сценариях оболочки и пометил их - только исполняемый файл x, и его можно было запускать и, в основном, не читать (я думаю, что некоторые старые версии UNIX имели проблемы с этим, точно так же как специальные права доступа к каталогу для / tmp, но это другое тема).

Если сценарий помечен как 4 или «прочитан», он дает вам разрешение вывести файл на ваш терминал. Да, вы можете выполнить его в зависимости от того, как вы передали строки интерпретатору оболочки, во многих оболочках есть опция командной строки, позволяющая ему читать строки из заданного файла и запускать их, как если бы это был скрипт.

И для вас последний случай, chmod 2 - это разрешение на запись. Если вы предоставите только это, вы можете только добавить или уничтожить содержимое файла. Вы не можете уничтожить / отменить связь / удалить файл на основе прав доступа к файлу, строка, которая контролирует, существует ли файл или нет, находится внутри каталога (который я тоже хотел бы считать файлом).

Я бы сказал, что chmod 2 не очень полезен для файлов, но в каталоге вы можете создать своего рода «безопасную коробку» для других людей, которые будут отправлять вам файлы, как правило, ученикам в классе, и вы надеетесь, что они не перезаписывайте имена других студентов.

Должна быть некоторая помощь на страницах справочника "man chmod", и, надеюсь, у вас есть своя UNIX-подобная система, чтобы опробовать вещи в вашем собственном домашнем каталоге. Во многих странных случаях, таких как execute, действительно требуется только другой ID пользователя или друга, чтобы показать вам результаты различных разрешений.

0
grawity

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

Если у меня есть только разрешение на запись, означает ли это, что я могу добавлять или заменять содержимое файла, но не читать текущее содержимое?

Да.

Если я только для чтения, почему я не могу просто скопировать файл и выполнить его тогда?

Вы можете, за исключением. Копирование "привилегированного" файла (файла с битами setuid / setgid или возможностями файлов Linux) не будет копировать эти свойства. Вам также нужно место для его копирования, и есть возможность иметь систему, в которой раздел / home запрещает выполнение файлов из него.

То же самое можно сделать без копирования, вручную вызвав соответствующий интерпретатор. Например, вы можете запускать сценарии оболочки, sh /path/to/scriptдаже если они не являются исполняемыми. Двоичные файлы в Linux также имеют интерпретатор /lib/ld-linux.so.

И если они имеют только разрешение на исполнение, что это значит? Разве выполнение файла не требует от вас его просмотра?

Да, но это проверяется после того, как бит setuid обработан. Если вы выполняете программу setuid, она будет иметь привилегии владельца, поэтому только владелец должен + r.

Для каталогов + x имеет другое значение (это позволяет вам перемещаться по папке, то есть получать доступ к элементам внутри). Если вы знаете точное имя файла внутри, вы можете получить к нему доступ, просто + x, а не + r в каталоге.

Где это имеет значение, если дано разрешение на выполнение? выполнение файла .txt не имеет смысла. В Windows есть, например, .exes, .bats и так далее. В системах Unix я знаю только .sh. Существует ли определенное количество расширений, определяющих исполняемые файлы?

Исполняемость определяется не именем файла, а его содержимым. (В конце концов, вы выполняете содержимое, а не имя.)

Файл может быть исполняемым, когда ядро ​​знает, как загрузить его как единое целое. Ядро Linux понимает двоичные файлы ELF, а также файлы «script» с #!заголовком в качестве первой строки. (То же самое для большинства других Unix-подобных операционных систем.) Поэтому имеет смысл использовать + x только для этих двух типов файлов.

Например, если файл скрипта начинается с #!/bin/sh, то его выполнение выполняется так же, как и запуск вручную /bin/sh myscript.sh. То же самое можно применить к Python или Perl, Ruby, TCL, C #, Node / JavaScript или любому другому языку. (Опять же, обратите внимание, что суффикс имени файла не имеет значения - только магический заголовок.)

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

Windows находится в аналогичной ситуации. Он также имеет тот же бит разрешения «исполняемый файл», и хотя графический интерфейс требует суффикса .exe в именах файлов, реальное ядро ​​заботится только о содержимом файла. (Windows использует двоичные исполняемые файлы MZ / PE и не поддерживает #! Для сценариев.)

Похожие вопросы