Linux не работает chmod

Обновлено: 03.07.2024

У меня есть сценарий, который мне нужно выполнить на разделе NTFS. Разрешение скрипта установлено в 600.

Я попытался изменить разрешения, запустив chmod 755 script.sh, который не сообщает об ошибке или что-то еще, - но он также не изменяет разрешения на файл:

$ stat script.sh File: `script.sh' Size: 297070 Blocks: 584 IO Block: 4096 regular file Device: 811h/2065d Inode: 35515 Links: 1 Access: (0600/-rw-------) Uid: ( 1000/ xxxxxx) Gid: ( 1000/ xxxxxx) Access: 2010-09-30 14:05:16.041621000 -0700 Modify: 2010-09-30 14:05:05.070157000 -0700 Change: 2010-09-30 14:05:05.070475000 -0700 $ chmod 755 script.sh $ stat script.sh File: `script.sh' Size: 297070 Blocks: 584 IO Block: 4096 regular file Device: 811h/2065d Inode: 35515 Links: 1 Access: (0600/-rw-------) Uid: ( 1000/ xxxxxx) Gid: ( 1000/ xxxxxx) Access: 2010-09-30 14:05:16.041621000 -0700 Modify: 2010-09-30 14:05:05.070157000 -0700 Change: 2010-09-30 14:05:05.070475000 -0700

Как вы можете видеть, он остается неизменным.

Режим определяется настройками монтирования раздела (вы не можете изменить его с помощью chmod).

Для '755' для файлов и '777' в каталогах вы использовали бы что-то вроде

sudo mount -t ntfs -o rw,auto,user,fmask=0022,dmask=0000 /dev/whatever /mnt/whatever

Режим определяется настройками монтирования раздела (вы не можете изменить его с помощью chmod).

Для '755' для файлов и '777' в каталогах вы использовали бы что-то вроде

sudo mount -t ntfs -o rw,auto,user,fmask=0022,dmask=0000 /dev/whatever /mnt/whatever

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

В дополнение к установке fmask и / или dmask в ответе htorque выше, если вы хотите выполнить сценарии на диске, мне также нужно было установить параметр монтирования «exec».

Итак, пример будет:

sudo mount -t ntfs -o rw,auto,user,fmask=0022,dmask=0000,exec /dev/whatever /mnt/whatever

Сделайте это один раз для каждого раздела NTFS!

Я проверяю его с помощью Сделайте это один раз для каждого раздела NTFS, есть! , и разрешения влияют на ОС Windows! Я меняю права на свой домашний каталог на Windows, и когда я снова использовал Windows, я мог видеть, что пользователь был сломан!

Вы всегда можете явно вызвать интерпретатор сценария, и в этом случае разрешения на выполнение не требуются. Если сценарий использует bash, как это можно проверить, просмотрев первую строку скрипта, просто запустите

Обратите внимание, что сценарий вызывает другие скрипты или двоичные файлы в одном разделе, это не будет Работа. Также обратите внимание, что стратегия не работает с двоичными файлами, а не с текстовыми файлами сценариев, написанными в Bash Script, Perl, Python и т. Д.

Для разделов NTFS используйте опцию permissions в fstab.

Сначала отключите раздел ntfs.

Определите свой UUID раздела с помощью blkid

Затем отредактируйте /etc/fstab

И добавьте или отредактируйте строку для раздела ntfs

Сделайте точку монтирования (если необходимо)

sudo mkdir /media/windows

Теперь смонтируйте раздел

Параметры, которые я дал вам, auto, будут автоматически монтировать раздел при загрузке, а users позволяет пользователям монтировать и umount.

Затем вы можете использовать chown и chmod в разделе ntfs.

В отличие от большинства людей, NTFS является файловой системой, совместимой с POSIX¹, и возможно использование разрешений для NTFS.

