Bagaimana cara menggunakan 'chmod' pada partisi NTFS (atau FAT32)?

129

Saya memiliki skrip yang harus saya jalankan pada partisi NTFS. Izin skrip diatur ke 600.

Saya berusaha mengubah izin dengan menjalankan chmod 755 script.sh, yang tidak melaporkan kegagalan atau apa pun - tetapi juga tidak mengubah izin pada file:

$ 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

Seperti yang Anda lihat, itu tetap tidak berubah.

Nathan Osman
sumber
Solusi yang lebih baik dapat ditemukan di sini. Dua pertanyaan ini harus dikaitkan!

Jawaban:

79

Mode ditentukan oleh opsi pemasangan partisi (Anda tidak dapat mengubahnya melalui chmod).

Untuk '755' pada file dan '777' pada direktori Anda akan menggunakan sesuatu seperti

sudo mount -t ntfs -o rw,auto,user,fmask=0022,dmask=0000 /dev/whatever /mnt/whatever
htorque
sumber
Oke, itu akan menjelaskan beberapa hal lain juga.
Nathan Osman
5
Apa yang harus saya lakukan /dev/whateverdan /mnt/whateverjika saya harus mengubah izin partisi HDD saya dinamai/media/Prtn
pranphy
3
Apakah pemasangan dengan cara ini mempertahankan pengaturan asli disk? Apakah aman untuk memasang drive Windows?
Jonathan
1
Saya mengatur pengguna ke 'andrew' yang merupakan pengguna utama saya. Dengan ls untuk partisi ntfs menunjukkan bahwa semua file / direktori di dalamnya adalah milik sendiri oleh root.
deathangel908
Solusi sebenarnya adalah ntfs-3g.usermap. Lihat di bawah ...
Eduardo Cuomo
86

Berlawanan dengan apa yang diyakini kebanyakan orang, NTFS adalah sistem file yang kompatibel dengan POSIX, dan dimungkinkan untuk menggunakan izin pada NTFS .

Untuk mengaktifkan ini, Anda memerlukan "File Pemetaan Pengguna" atau cukup berikan permissionsopsi saat pemasangan (ketika tidak diperlukan kompatibilitas dengan Windows). Ini memetakan pengguna linux di sistem Anda dengan ID pengguna seperti NTFS / Windows menggunakannya secara internal.

Lihat halaman manual ntfs-3g untuk beberapa info dan beberapa contoh. Jika Anda memerlukan informasi lebih lanjut, lihat dokumentasi lanjutan ntfs-3g tentang kepemilikan dan izin .

(Perhatikan bahwa ini tidak bekerja pada sistem file FAT.)

¹ Ya, itu juga dapat menyimpan nama file yang valid di linux / unix tetapi tidak di Windows, mendukung symlink & hardlink, dll.

JanC
sumber
4
di sini adalah dokumentasi yang baik. singkatnya: sudo ntfs-3g.usermap /dev/disk/by-label/MY-NTFSdan kemudiansudo mv UserMapping /media/MY-NTFS/.NTFS-3G/
domba terbang
1
Jadi ini akan memungkinkan Anda untuk mengatur izin seperti chmod 655 /some/filepada partisi NTFS yang terpasang di Linux? Saya mencoba mencari cara untuk menggabungkan partisi rumah saya dari linux ke c: \ Users. Apakah menggunakan usermap memungkinkan saya untuk mempertahankan semua izin? Saya berencana untuk menginstal direktori c: \ Users ke / home di linux.
trusktr
7
Biarkan saya menekankan kembali komentar Anda: "ketika tidak ada kompatibilitas dengan Windows diperlukan". ref: askubuntu.com/questions/92863/…
Tampilan elips
1
ntfs-3g manpagetautan rusak
ctrl-alt-delor
Eduardo Cuomo menulis contoh yang cukup bagus dari semua langkah yang diperlukan untuk membuat "File Pemetaan Pengguna" di sini: askubuntu.com/a/887502/327339
Gabriel Staples
38

