Как использовать 'chmod' на NTFS (или FAT32) разделе?

У меня есть скрипт, который мне нужно выполнить в разделе 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

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

10 ответов

Решение

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

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

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

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

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

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

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

¹ Да, он также может хранить имена файлов, которые действительны в Linux/ Unix, но не под Windows, поддерживает символические ссылки и жесткие ссылки и т. Д.

Для разделов NTFS используйте permissions вариант в фстаб.

Сначала размонтируйте раздел ntfs.

Определите ваш раздел UUID с blkid

sudo blkid

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

# Graphical 
gksu gedit /etc/fstab

# Command line
sudo -e /etc/fstab

И добавьте или измените строку для раздела NTFS

# change the "UUID" to your partition UUID
UUID=12102C02102CEB83 /media/windows ntfs-3g auto,users,permissions 0 0

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

sudo mkdir /media/windows

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

mount /media/windows

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

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

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

Таким образом, пример будет:

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

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

bash script.sh

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

Смонтируйте раздел NTFS на USB-накопителе с пользовательскими правами и владельцем

В Linux режим NTFS (и FAT32) определяется параметрами монтирования раздела. Вы не можете изменить это через chmod.

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

Подготовка

  • Размонтируйте раздел NTFS.

    sudo umount /dev/sdxn   # general syntax
    sudo umount /dev/sdb1   # modify to match your case
    
  • Создайте пользовательскую точку монтирования (только если вы хотите новую точку монтирования), например, с

    sudo mkdir -p /mnt/sd1
    
  • Проверьте ваши идентификаторы uid число (обычно 1000, иногда 1001 или 1002 ...)

    grep ^"$USER" /etc/group
    

    и использовать этот номер, если вы хотите получить право собственности (по умолчанию root).

Смонтировать раздел NTFS

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

sudo mount -o rw,user,uid=1000,dmask=007,fmask=117 /dev/sdxn /mnt/sd1  # general syntax
sudo mount -o rw,user,uid=1000,dmask=007,fmask=117 /dev/sdb1 /mnt/sd1  # modify to match your case
  • в этом случае вы можете запустить скрипт this-script с

    bash /mnt/sd1/this-script
    

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

sudo mount -o rw,user,uid=1000,umask=007,exec /dev/sdxn /mnt/sd1  # general syntax
sudo mount -o rw,user,uid=1000,umask=007,exec /dev/sdb1 /mnt/sd1  # modify to match your case
  • В этом случае вы можете запустить скрипт this-script с

    /mnt/sd1/this-script
    

    и вы также можете запускать исполняемые программы из этого места (не то, что рекомендуется).

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

sudo mount -o rw,users,umask=000,exec /dev/sdxn /mnt/sd1  # general
sudo mount -o rw,users,umask=000,exec /dev/sdb1 /mnt/sd1  # modify to match your case

Все шаги:

  1. устанавливать ntfs-3g:

    sudo apt-get install -y ntfs-3g
    
  2. Размонтировать раздел NTFS:

    sudo umount /mnt/windows
    
  3. использование ntfs-3g.usermap создать свой UserMapping файл:

    sudo ntfs-3g.usermap /dev/disk/by-label/MY-NTFS
    

    или же

    sudo ntfs-3g.usermap /dev/sdb1
    
  4. Перемонтировать раздел NTFS для добавления UserMapping файл:

    mount -a
    sudo mkdir /mnt/windows/.NTFS-3G
    sudo mv UserMapping /mnt/windows/.NTFS-3G/
    
  5. Обновите свой fstab файл:

    sudo vim /etc/fstab
    

    Обновить строку монтирования:

    1. Сделайте резервную копию вашей текущей линии монтирования! Дублируйте строку и прокомментируйте ее, добавив # в начале.
    2. Изменить следующее: UUID=34A0456DA04536A0 /mnt/windows ntfs defaults,uid=1000,gid=1000 0 0
    3. По следующему: UUID=34A0456DA04536A0 /mnt/windows ntfs-3g defaults 0 0(Использование ntfs-3g и только default опция)

    Это должно выглядеть примерно так:

    #UUID=34A0456DA04536A0 /mnt/windows ntfs defaults,uid=1000,gid=1000 0 0UUID=34A0456DA04536A0 /mnt/windows ntfs-3g defaults 0 0

  6. Наконец, перемонтируйте, используя ваш fstab:

    sudo umount /mnt/windows
    sudo mount -a
    

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