Чтобы включить это, вам нужен «файл сопоставления пользователя» или просто укажите параметр permissions при установке (если не требуется совместимость с Windows). Это отображает пользователей Linux в вашей системе с идентификаторами пользователей, такими как NTFS / Windows, которые используют их внутри.

См. Справочную страницу ntfs-3g для получения некоторой информации и некоторых примеров. Если вам нужна дополнительная информация, ознакомьтесь с дополнительной документацией о правах собственности и разрешениях ntfs-3g.

(Обратите внимание, что это не работает в файловых системах FAT.)

¹ Да, это также может хранить имена файлов, которые действительны в linux / unix, но не под Windows, поддерживает символические ссылки и amp; hardlinks и т. д.

Установите раздел NTFS на USB-накопитель с пользовательскими разрешениями и владельцем

В Linux режим NTFS (и FAT32) определяется настройками монтирования раздела. Вы не можете изменить его с помощью chmod.

опции монтирования sdb1, изменить в соответствии с буквой диска и номером раздела в вашем случае. Общий синтаксис - sdxn, где x - буква диска, а n - номер раздела, как показано, например, sudo lsblk -f

Установите раздел NTFS

, чтобы соответствовать букве диска и номеру раздела в вашем случае (без разрешения на выполнение для файлов, без доступа к «другим») ),

Пример 2 (с разрешениями на выполнение для файлов, без доступа для «других»),

Отключите раздел NTFS. [ ! d14] /mnt/sd1/this-script , и вы также можете запускать исполняемые программы из этого места (не рекомендуется).

В этом случае вы можете запустить скрипт this-script с помощью

chmod в Linux

Команда chmod используется для изменения прав доступа к файлам или каталогам.

В Linux и других Unix-подобных операционных системах для каждого файла существует набор правил, которые определяют, кто и как может получить доступ к этому файлу. Эти правила называются правами доступа к файлам или режимами файлов. Имя команды chmod означает «режим изменения» и используется для определения способа доступа к файлу.

В общем виде команды chmod выглядят так:

chmod параметры разрешения имя файла

Если параметры не указаны, chmod изменяет разрешения файла, указанного в имени файла, на разрешения, указанные в разрешениях.

Разрешения определяют права доступа для владельца файла («пользователь»), членов группы, владеющей файлом («группа»), и всех остальных («другие»). Существует два способа представления этих разрешений: с помощью символов (буквенно-цифровых символов) или восьмеричных чисел (цифры от 0 до 7).

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

  1. пользователь (user) мог читать (read), писать (write) и выполнять (xecute) его;
  2. члены группы (group) могут прочитать (read) и выполнить (xecute) его;
  3. а также другие (others) могут только читать (read) его.

Эта команда будет выглядеть вот так:

chmod u=rwx,g=rx,o=r myfile

В этом примере используется символьная запись разрешений. Буквы u, g и o обозначают «пользователь», «группа» и «другое». Знак равенства («=») означает «установить права доступа именно так», а буквы «r», «w» и «x» означают «чтение», «запись» и «выполнение» соответственно. Запятые разделяют различные классы разрешений, и между ними нет пробелов.

Вот эквивалентная команда, использующая восьмеричное обозначение разрешений:

chmod 754 myfile

Здесь цифры 7, 5 и 4 каждая по отдельности представляют разрешения для пользователя, группы и других в этом порядке. Каждая цифра представляет собой комбинацию чисел 4, 2, 1 и 0:

  • 4 означает «читать»,
  • 2 означает «записать»,
  • 1 означает «выполнить»,
  • 0 означает «нет разрешения».

Таким образом, 7 представляет собой комбинацию разрешений 4 + 2 + 1 (read, write, and execute), 5 - это 4 + 0 + 1 (read, no write, and execute), а 4 - 4 + 0 + 0 (read, no write, and no execute).

Синтаксис chmod

Параметры chmod

-c, --changes Подобно --verbose, но выдает подробный вывод только тогда, когда изменение действительно сделано.