Untuk partisi NTFS, gunakan permissionsopsi di fstab.

Pertama, lepaskan partisi ntfs.

Identifikasi UUID partisi Anda dengan blkid

sudo blkid

Kemudian edit /etc/fstab

# Graphical 
gksu gedit /etc/fstab

# Command line
sudo -e /etc/fstab

Dan tambahkan atau edit baris untuk partisi ntfs

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

Buat titik pemasangan (jika perlu)

sudo mkdir /media/windows

Sekarang pasang partisi

mount /media/windows

Opsi yang saya berikan kepada Anda,, autoakan secara otomatis me-mount partisi ketika Anda boot dan usersmemungkinkan pengguna untuk melakukan mount dan umount.

Anda kemudian dapat menggunakan chown dan chmod pada partisi ntfs.

Harimau kumbang
sumber
2
Bagaimana izin ini disimpan? Dalam ADS? Metadata lainnya?
ζ--
Bagaimana dengan FAT32? Saya memiliki kartu Micro sd yang dilindungi tulis dan saya tidak dapat mengakses, memformatnya.
Waqas
@RanaMuhammadWaqas - ini adalah pertanyaan lama, tetapi Anda juga dapat memasangnya dengan berbagai opsi. Sulit mengetahui apa masalah Anda, mungkin mengidentifikasi perangkat keras Anda dan mengajukan pertanyaan terpisah.
Panther
@ bodhi.zazen usersmenyiratkan noexec , nosuid , dan nodev . bukan? Bagaimana pengguna dapat melakukan mount / umount dengan noexecdisetel?
Khurshid Alam
1
@EduardoCuomo - Memposting komentar dalam jawaban yang menyatakan tidak berfungsi sepertinya tidak akan membantu Anda. Sistem file apa? Saya sarankan Anda membuka pertanyaan. Anda perlu mengidentifikasi sistem file dan memposting entri fstab Anda
Panther
20

Selain mengatur fmask dan / atau dmask dalam jawaban htorque di atas, jika Anda ingin menjalankan skrip pada drive, saya juga harus mengatur opsi mount "exec".

Jadi contohnya adalah:

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

Anda selalu dapat secara eksplisit memanggil penerjemah skrip, di mana izin eksekusi tidak diperlukan. Jika skrip menggunakan bash , seperti yang dapat diverifikasi dengan melihat baris pertama skrip, jalankan saja

bash script.sh

Perhatikan bahwa skrip memanggil skrip atau binari lain di partisi yang sama, ini tidak akan berfungsi. Perhatikan juga bahwa strategi tidak bekerja dengan binari sebagai lawan dari file skrip tekstual yang ditulis dalam Bash Script, Perl, Python atau sejenisnya.

loevborg
sumber
+1 - Saya tidak pernah berpikir untuk memintanya seperti itu.
Nathan Osman
8
Untuk menjalankan binari, gunakan /lib64/ld-linux-x86-64.so.2 ./program.binuntuk program 64-bit dan /lib/ld-linux.so.2 ./program.binuntuk program 32-bit.
Lekensteyn
8

Menurut bagian Kepemilikan dan Izin dari dokumentasi NTFS-3G, kita dapat menggunakan opsi mount untuk mengontrol akses dan pembuatan file . Kombinasi ini sangat rumit (lihat dua tabel di sana). Saya juga tidak membaca dan mendapatkan semuanya. Sebagai contoh, saya tidak tahu apakah POSIX ACL dipilih pada waktu kompilasi atau tidak dari paket biner NTFS-3G. Tapi yang terbaik yang saya dapatkan adalah menggunakan file Pemetaan Pengguna yang dikombinasikan dengan beberapa opsi mount untuk memperkirakan pemetaan yang masuk akal dari kepemilikan file dan izin antara Windows dan Linux.