ВНИМАНИЕ С ОС Windows!

Я проверяю это с Windows 7+ и разрешения влияют на ОС Windows! Я изменяю права доступа моего домашнего каталога в разделе Windows, и когда я снова использовал Windows, я мог видеть, что пользователь сломался!

В соответствии с разделом " Владение и разрешения " документации NTFS-3G, мы можем использовать параметры монтирования для управления доступом к файлам и их созданием. Комбинации очень сложны (см. Две таблицы там). Также я не читаю и получаю все из них. Например, я не знаю, выбран ли POSIX ACL во время компиляции или нет двоичного пакета NTFS-3G. Но лучшее, что я получил, - это использование файла сопоставления пользователей в сочетании с некоторыми вариантами монтирования, чтобы приблизить вероятное сопоставление владения файлами и разрешений между Windows и Linux.


Предупреждение: это только то, что лучше всего подходит для общего доступа к разделу данных NTFS (диск D: на Windows) между двойной загрузкой Windows 8 и Kubuntu 14.04. Инструкции записаны в тщательной ретроспективе, но не полностью проверены. Это слишком утомительно и утомительно, чтобы повторить всю процедуру снова. Так что следуйте этому на свой страх и риск. Но если вы это сделаете, поделитесь своим опытом. Если вы решите следовать инструкциям, прочитайте их полностью, чтобы получить полную картину, прежде чем действовать. Удачи!


Хорошо, вот и ты! Подробные инструкции состоят из трех частей. Часть 1 должна выполняться в Windows, а часть 2 в Linux. Часть 3 для теста.

Часть 1

В разделе " Сопоставление пользователей " документации NTFS-3G указаны две версии для настройки сопоставления пользователей между Windows и Linux, одна версия Windows и одна версия Linux. По моему опыту, версия для Linux закончилась промахом. Учетная запись Linux не была сопоставлена ​​с моей учетной записью Windows, но под SID появилась некоторая неизвестная учетная запись. В результате возникла путаница, поскольку эта неизвестная учетная запись становится владельцем всех файлов моей учетной записи Windows. В этой ситуации, если у вас нет прав администратора для возврата прав собственности, файлы под вашей учетной записью Windows становятся недоступными. Но даже если вы измените, это все равно неправильное отображение. Это означает, что позже все файлы, которые вы создаете в Linux, будут назначены этой неизвестной учетной записи в Windows, а те, что в Windows, будут назначены пользователю root (если я правильно помню). Таким образом, в Windows вам нужно вернуть право собственности снова, а в Linux сменить владельца. Это не то, что мы ожидаем. После нескольких безнадежных попыток исправить проблему я сдался и перешел к версии для Windows. Это сработало. Подробные инструкции, извлеченные из соответствующего раздела документации NTFS-3G, приведены ниже:

  1. Загрузите инструмент usermap, распакуйте его куда-нибудь (в моем случае, диск C:) лучше вне раздела NTFS (в моем случае диск D:) чтобы поделиться.

  2. Откройте командную строку Windows. Перейдите в извлеченный каталог tools (по умолчанию) usermap инструмент. Затем выполните следующую команду:

    C:\tools> mapuser > UserMapping
    

    Это создает шаблон и перенаправляет его в файл с именем UserMapping, Откройте файл с помощью текстового редактора, скажем, Блокнот, вы должны увидеть следующие строки:

    # Generated by usermap for Windows, v 1.1.5
    # For Windows account "Account" in domain "Domain"
    # Replace "user" and "group" hereafter by matching Linux login
    user::SID
    :group:SID
    

    Предположительно, первый SID должен быть ваш SID пользователя, а второй - SID вашей группы. Вы можете проверить их соответственно командами whoami /user а также whoami /groups,

  3. После того, как вы убедитесь, что SID верны, следуйте инструкциям в комментарии, то есть измените user в user::SID линия к вашему имени пользователя и group в :group:SID строка с названием вашей основной группы в Linux. На Ubuntu они одинаковые. Кроме того, добавьте имя вашей группы Linux также после первого двоеточия user::SID линия. Так что линия должна выглядеть примерно так user:group:SID, Похоже, что в противном случае файлы, созданные в Windows, будут назначены user:root в линуксе

  4. Сохраните файл. Переместите его в каталог с именем .NTFS-3G (создайте его, если он еще не существует) в разделе NTFS для совместного использования (в моем случае диск D:).

  5. Этот шаг предназначен для тестирования в части 3. В общем разделе NTFS создайте новый каталог и новый файл.