--no-preserve-root Не обрабатывать '/' (корневой каталог) каким-либо особым образом, который является настройкой по умолчанию.

--preserve-root Не работать рекурсивно на «/».

--reference=RFILE Установить разрешения, соответствующие разрешениям файла RFILE, игнорируя любой указанный РЕЖИМ.

-R, --recursive Менять файлы и каталоги рекурсивно.

--version Вывести информацию о версии и выйти.

Техническое описание

chmod изменяет режим файла каждого указанного ФАЙЛА в соответствии с MODE, который может быть либо символическим представлением вносимых изменений, либо восьмеричным числом, представляющим битовую комбинацию для битов нового режима.

Формат символического режима:

где perms - это ноль или более букв из набора r, w, x, X, s и t, или одна буква из набора u, g и o. Можно указать несколько символьных режимов, разделенных запятыми.

Комбинация букв u, g, o и элементов управления, которые изменят доступ пользователей к файлу: пользователь, которому он принадлежит (u), другие пользователи в группе файла (g), другие пользователи, которых нет в файле группа (o) или все пользователи (a). Если ничего из этого не дано, эффект будет таким, как если бы был задан a, но биты, которые установлены в umask, не затрагивались.

Оператор (+) вызывает добавление выбранных битов режима файла к существующим битам режима файла каждого файла; " -" вызывает их удаление; и " -setuid-setgid">Биты Setuid и Setgid

chmod очищает бит set-group-ID обычного файла, если идентификатор группы файла не совпадает с эффективным идентификатором группы пользователя или одним из идентификаторов дополнительной группы пользователя, если только у пользователя нет соответствующих привилегий. Дополнительные ограничения могут привести к игнорированию битов set-user-ID и set-group-ID в MODE или RFILE. Это поведение зависит от политики и функциональности основного системного вызова chmod. В случае сомнений проверьте поведение системы.

chmod сохраняет биты set-user-ID и set-group-ID каталога, если вы не укажете иное. Вы можете установить или очистить биты с помощью символических режимов, таких как u + s и g-s, и вы можете установить (но не очистить) биты с помощью числового режима.

Флаг ограниченного удаления (или «Sticky Bit»)

Ограниченный флаг удаления или закрепленный бит - это один бит, интерпретация которого зависит от типа файла. Это предотвращает удаление или переименование файла в каталоге пользователям, которые не владеют файлом или каталогом; это называется флагом ограниченного удаления для каталога и обычно встречается в каталогах, доступных для записи во всем мире, таких как / tmp. Для обычных файлов в некоторых старых системах этот бит сохраняет текстовое изображение программы на устройстве подкачки, поэтому при запуске он загружается быстрее; это называется липким битом.

Как посмотреть разрешения файла

Быстрый и простой способ составить список прав доступа к файлу с помощью опции длинного списка (-l) команды ls. Например, чтобы просмотреть разрешения для file.txt, вы можете использовать команду:

. который будет отображать вывод, который выглядит следующим образом:

Примеры использования chmod

Устанавливает для файла file.htm права «владелец может читать и писать; группа может только читать; другие могут только читать».

Рекурсивно (-R) меняет разрешения для каталога myfiles и всех его папок и файлов на режим 755. Пользователь может читать, записывать и выполнять; члены группы и другие пользователи могут читать и выполнять, но не могут писать.

Меняет разрешения для владельца example.jpg, чтобы владелец мог читать и записывать файл. Не меняет права доступа для группы или для других.

Устанавливает бит «Set-User-ID» файла comphope.txt, чтобы каждый, кто пытается получить доступ к этому файлу, сделал это так, как если бы он был владельцем файла.

Противоположность вышеупомянутой команды; снимает бит SUID

Устанавливает разрешения для file.cgi на «чтение, запись и выполнение владельцем» и «чтение и выполнение группой и всеми остальными».

Устанавливает разрешение file.txt на «чтение и запись всеми».

Выполняет то же самое, что и вышеприведенная команда, используя символическую запись.