Peringatan : Ini hanya yang terbaik untuk saya berbagi partisi data NTFS (drive D:pada Windows) antara Windows 8 dual-boot dan Kubuntu 14.04. Instruksi dicatat dalam retrospeksi hati-hati tetapi tidak diuji secara menyeluruh. Terlalu melelahkan dan membosankan untuk mengulangi seluruh prosedur lagi. Jadi ikuti risiko Anda sendiri. Tetapi jika Anda melakukannya, bagikan kembali pengalaman Anda. Jika Anda memutuskan untuk mengikuti instruksi, harap baca sepenuhnya untuk memiliki gambaran lengkap sebelum benar-benar bertindak. Semoga berhasil!


Baiklah, ini dia! Instruksi terperinci terdiri dari tiga bagian. Bagian 1 harus dilakukan pada Windows sedangkan Bagian 2 di Linux. Bagian 3 untuk ujian.

Bagian 1

Bagian Pemetaan Pengguna dari dokumentasi NTFS-3G menentukan dua versi untuk mengatur pemetaan pengguna antara Windows dan Linux, satu versi Windows dan satu versi Linux. Pengalaman saya adalah bahwa versi Linux berakhir dengan kehilangan . Akun Linux tidak dipetakan ke akun Windows saya tetapi beberapa akun yang tidak dikenal muncul di bawah SID . Hasilnya berantakan karena akun yang tidak dikenal ini mengambil kepemilikan semua file akun Windows saya. Dalam situasi itu, kecuali Anda memiliki hak administratif untuk mengambil kembali kepemilikan Anda, file di bawah akun Windows Anda menjadi tidak dapat diakses. Tetapi bahkan jika Anda kudis, itu tetappemetaan yang salah. Itu berarti, nanti file apa pun yang Anda buat di Linux akan ditugaskan ke akun yang tidak dikenal itu di Windows dan yang di Windows ditugaskan untuk melakukan rooting di Linux (jika saya ingat dengan benar). Jadi pada Windows Anda perlu mengambil kembali kepemilikan dan Linux mengubah kepemilikan. Bukan itu yang kita harapkan. Setelah beberapa upaya putus asa untuk memperbaiki masalah ini, saya menyerah dan beralih ke versi Windows. Yang itu berhasil. Instruksi terperinci yang diambil dari bagian yang relevan dari dokumentasi NTFS-3G mengikuti:

  1. Unduh alat usermap , ekstrak di suatu tempat (dalam kasus saya, drive C:), lebih baik di luar partisi NTFS (dalam drive kasus saya D:) untuk dibagikan.

  2. Buka baris perintah Windows. Ubah ke direktori yang diekstraksi tools(secara default) dari usermapalat. Kemudian jalankan perintah berikut:

    C:\tools> mapuser > UserMapping
    

    Ini menghasilkan template dan mengarahkannya ke file bernama UserMapping. Buka file dengan editor teks, katakan Notepad, Anda akan melihat baris berikut:

    # 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
    

    Agaknya, yang pertama SIDharus SID pengguna Anda sedangkan yang kedua SID grup Anda. Anda dapat memeriksanya masing-masing dengan perintah whoami /userdan whoami /groups.

  3. Setelah Anda memastikan SIDS benar, mengikuti petunjuk di komentar, yaitu, perubahan userdalam user::SIDline untuk nama pengguna dan groupdi :group:SIDbaris ke nama grup utama Anda di Linux. Di Ubuntu, keduanya sama. Selain itu, tambahkan nama grup Linux Anda juga setelah tanda titik dua pertama user::SID. Jadi garisnya akan terlihat seperti user:group:SID. Tampaknya jika tidak melakukannya maka file yang dibuat pada Windows akan ditugaskan user:rootdi Linux.

  4. Simpan file. Pindahkan ke direktori bernama .NTFS-3G(buat jika belum ada) pada partisi NTFS untuk dibagikan (dalam drive kasus saya D:).

  5. Langkah ini untuk pengujian di Bagian 3. Di partisi NTFS bersama, buat direktori baru dan file baru.

Bagian 2

Sekarang boot ke Linux. sudoedit file /etc/fstab. Tambahkan atau ubah baris untuk partisi NTFS bersama untuk sesuatu seperti berikut ini:

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

Yang penting adalah mengatur umask( dmaskdan fmaskmungkin juga berfungsi tetapi tidak diuji). Pilih nilai yang umaskAnda sukai, meskipun saya memilih 077. Tampaknya tanpa pengaturan ini, izin penuh akan diberikan kepada mereka ountuk file yang baru dibuat.

Simpan file. Sekarang sudo mountatau remount ( sudo umountdan kemudian sudo mount) partisi NTFS bersama (dalam kasus saya /data):

$ sudo mount /data

Bagian 3

Sekarang (masih di Linux) cdke titik mount (dalam kasus saya, /data), ls -lfile-file di sana. Periksa apakah kepemilikan dan izin mereka cocok dengan masing-masing yang Anda tentukan dalam UserMappingfile dan yang umaskAnda setel /etc/fstab(kecocokan antara izin dan umaskmemerlukan beberapa perhitungan komplemen, lihat man (1) umask untuk informasi lebih lanjut). Jika mereka melakukannya, selamat, setengah tujuan tercapai. Jika tidak, kasihanilah Anda. Tanyakan Ubuntu atau Windows.

Kemudian buat direktori baru dan file baru. ls -luntuk memeriksa kepemilikan dan izin mereka. Kepemilikan haruslah nama pengguna dan grup utama Anda seperti biasa. Izin harus cocok dengan umask. Sekarang restart komputer Anda dan boot ke Windows. Temukan di partisi NTFS bersama direktori dan file yang baru saja Anda buat di Linux. Periksa properti mereka untuk melihat apakah mereka ditugaskan ke akun Windows Anda. Jika ya, selamat, Anda semua sudah selesai. Kalau tidak, nasib buruk. Tanyakan Windows atau Ubuntu.

EOF

refleksionis
sumber
6

Utas lama, saya tahu, tetapi masih relevan dan melewatkan tip penggunaan tertentu, disusun dari berbagai saran di berbagai forum / utas lainnya dan diuji pada Ubuntu GNOME 13.04 di mana saya ingin drive eksternal untuk memegang perpustakaan Steam ...

Ketika partisi NTFS berada di drive usb eksternal, misalnya - yang berarti partisi tersebut dipasang saat terhubung - maka Anda dapat menggunakan metode berikut untuk membuat partisi udev mount ntfs dengan hak eksekusi.

Buka jendela terminal dan lakukan:

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

Kemudian tempelkan baris ini di file yang seharusnya kosong / baru (jika tidak, maka keluarlah dari nano dan jalankan kembali perintah tersebut tetapi mulai nama file dengan angka yang lebih tinggi seperti 91 -...):

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

Kemudian simpan dan tutup. Cabut drive dan lakukan di terminal:

$ sudo service udev restart

Selanjutnya, pasang drive kembali dan nikmati :)

pengguna17254
sumber
1
Luar biasa, ini harus menjadi jawaban yang diterima.
leftaroundabout
4

Semua langkah:

  1. Pasang ntfs-3g:

    sudo apt-get install -y ntfs-3g
    
  2. Lepas partisi NTFS :

    sudo umount /mnt/windows
    
  3. Gunakan ntfs-3g.usermapuntuk menghasilkan UserMappingfile Anda :

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

    atau

    sudo ntfs-3g.usermap /dev/sdb1
    
  4. Remount partisi NTFS untuk menambahkan UserMappingfile:

    mount -a
    sudo mkdir /mnt/windows/.NTFS-3G
    sudo mv UserMapping /mnt/windows/.NTFS-3G/
    
  5. Perbarui fstabfile Anda :

    sudo vim /etc/fstab
    

    Perbarui jalur pemasangan :

    1. Cadangkan jalur pemasangan Anda saat ini! Gandakan baris dan komentar dengan menambahkan #di awal.
    2. Ubah selanjutnya: UUID=34A0456DA04536A0 /mnt/windows ntfs defaults,uid=1000,gid=1000 0 0
    3. Selanjutnya: UUID=34A0456DA04536A0 /mnt/windows ntfs-3g defaults 0 0 (Gunakan ntfs-3gdan hanya defaultopsi)

    Seharusnya terlihat seperti ini:

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

  6. Akhirnya, remount menggunakan fstab:

    sudo umount /mnt/windows
    sudo mount -a
    

Lakukan ini sekali untuk setiap partisi NTFS yang Anda miliki!

PERINGATAN DENGAN WINDOWS OS!

Saya memeriksanya dengan Windows 7+ dan izin mempengaruhi OS Windows! Saya mengubah izin Home Directory saya di partisi Windows, dan ketika saya menggunakan Windows lagi saya bisa melihat bahwa pengguna rusak!

Eduardo Cuomo
sumber
1

Ada n pertanyaan terkait untuk perangkat USB. Jawaban ini memberikan peretasan yang buruk jika Anda ingin memasang setiap perangkat USB secara otomatis dengan menjalankan izin.

lumbric
sumber
1

Pasang partisi NTFS di drive USB dengan izin dan pemilik khusus

Di Linux mode NTFS (dan FAT32) ditentukan oleh opsi pemasangan partisi . Anda tidak dapat mengubahnya melalui chmod.

Asumsi: drive USB terlihat sebagai sdb1 , modifikasi agar sesuai dengan huruf drive dan nomor partisi dalam kasus Anda . Sintaks umumnya adalah sdxn, di mana xhuruf kandar dan nnomor partisi seperti yang dilihat oleh misalnyasudo lsblk -f

Mempersiapkan

  • Lepaskan partisi NTFS.

    sudo umount /dev/sdxn   # general syntax
    sudo umount /dev/sdb1   # modify to match your case
    
  • Buat titik mount khusus (hanya jika Anda ingin titik mount baru), misalnya dengan

    sudo mkdir -p /mnt/sd1
    
  • Periksa uidnomor ID pengguna Anda (biasanya 1000, terkadang 1001 atau 1002 ...)

    grep ^"$USER" /etc/group
    

    dan gunakan nomor itu jika Anda ingin mengambil kepemilikan (standarnya adalah root).

Pasang partisi NTFS

Contoh 1 (tanpa mengeksekusi izin untuk file, tidak ada akses untuk 'orang lain'),

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
  • dalam hal ini Anda dapat menjalankan skrip this-scriptdengan

    bash /mnt/sd1/this-script
    

Contoh 2 (dengan menjalankan izin untuk file, tidak ada akses untuk 'orang lain'),

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
  • Dalam hal ini Anda dapat menjalankan skrip this-scriptdengan

    /mnt/sd1/this-script
    

    dan Anda juga dapat menjalankan program yang dapat dieksekusi dari lokasi ini (tidak disarankan).

Contoh 3 (izin penuh untuk semua orang, yang nyaman tetapi tidak aman, ketika ada beberapa pengguna),

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
sudodus
sumber
/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, saya khawatir perangkat keras drive USB Anda menjadi read-only atau 'grid-locked'. Tetapi mungkin juga ada beberapa masalah dengan sistem file, dan jika sistem file rusak, Anda mungkin dapat memperbaikinya dengan memperbaikinya di Windows, baik dengan metode GUI atau dengan baris perintah chkdsk /f X:sesuai dengan tautan ini ubuntuforums.org / ... - Jika masih tidak berhasil, buat cadangan data dan coba menurut askubuntu.com/questions/144852/…
sudodus