Часть 2

Теперь загрузитесь в Linux. sudo редактировать файл /etc/fstab, Добавьте или измените строку для общего раздела NTFS примерно так:

UUID=...    /data    ntfs    defaults,umask=077,utf8    0    0

Необходимо установить umask (dmask а также fmask также может работать, но не проверено). Выберите значение для umask тебе нравится, хотя я выбрал 077, Кажется, без этой настройки, полные разрешения будут предоставлены oThers для вновь созданных файлов.

Сохраните файл. Сейчас sudo mount или перемонтировать (sudo umount а потом sudo mount) общий раздел NTFS (в моем случае /data):

$ sudo mount /data

Часть 3

Сейчас (все еще в Linux) cd до точки монтирования (в моем случае, /data), ls -l файлы там. Проверьте, совпадают ли их права доступа и права доступа, указанные вами в UserMapping файл и umask Вы установили в /etc/fstab (соответствие между разрешениями и umask требуется некоторое вычисление дополнения, см. man (1) umask для получения дополнительной информации). Если они это сделают, поздравляем, половина цели достигнута. Иначе бедный ты. Спросите Ubuntu или Windows.

Затем создайте новый каталог и новый файл. ls -l проверить их право собственности и разрешения. Владельцем должно быть ваше имя пользователя и основная группа, как обычно. Разрешения должны соответствовать umask, Теперь перезагрузите компьютер и загрузитесь в Windows. Найдите в общем разделе NTFS каталог и файл, который вы только что создали в Linux. Проверьте их свойства, чтобы увидеть, назначены ли они вашей учетной записи Windows. Если они, поздравляю, вы все сделали. В противном случае невезение. Спросите Windows или Ubuntu.

EOF

Старая ветка, я знаю, но она все еще актуальна, и в ней отсутствует конкретный пример использования, составленный из разных предложений на различных других форумах / темах и протестированный на Ubuntu GNOME 13.04, где я хотел, чтобы внешний диск содержал библиотеку Steam...

Например, если раздел NTFS находится на внешнем USB-диске - это означает, что раздел монтируется на лету при подключении - тогда вы можете использовать следующий метод, чтобы udev монтировал разделы ntfs с правами на выполнение.

Откройте окно терминала и выполните:

$ sudo nano /etc/udev/rules.d/90-usb-disks.rules

Затем вставьте эту строку в то, что должно быть пустым / новым файлом (если нет, то выйдите из nano и повторите команду, начиная имя файла с большего числа, например, 91-...):

ENV{ID_FS_TYPE}=="ntfs", ENV{ID_FS_TYPE}="ntfs-3g"

Затем сохраните и закройте. Отключите диск и затем выполните в терминале:

$ sudo service udev restart

Далее подключите диск обратно и наслаждайтесь:)

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

Другие вопросы по тегам