Связанные команды

chown - Изменить владельца файлов или каталогов.
getfacl - Показать списки контроля доступа к файлам.
ls - список содержимого каталога или каталогов.


В расширении файла в Linux нет ничего особенного, это просто часть имени файла. Подбор файлов оболочки использует * для всех персонажей, так что вы можете просто использовать chmod a+x * вместо .

  • Это правильно, если в папке нет файла типа foo.bar, и кажется, что команда sudo chmod a+x directory/* сбой из-за неправильного каталога или каталог пуст. @UweBurger, если хотите, можете добавить этот комментарий в свой ответ.

cd вернитесь на уровень назад и посмотрите, какие разрешения есть у каталога, из которого вы только что пришли. sudo не дает вам никаких прав на доступ к папке, если root не имеет прав на эту папку. Может быть sudo -u может помочь.

Если вам нужно пройти по дереву каталогов ниже начальной точки, используйте chmod -R .

  • Вероятно, команда ls завершится ошибкой, потому что папка является исполняемой (пользователь может записать в нее компакт-диск), но не может быть прочитана пользователем.
  • Вы должны посоветовать пользователю быть осторожным при использовании chmod -R , эта команда опасна и может сломать систему, если будет выполнена с неправильным параметром и правильным sudo.

Во-первых, я хотел бы подтвердить существующие ответы:

  • Как говорит УвеБургер, можно использовать * для общего шаблона в Ubuntu (или, как мне кажется, в Unix в целом). (Возможно ли, что directory в вашем примере пусто, что вызывает ошибку chmod: cannot access ‘directory/*’: No such file or directory ?)
  • Как предложил Норт-Брэдли, можно использовать R флаг в chmod чтобы заставить его проходить дерево рекурсивно, изменяя разрешения всего в вашей текущей точке. То есть использовать chmod -R directory , или если у вас нет привилегий sudo chmod -R directory (однако убедитесь, что случайно не изменили разрешения на системные файлы при использовании sudo к chmod ; ваш собственный пользователь просто не имеет на это прав, что делает первый вариант более безопасным).

Однако я хотел бы добавить, что вы, возможно, не захотите изменять права доступа к каталогам так же, как и файлы. Как объясняется в официальной документации, чтение ( r ) разрешение для каталогов означает возможность просмотра их содержимого (например, использование ls ), запись ( w ) разрешение позволяет пользователю создавать / удалять файлы в нем, а выполнение ( x ) Разрешение на cd внутри. Здесь есть отличный ответ, предлагающий способ различать файлы и каталоги при рекурсивном применении новых разрешений. Вариант с использованием xargs якобы быстрее. Вы можете добавить r флаг xargs чтобы избежать ошибки в случае find ничего не возвращает, и если вам нужно root привилегии, которые вы должны использовать sudo для обеих половин трубы (опять же, будьте осторожны, когда chmod как root ), так что это будет:

sudo find [путь / к / каталогу] -тип d -print0 | sudo xargs -0r chmod [желаемый-каталог-разрешения]

sudo find [путь / к / каталогу] -тип f -print0 | sudo xargs -0r chmod [разрешения на требуемый файл]

где [desired-*-permissions] можно задать явно ( 777 ) или используя буквы (например, a+x ).

Команда chmod в Linux


Команда chmod, команда chown и команда chgrp.

Команда chmod

Команда chmod предназначена для изменения прав доступа файлов и директорий в Linux. Название команды произошло от словосочетания «change mode».

Синтаксис команды chmod следующий:

Разрешения можно задавать двумя способами:

Изменение прав доступа командой chmod

Запись прав доступа числом

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

  • Первая цифра используется для указания прав доступа для пользователя.
  • Вторая цифра для группы.
  • Третья для всех остальных.

В таблице ниже приводятся все возможные комбинации разрешений rwx и соответсвующие им числа (которые используются в команде chmod):

ЧислоРазрешенияСимвольное обозначение
0разрешения отсутствуют---
1x — запуск--x
2w — изменение-w-
3x+w — запуск+изменение-wx
4r — чтениеr--
5r+x — чтение+запускr-x
6r+w — чтение+изменениеrw-
7r+w+x — чтение+изменение+запускrwx

Рассмотрим использование команды chmod с записью прав доступа числом на примере. Установим для файла права доступа 764:

Это означает (см. таблицу выше), что для файла myfile мы устанавливаем права доступа 7 6 4 , которые означают:

  • 7 — права для владельца-пользователя. Владелец файла может читать, изменять и запускать файл (r+w+x).
  • 6 — права для группы. Пользователи, которые принадлежат группе могут читать и изменять файл (r+w).
  • 4 — права для всех остальных. Все остальные могут только читать файл (r).

Если записать 764 с помощью символов (см. таблицу), то мы получим: «rwxrw-r-».

Команда chmod

В таблице ниже приведены некоторые часто используемые значения числовых значений прав доступа:

Числовое
обозначение
"rwx"-обозначениеОписание
400-r--------Владелец файла может только читать файл. Для всех остальных все действия с файлом запрещены.
644-rw-r--r--Все пользователи могут читать файл. Владелец может изменять файл.
660-rw-rw----Владелец и группа могут читать и изменять файл. Для всех остальных все действия с файлом запрещены.
664-rw-rw-r--Все могут читать файл. Владелец и группа могут изменять.
666-rw-rw-rw-Все могут читать и изменять файл.
700-rwx------Владелец может читать, изменять и запускать файл. Для всех остальных все действия с файлом запрещены.
744-rwxr--r--Все могут читать файл. Владелец может также изменять и запускать файл.
755-rwxr-xr-xВсе могут читать и запускать файл. Владелец может также изменять файл.
777-rwxrwxrwxВсе пользователи могут читать, изменять и редактировать файл.

Запись прав доступа символами

Как вы можете видеть, в данном формате права доступа задаются символами rwx, но в синтаксисе используются и другие вспомогательные символы, например, математические операции «+» и «-» и такие символы как, например, «g» или «u».

Общий синтаксис можно записать примерно так:

Обозначения для владельцев файла следующие:

ОбозначениеОписание
uВладелец-пользователь.
gГруппа.
oВсе остальные.
aВообще все.

Математические операции означают следующее:

ОператорОписание
+Добавляет к текущим правам доступа новое разрешение.
-Удаляет из текущих прав доступа определенное разрешение.
=Устанавливает полностью новые разрешения (предыдущие перезаписываются новыми).

В одной команде можно перечислять владельцев и их разрешения через запятую (см. пример ниже).

Разрешаем владельцу (u) и группе (g) запускать файл (x).

Рекурсивное изменение прав доступа

Если необходимо изменить права доступа на все файлы в директории, включая вложенные директории, то для этого существует опция -R, что означает рекурсивное изменение прав доступа для директорий и их содержимого. Например, изменим права доступа у всех файлов в директории Mydir:

И еще один момент. Если пользователь не является владельцем файла, но ему нужно изменить права доступа у данного файла, то команду chmod необходимо выполнять с использованием sudo, например:

Видео-обзор команды chmod

Команда chown — изменение владельца и группы

Для изменения владельца и группы файла используется команда chown.

Для изменения владельца файла используется следующий синтаксис:

Например, установим для файла myfile нового владельца vasya:

Для изменения владельца и группы файла используется следующий синтаксис:

Например, установим для файла myfile нового владельца vasya и группу sambashare:

Команда chgrp — изменение группы

Есть еще одна команда — chgrp. Она позволяет изменить только группу. Например:

Резюме

В Linux у каждого файла есть права доступа — это разрешения, владелец и группа.

Разрешения задаются для владельца, группы и для всех остальных.

Есть три вида разрешений — r — чтение, w — изменение, x — запуск.

Читайте также: