NTFS (veya FAT32) bölümünde 'chmod'u nasıl kullanırım?


128

Bir NTFS bölümünde yürütmem gereken bir betiğim var. Komut dosyasının izni 600 olarak ayarlanmış.

Çalıştırarak izinleri değiştirmeye çalıştım chmod 755 script.sh, bu bir hata veya başka bir şey bildirmiyor - ancak dosyadaki izinleri de değiştirmiyor:

$ 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

Gördüğünüz gibi, değişmeden kalır.


Daha iyi bir çözüm burada bulunabilir Bu iki soru birbirine bağlanmalı!

Yanıtlar:


79

Mod, bölümün mount seçenekleriyle belirlenir (chmod ile değiştiremezsiniz).

Dosyalarda '755' ve dizinlerde '777' gibi bir şey kullanmak

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

Tamam, bu da başka birkaç şeyi açıklar.
Nathan Osman,

4
Bunun yerine neyi koymalıyım /dev/whateverve /mnt/whatevereğer HDD /media/Prtn
bölümümün

3
Bu şekilde montaj diskin orijinal ayarlarını korur mu? Yani bir Windows sürücüyü monte etmek güvenli midir?
Jonathan,

1
Kullanıcıyı ana kullanıcım olan 'andrew' olarak ayarlarım. Ntfs bölümü için ls, içindeki tüm dosyaların / dizinlerin root tarafından kendisine ait olduğunu gösterir.
deathangel908

Asıl çözüm ntfs-3g.usermap. Aşağıya bakın ...
Eduardo Cuomo

86

Çoğu insanın inandığının aksine, NTFS POSIX uyumlu bir dosya sistemidir ve NTFS'de izinlerin kullanılması mümkündür .

Bunu etkinleştirmek için, bir "Kullanıcı Haritalama Dosyası" na ihtiyacınız vardır veya permissionsmontaj sırasında sadece seçeneği seçiniz (Windows ile uyumluluk gerekmediğinde). Bu, sisteminizdeki linux kullanıcılarını NTFS / Windows gibi kullanıcı kimlikleriyle eşler ve bunları dahili olarak kullanır.

Bazı bilgiler ve bazı örnekler için ntfs-3g kılavuz sayfasına bakınız . Daha fazla bilgiye ihtiyacınız olursa, sahiplik ve izinlerle ilgili ntfs-3g gelişmiş belgelerine bakın .

(Bunun FAT dosya sistemlerinde çalışmadığını unutmayın.)

¹ Evet, linux / unix'te geçerli ancak Windows altında olmayan, sembolik bağları ve sabit bağlantıları vb. Destekleyen dosya adlarını da depolayabilir.


4
İşte iyi belgeler. Kısacası: sudo ntfs-3g.usermap /dev/disk/by-label/MY-NTFSve sonrasudo mv UserMapping /media/MY-NTFS/.NTFS-3G/
uçan koyun

1
Yani bu keyfi chmod 655 /some/fileLinux'ta kurulu olan NTFS bölümündeki izinleri ayarlamanıza izin verecek mi? Ev bölümümü linux'dan c: \ Users ile nasıl birleştireceğimi bulmaya çalışıyorum. Usermap kullanmak tüm izinleri korumama izin verecek mi? C: \ Users dizinini linux dizinine / home dizinine yerleştirmeyi planlıyordum.
trusktr

7
Sözünü tekrar vurgulayayım: "Windows ile uyumluluk gerekmediğinde". ref: askubuntu.com/questions/92863/…
Eliptik görünüm

1
ntfs-3g manpagebağlantı koptu
ctrl-alt-delor 29:16

Eduardo Cuomo burada bir "Kullanıcı Haritalama Dosyası" yapmak için gerekli tüm adımlara güzel bir örnek yazdı: askubuntu.com/a/887502/327339
Gabriel Staples

38

NTFS bölümleri için permissionsfstab içindeki seçeneği kullanın .

İlk önce ntfs bölümünü kaldırın.

UUID bölümünüzü tanımlayın blkid

sudo blkid

Sonra düzenle /etc/fstab

# Graphical 
gksu gedit /etc/fstab

# Command line
sudo -e /etc/fstab

Ve ntfs bölümü için bir satır ekleyin veya düzenleyin

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

Bir bağlama noktası yapın (gerekirse)

sudo mkdir /media/windows

Şimdi bölümü monte et

mount /media/windows

Size verdiğim seçenekler, autoönyükleme yaptığınızda bölmeyi otomatik olarak bağlar ve userskullanıcıların takıp takmasını sağlar.

Ardından ntfs bölümünde chown ve chmod komutunu kullanabilirsiniz.


2
Bu izinler nasıl saklanır? ADS’de? Diğer meta veriler?
Nov--

Peki ya fat32? Yazma korumalı bir Micro SD kartım var ve erişemiyorum, biçimlendiriyorum.
Waqas

@RanaMuhammadWaqas - bu eski bir sorudur, ancak farklı seçeneklerle de monte edebilirsiniz. Sorununun ne olduğunu bilmek zor, belki de donanımını tanımla ve ayrı bir soru sor.
Panter

@ bodhi.zazen noexec , nosuid ve nodevusers anlamına gelir . değil mi? Kullanıcılar, ayarlanmış durumdayken nasıl monte / umount yapabilir ? noexec
Khurshid Alam

1
@EduardoCuomo - İşe yaramadığını belirten bir cevaba yorum yapmak size yardımcı olamaz. Hangi dosya sistemi? Sana bir soru açmanı öneririm. Dosya sistemini tanımlamanız ve fstab girişinizi göndermeniz gerekiyor
Panther

20

Yukarıda htorque'un cevabında fmask ve / veya dmask ayarlarına ek olarak, sürücüde komut dosyaları çalıştırmak istiyorsanız, "exec" mount seçeneğini de ayarlamak zorunda kaldım.

Yani örnek şöyle olurdu:

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

13

Kod yorumlayıcısını her zaman açıkça çalıştırabilirsiniz; bu durumda yürütme izinleri gerekmez. Eğer betik bash kullanıyorsa, betiğin ilk satırına bakarak doğrulanabilir, sadece çalıştırın

bash script.sh

Komut dosyasının aynı bölümdeki diğer komut dosyalarını veya ikili dosyaları çağırdığını unutmayın, bu işe yaramaz. Ayrıca, stratejinin Bash Script, Perl, Python veya benzeri ile yazılmış metinsel komut dosyalarının aksine ikili dosyalar ile çalışmadığını unutmayın.


+1 - Hiç böyle konuşmayı düşünmedim.
Nathan Osman,

8
İkili dosyaları çalıştırmak /lib64/ld-linux-x86-64.so.2 ./program.biniçin, 64 bit programlar ve /lib/ld-linux.so.2 ./program.bin32 bit programlar için kullanın .
Lekensteyn

8

Göre Mülkiyet ve izinler NTFS-3G belgelerin bölümünde, biz dosya denetlemek için bağlama seçenekleri kullanabilirsiniz erişimi ve oluşturma . Kombinasyonlar çok karmaşıktır (oradaki iki tabloya bakınız). Ayrıca hepsini okuyup almıyorum. Örneğin, POSIX ACL'lerinin derleme sırasında NTFS-3G ikili paketinin seçilip seçilmediğini bilmiyorum. Ancak çıktığım en iyisi, Windows ve Linux arasındaki dosya sahipliği ve izinlerin makul bir eşleşmesini yaklaşık olarak belirlemek için bazı takma seçenekleriyle birleştirilmiş bir Kullanıcı Eşleme dosyası kullanmak .


