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

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

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

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

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

3 ответа3

0

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

Восьмеричные значения разрешений безопасности позволяют явно устанавливать соответствующие разрешения для объекта. Вы можете получить явные разрешения, установленные для объекта с помощью 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

В 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

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

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

Да.

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

Вы можете, за исключением. Копирование "привилегированного" файла (файла с битами 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 и не поддерживает #! для скриптов.)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .