Як використовувати "chmod" на розділі NTFS (або FAT32)?


128

У мене є сценарій, який мені потрібно виконати на розділі 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

Як бачите, він залишається незмінним.


Краще рішення можна знайти тут Це два питання повинні бути пов'язані!

Відповіді:


79

Режим визначається параметрами кріплення розділу (його неможливо змінити через chmod).

Для '755' у файлах і '777' у каталогах ви б використовували щось на кшталт

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

Гаразд, це також пояснило б кілька інших речей.
Натан Осман

4
Що я повинен поставити замість цього, /dev/whateverі /mnt/whateverякщо мені доведеться змінити дозвіл мого розділу HDD на ім'я/media/Prtn
прафін

3
Чи зберігає таким чином кріплення оригінальні настройки диска? Тобто безпечно монтувати привід Windows?
Джонатан

1
Я встановив користувача на "andrew", який є моїм головним користувачем. За розділом ls для ntfs розділ показує, що всі файли / каталоги в ньому є власними коренями.
deathangel908

Справжнє рішення - це ntfs-3g.usermap. Дивіться нижче ...
Едуардо Куомо

86

Всупереч тому, що вважає більшість людей, NTFS є сумісною з POSIX файловою системою, і можна використовувати дозволи на NTFS .

Щоб увімкнути це, вам потрібен "Файл картографування користувача" або просто дати permissionsможливість під час монтажу (коли сумісність з Windows не потрібна). Це відображає користувачів linux у вашій системі з ідентифікаторами користувачів, такими як NTFS / Windows, використовують їх всередині країни.

Перегляньте на сторінці ntfs-3g інформацію про деякі відомості та приклади. Якщо вам потрібна додаткова інформація, перегляньте розширену документацію про право власності та дозволи ntfs-3g .

(Зверніть увагу, що це не працює у файлових системах FAT.)

¹ Так, він також може зберігати назви файлів, дійсні в linux / unix, але не під Windows, підтримує символьні посилання та жорсткі посилання тощо.


4
ось хороша документація. коротше: sudo ntfs-3g.usermap /dev/disk/by-label/MY-NTFSа потімsudo mv UserMapping /media/MY-NTFS/.NTFS-3G/
літаючі вівці

1
Так це дозволить вам довільно встановити дозволи, як chmod 655 /some/fileна розділі NTFS, встановленому в Linux? Я намагаюся розібратися, як об’єднати свій домашній розділ з Linux у c: \ Users. Чи дозволить мені користуватися карткою користувача зберегти всі дозволи? Я планував встановити каталог c: \ Users в / home в Linux.
trusktr

7
Дозвольте ще раз підкреслити ваше зауваження: "коли сумісність з Windows не потрібна". ref: askubuntu.com/questions/92863/…
Еліптичний вигляд

1
ntfs-3g manpageпосилання розірвано
ctrl-alt-delor

Едуардо Куомо написав непоганий приклад усіх кроків, необхідних для створення "Файлу картографії" тут: askubuntu.com/a/887502/327339
Габріель

38

Для розділів NTFS використовуйте permissionsпараметр у fstab.

Спочатку відключіть розділ 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.


2
Як зберігаються ці дозволи? В ADS? Інші метадані?
ζ--

Що з fat32? У мене є Micro SD карта, яка захищена від запису, і я не можу отримати доступ, відформатувати її.
Waqas

@RanaMuhammadWaqas - це старе питання, але ви також можете встановити його за допомогою різних варіантів. Важко дізнатися, у чому полягає ваша проблема, можливо, визначте своє обладнання та задайте окреме запитання.
Пантера

@ bodhi.zazen usersпередбачає noexec , nosuid та nodev . чи не так? Як користувачі можуть встановлювати / змінювати noexecналаштування?
Хуршид Алам

1
@EduardoCuomo - Опублікувати коментар у відповіді, який стверджує, що він не працює, навряд чи допоможе вам. Яка файлова система? Я пропоную вам відкрити питання. Вам потрібно ідентифікувати файлову систему та опублікувати свій запис у fstab
Panther

20

Окрім встановлення fmask та / або dmask у відповіді htorque вище, якщо ви хочете виконати сценарії на диску, мені довелося також встановити опцію кріплення "exec".

Таким прикладом може бути:

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

13

Ви завжди можете прямо посилатися на інтерпретатора сценарію, і в цьому випадку дозволи на виконання не потрібні. Якщо сценарій використовує bash , як це можна перевірити, переглянувши перший рядок сценарію, просто запустіть

bash script.sh

Зауважте, що скрипт викликає інші сценарії чи двійкові файли на одному розділі, це не працюватиме. Зауважте також, що стратегія не працює з бінарними файлами на відміну від текстових файлів скриптів, записаних у Bash Script, Perl, Python тощо.


+1 - Я ніколи не думав про те, щоб викликати це таким чином.
Натан Осман

8
Для виконання бінарних файлів використовуйте /lib64/ld-linux-x86-64.so.2 ./program.binдля 64-бітних програм і /lib/ld-linux.so.2 ./program.binдля 32-розрядних програм.
Лекенштейн

8

Відповідно до розділу власності та дозволів документації на NTFS-3G, ми можемо використовувати параметри кріплення для контролю доступу та створення файлів . Комбінації дуже складні (див. Дві таблиці там). Також я не читаю і не отримую їх усіх. Наприклад, я не знаю, вибираються POSIX ACL під час компіляції чи ні бінарного пакету NTFS-3G. Але найкраще, що у мене вийшло, - це використання файлу User Mapping у поєднанні з деякими параметрами монтажу для наближення до правдоподібного відображення права власності на файли та дозволів між 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, призначається викорінюватися в Linux (якщо я правильно пам'ятаю). Тож у 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. Після того, як ви переконаєтеся , що SIDs правильно, слідуючи інструкціям в коментарі, тобто зміна userв user::SIDрядку з ім'ям користувача і groupв :group:SIDлінії основного імені групи на Linux. У Ubuntu вони однакові. Більше того, додайте своє ім’я групи Linux також після першого двокрапки user::SIDрядка. Тож лінія повинна виглядати приблизно так user:group:SID. Схоже, що якщо цього не зробити, файли, створені в Windows, будуть призначені в user:rootLinux.

  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


6

Я знаю, старий потік, але все-таки актуальний і відсутній конкретний підказка щодо використання, складений з різних пропозицій на різних інших форумах / потоках і перевірений на 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

Далі, знову підключіть диск і насолоджуйтесь :)


1
Відмінно, це має бути прийнята відповідь.
близько

4

Усі кроки:

  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 0 UUID=34A0456DA04536A0 /mnt/windows ntfs-3g defaults 0 0

  6. Нарешті, перерахуйте, використовуючи fstab:

    sudo umount /mnt/windows
    sudo mount -a
    

Зробіть це один раз для кожного з розділів NTFS !

ПОПЕРЕДЖЕННЯ З ОСНОВАМИ ОСІН!

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


1

Існує п пов'язаних питань для USB-пристроїв. Ця відповідь дає неприємний злом, якщо ви хочете автоматично монтувати кожен USB-пристрій із дозволом на виконання.


1

Встановіть розділ 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
    
  • Перевірте номер свого ID користувача 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

/media$ sudo mkdir -p sdb1 /media$ sudo mount -o rw,users,umask=000,exec /dev/sdb1 ./sdb1/ mount: block device /dev/sdb1 is write-protected, mounting read-only
alhelal

@alhelal, я боюся, що обладнання вашого USB-накопичувача стало лише для читання або "заблоковано сіткою". Але також може виникнути якась проблема з файловою системою, і якщо файлова система пошкоджена, ви можете її виправити, відремонтувавши її в Windows, або методом GUI, або за допомогою командного рядка chkdsk /f X:за цим посиланням ubuntuforums.org /… - Якщо все-таки не пощастило, створіть
sudodus
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.