Uyarı : Bu, yalnızca çift ​​önyüklemeli Windows 8 ve Kubuntu 14.04 arasındaki NTFS veri bölümünü ( D:Windows'ta sürücü ) paylaştığımda en iyisidir . Talimatlar titizlikle retrospeksiyonda kaydedilir ancak ayrıntılı bir şekilde test edilmez. Tüm prosedürü tekrarlamak çok yorucu ve sıkıcı. Bu yüzden kendi sorumluluğunuzdadır izleyin. Ama yaparsanız, deneyiminizi geri paylaşın. Talimatları izlemeye karar verirseniz, gerçekte hareket etmeden önce tam bir resim çekmek için lütfen tamamen okuyun. İyi şanslar!


Tamam, işte burda! Ayrıntılı talimatlar üç bölümden oluşmaktadır. Kısım 1 Windows'ta, Kısım 2 Linux'ta yapılmalıdır. Bölüm 3 test içindir.

Bölüm 1

Kullanıcı Haritalama NTFS-3G belgelerin bölüm Windows ve Linux, bir Windows sürümünden ve bir Linux sürümü arasında kullanıcı eşleme kurmak için iki sürümü belirtir. Benim deneyimim, Linux sürümünün bir özlemle sonuçlanmasıydı . Linux hesap edildi değil benim Windows hesabına eşleştirilmiş ancak bazı bilinmeyen hesabı altında çıktı SID . Sonuç olarak, bu bilinmeyen hesap Windows hesabımın tüm dosyalarının sahipliğini aldığı için bir karışıklık oldu. Bu durumda, mülkiyeti geri alma konusunda idari bir yetkiniz yoksa, Windows hesabınızdaki dosyalara erişilemez hale gelir. Ama sen uydursan bile, halayanlış bir haritalama. Yani, daha sonra Linux'ta oluşturduğunuz her hangi bir dosya Windows'taki bilinmeyen hesaba ve Windows'takiler Linux'ta root olarak atanır (doğru hatırlıyorsam). Öyleyse, Windows’ta mülkiyeti tekrar geri almanız ve Linux’un mülkiyeti değiştirmesi gerekir. Beklediğimiz gibi değil. Sorunu çözmek için yapılan birkaç umutsuz denemeden sonra pes ettim ve Windows versiyonuna döndüm. Bu işe yaradı. NTFS-3G dokümantasyonunun ilgili bölümünden çıkarılan detaylı talimatlar aşağıdaki gibidir:

  1. Kullanıcı haritası aracını indirin, paylaşılacak bir yere (benim durumumda, sürücüye C:), NTFS bölümünün dışına (benim durumumda ) daha iyi paylaşınD: .

  2. Windows komut satırını açın. Aletin çıkartılan dizinine tools(varsayılan olarak) geçin usermap. Sonra aşağıdaki komutu çalıştırın:

    C:\tools> mapuser > UserMapping
    

    Bu bir şablon oluşturur ve adlandırılmış bir dosyaya yönlendirir UserMapping. Dosyayı bir metin editörüyle açın, Not Defteri deyin, aşağıdaki satırları görmelisiniz:

    # 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
    

    Tahminen, ilk önce SIDkullanıcı SID, ikinci grup ise SID olmalıdır. Bunları sırasıyla ve komutları whoami /userile kontrol edebilirsiniz whoami /groups.

  3. Eğer SID doğru olduğundan emin olduktan sonra, değişim, yani açıklamada talimatları izleyerek userde user::SIDhat kullanıcı adınız ve groupde :group:SIDLinux üzerinde birincil grubu adının hattı. Ubuntu'da bunlar aynı. Ayrıca, Linux grubunun adını, user::SIDsatırın ilk sütunundan sonra da ekleyin . Yani çizgi bir şeye benzemeli user:group:SID. Öyle gözükmüyorsa, Windows'ta oluşturulan dosyalar user:rootLinux'ta atanacak gibi görünüyor .

  4. Dosya 'yı kaydet. .NTFS-3GPaylaşılacak NTFS bölümünde (henüz mevcut değilse oluşturun) adlı bir dizine (benim durum sürücümde D:) taşıyın .

  5. Bu adım, Bölüm 3'teki sınama içindir. Paylaşılan NTFS bölümünde, yeni bir dizin ve yeni bir dosya oluşturun.

Bölüm 2

Şimdi Linux'a önyükleme yapın. sudodosyayı düzenleyin /etc/fstab. Paylaşılan NTFS bölümünün satırını aşağıdaki gibi bir şeye ekleyin veya değiştirin:

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

Önemli olan ayarlamak umask( dmaskve fmaskayrıca çalışabilir ancak test edilmemiş olabilir). umaskBen seçsem de, senin için bir değer seç 077. Bu ayar olmadan, oyeni oluşturulan dosyalar için tam izin verilecek gibi görünüyor .

Dosya 'yı kaydet. Şimdi sudo mountya da paylaşılan NTFS bölümünü ( sudo umountve ardından sudo mount) yeniden konumlandırın (benim durumumda /data):

$ sudo mount /data

Bölüm 3

Şimdi (hala Linux'ta) cdbağlama noktasına (benim durumumda /data), ls -loradaki dosyalar. Sahipliklerinin ve izinlerinin sırasıyla UserMappingdosyada ve umasksizin belirlediğinizle /etc/fstabuyuşup uyuşmadığını kontrol edin (izinler arasındaki uyuşma ve umaskbazı tamamlayıcı hesaplamaları gerekir, daha fazla bilgi için man (1) umask'a bakın. Yaparlarsa tebrikler, yarım hedefe ulaşılır. Aksi takdirde, seni fakir. Ubuntu ya da Windows'a sorun.

Sonra yeni bir dizin ve yeni bir dosya oluşturun. ls -lsahipliklerini ve izinlerini kontrol etmek için. Mülkiyet, kullanıcı adınız ve her zaman olduğu gibi birincil grup olmalıdır. İzinler, eşleşmelidir umask. Şimdi bilgisayarınızı yeniden başlatın ve Windows'a önyükleyin. Paylaşılan NTFS bölümünde, Linux'ta oluşturduğunuz dizini ve dosyayı bulun. Windows hesabınıza atanıp atanmadıklarını görmek için özelliklerini kontrol edin. Öyleyse, tebrikler, hepiniz bitirdiniz. Aksi takdirde, kötü şans. Windows veya Ubuntu'ya sorun.

EOF


6

Eski konu, biliyorum ama yine de alakalı ve hala bir konu var, başka forumlarda / konulardaki farklı önerilerden oluşan ve Ubuntu GNOME 13.04'te test edilen ve Steam kütüphanesini tutmak için harici bir sürücü istiyorum.

NTFS bölümü harici bir usb sürücüdeyken, örneğin - bölüm bağlantının anında bağlandığı anlamına gelir - o zaman udev mount ntfs bölümlerini yürütme haklarıyla yapmak için aşağıdaki yöntemi kullanabilirsiniz.

Bir terminal penceresi açın ve şunları yapın:

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

Ardından bu satırı boş / yeni bir dosyaya yapıştırın (değilse, nano çıkın ve komutu yeniden yayınlayın ancak dosya adını 91 -... gibi daha yüksek bir sayı ile başlayarak):

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

Sonra kaydedin ve kapatın. Sürücüyü çıkarın ve ardından terminalde yapın:

$ sudo service udev restart

Sonra sürücüyü tekrar takın ve keyfini çıkarın :)


1
Mükemmel, bu kabul edilen cevap olmalı.
leftaroundabout

4

Tüm adımlar:

  1. Yükleyin ntfs-3g:

    sudo apt-get install -y ntfs-3g
    
  2. NTFS bölümünü kaldırma :

    sudo umount /mnt/windows
    
  3. Dosyanızı ntfs-3g.usermapoluşturmak için kullanın UserMapping:

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

    veya

    sudo ntfs-3g.usermap /dev/sdb1
    
  4. Yeniden monte edin NTFS eklemek için bölüm UserMappingdosyası:

    mount -a
    sudo mkdir /mnt/windows/.NTFS-3G
    sudo mv UserMapping /mnt/windows/.NTFS-3G/
    
  5. fstabDosyanızı güncelleyin :

    sudo vim /etc/fstab
    

    Montaj hattını güncelle :

    1. Mevcut montaj hattınızı yedekleyin! Satırı çoğaltın ve #başında bir yorum ekleyerek yorum yapın .
    2. Sonra değiştir: UUID=34A0456DA04536A0 /mnt/windows ntfs defaults,uid=1000,gid=1000 0 0
    3. Sonraki: UUID=34A0456DA04536A0 /mnt/windows ntfs-3g defaults 0 0 (Kullan ntfs-3gve yalnızca defaultseçeneği)

    Bunun gibi bir şeye benzemeli:

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

  6. Son olarak, kullanarak fstab:

    sudo umount /mnt/windows
    sudo mount -a
    

Bunu, sahip olduğunuz her NTFS bölümü için bir kez yapın !

Windows işletim sistemiyle UYARI!

Windows 7+ ile kontrol ediyorum ve izinler Windows işletim sistemini etkiliyor! Giriş bölümümün Windows bölümündeki izinlerini değiştiriyorum ve Windows'u tekrar kullandığımda kullanıcının kırıldığını görebiliyordum!


1

USB cihazları için n ile ilgili bir soru yok. Her USB aygıtını yürütme izinleriyle otomatik olarak monte etmek istiyorsanız, bu yanıt çirkin bir kesilme sağlar.


1

NTFS bölümünü özel izinler ve sahip olan bir USB sürücüye takın

Linux'ta NTFS (ve FAT32) modu, bölümün mount seçenekleri ile belirlenir . Chmod ile değiştiremezsiniz.

Varsayım: USB sürücü olarak görülüyor sdb1 , sizin durumunuzda sürücü harfini ve bölme numarasını eşleştirmek için değiştirmek . Genel sözdizimi sdxnnerede, xsürücü harfi ve nörneğin tarafından görülen bölüm numarasıdırsudo lsblk -f

hazırlama

  • NTFS bölümünü ayırın.

    sudo umount /dev/sdxn   # general syntax
    sudo umount /dev/sdb1   # modify to match your case
    
  • Özel bir mountpoint oluşturun (yalnızca yeni bir mountpoint istiyorsanız), örneğin

    sudo mkdir -p /mnt/sd1
    
  • Kullanıcı kimliğinin uidnumarasını kontrol et (genellikle 1000, bazen 1001 veya 1002 ...)

    grep ^"$USER" /etc/group
    

    ve mülkiyeti almak istiyorsanız bu numarayı kullanın (varsayılan ayardır root).

NTFS bölümünü bağlayın

Örnek 1 (dosyalar için çalıştırma izinleri olmadan, 'diğerleri' için erişim yok),

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
  • bu durumda betiği this-scriptile çalıştırabilirsiniz

    bash /mnt/sd1/this-script
    

Örnek 2 (dosyalar için çalıştırma izinleriyle, 'diğerleri' için erişim yok),

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
  • Bu durumda betiği this-scriptile çalıştırabilirsiniz

    /mnt/sd1/this-script
    

    ve çalıştırılabilir programları da bu konumdan çalıştırabilirsiniz (bu önerilmez).

Örnek 3 (birkaç kullanıcı olduğunda herkes için uygun, ancak güvenli olmayan herkes için tam izinler),

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 sürücünüzün donanımının salt okunur veya 'ızgara kilitli' hale gelmesinden korkuyorum. Ancak, dosya sisteminde bir sorun olabilir ve eğer dosya sistemi bozuksa, Windows'ta onararak, GUI yöntemiyle veya chkdsk /f X:bu bağlantıya göre komut satırını kullanarak bu sorunu çözebilirsiniz ubuntuforums.org /… - Hala şans yoksa, verileri yedekle ve askubuntu.com/questions/144852/…
sudodus
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.