Làm cách nào để sử dụng 'chmod' trên phân vùng NTFS (hoặc FAT32)?


129

Tôi có một tập lệnh mà tôi cần thực thi trên phân vùng NTFS. Sự cho phép của tập lệnh được đặt thành 600.

Tôi đã cố gắng sửa đổi các quyền bằng cách chạy chmod 755 script.sh, điều này không báo cáo lỗi hoặc bất cứ điều gì - nhưng nó cũng không thay đổi các quyền trên tệp:

$ 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

Như bạn có thể thấy, nó vẫn không thay đổi.


Một giải pháp tốt hơn có thể được tìm thấy ở đây Hai câu hỏi này nên được liên kết!

Câu trả lời:


79

Chế độ được xác định bởi các tùy chọn gắn kết của phân vùng (bạn không thể thay đổi nó qua chmod).

Đối với '755' trên các tệp và '777' trên các thư mục, bạn sẽ sử dụng một cái gì đó như

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

Được rồi, điều đó sẽ giải thích một vài điều khác nữa.
Nathan Osman

5
Tôi nên đặt cái gì vào vị trí /dev/whatever/mnt/whatevernếu tôi phải thay đổi quyền của phân vùng ổ cứng có tên/media/Prtn
pranphy

3
Việc gắn theo cách này có giữ được các thiết lập ban đầu của đĩa không? Tức là nó an toàn để gắn một ổ đĩa Windows?
Jonathan

1
Tôi đặt người dùng thành 'andrew', đây là người dùng chính của tôi. Bởi ls cho phân vùng ntfs cho thấy rằng tất cả các tệp / thư mục trong đó là của riêng root.
deathangel908

Giải pháp thực sự là ntfs-3g.usermap. Xem bên dưới ...
Eduardo Cuomo

86

Trái với những gì hầu hết mọi người tin, NTFS là một hệ thống tệp tương thích POSIX và có thể sử dụng quyền trên NTFS .

Để kích hoạt tính năng này, bạn cần có "Tệp bản đồ người dùng" hoặc chỉ cung cấp permissionstùy chọn khi cài đặt (khi không cần tương thích với Windows). Điều này ánh xạ người dùng linux trên hệ thống của bạn với ID người dùng như NTFS / Windows sử dụng chúng trong nội bộ.

Xem trang chủ ntfs-3g để biết một số thông tin và một số ví dụ. Nếu bạn cần thêm thông tin, hãy xem tài liệu nâng cao ntfs-3g về quyền sở hữu và quyền .

(Lưu ý rằng điều này không hoạt động trên các hệ thống tập tin FAT.)

¹ Có, nó cũng có thể lưu trữ tên tệp hợp lệ trong linux / unix nhưng không có trong Windows, hỗ trợ symlink & hardlink, v.v.


4
đây là tài liệu tốt trong ngắn hạn: sudo ntfs-3g.usermap /dev/disk/by-label/MY-NTFSvà sau đósudo mv UserMapping /media/MY-NTFS/.NTFS-3G/
cừu bay

1
Vì vậy, điều này sẽ cho phép bạn tùy ý thiết lập quyền như chmod 655 /some/filetrên phân vùng NTFS được gắn trong Linux? Tôi đang cố gắng tìm ra cách hợp nhất phân vùng nhà của tôi từ linux vào c: \ Users. Việc sử dụng usermap có cho phép tôi giữ lại tất cả các quyền không? Tôi đã lên kế hoạch gắn thư mục c: \ Users vào / home trong linux.
trusktr

7
Hãy để tôi nhấn mạnh lại nhận xét của bạn: "khi không cần tương thích với Windows". ref: Askubfox.com/questions/92863/NH
hình elip

1
ntfs-3g manpageliên kết bị hỏng
ctrl-alt-delor

Eduardo Cuomo đã viết một ví dụ khá hay về tất cả các bước cần thiết để tạo một "Tệp bản đồ người dùng" tại đây: Askubfox.com/a/887502/327339
Gabriel Staples

38

Đối với phân vùng NTFS, sử dụng permissionstùy chọn trong fstab.

Đầu tiên ngắt kết nối phân vùng ntfs.

Xác định UUID phân vùng của bạn với blkid

sudo blkid

Sau đó chỉnh sửa /etc/fstab

# Graphical 
gksu gedit /etc/fstab

# Command line
sudo -e /etc/fstab

Và thêm hoặc chỉnh sửa một dòng cho phân vùng ntfs

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

Tạo một điểm gắn kết (nếu cần)

sudo mkdir /media/windows

Bây giờ gắn kết phân vùng

mount /media/windows

Các tùy chọn tôi đã cung cấp cho bạn, autosẽ tự động gắn kết phân vùng khi bạn khởi động và userscho phép người dùng gắn kết và mở rộng.

Sau đó, bạn có thể sử dụng chown và chmod trên phân vùng ntfs.


2
Làm thế nào là các quyền được lưu trữ? Trong ADS? Siêu dữ liệu khác?
ζ--

Thế còn fat32? Tôi có thẻ Micro sd được bảo vệ ghi và tôi không thể truy cập, định dạng nó.
Waqas

@RanaMuhammadWaqas - đây là một câu hỏi cũ, nhưng bạn cũng có thể gắn kết nó với các tùy chọn khác nhau. Khó biết vấn đề của bạn là gì, có lẽ xác định phần cứng của bạn và đặt một câu hỏi riêng.
Panther

@ bodhi.zazen usersngụ ý noexec , nosuidgật đầu . không phải sao? Làm thế nào người dùng có thể gắn kết / umount với noexecđược thiết lập?
Khurshid Alam

1
@EduardoCuomo - Đăng một bình luận trong một câu trả lời cho biết nó không hoạt động là không thể giúp bạn. Hệ thống tập tin gì? Tôi đề nghị bạn mở một câu hỏi. Bạn cần xác định hệ thống tập tin và đăng mục nhập fstab của bạn
Panther

20

Ngoài việc đặt fmask và / hoặc dmask trong câu trả lời của htorque ở trên, nếu bạn muốn thực thi các tập lệnh trên ổ đĩa, tôi cũng phải đặt tùy chọn gắn kết "exec".

Vì vậy, ví dụ sẽ là:

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

14

Bạn luôn có thể gọi một cách rõ ràng trình thông dịch kịch bản, trong trường hợp đó không yêu cầu quyền thực thi. Nếu tập lệnh sử dụng bash , như có thể được xác minh bằng cách nhìn vào dòng đầu tiên của tập lệnh, chỉ cần chạy

bash script.sh

Lưu ý rằng tập lệnh gọi các tập lệnh hoặc nhị phân khác trên cùng một phân vùng, điều này sẽ không hoạt động. Cũng lưu ý rằng chiến lược này không hoạt động với các tệp nhị phân trái ngược với các tệp tập lệnh văn bản được viết bằng Bash Script, Perl, Python hoặc tương tự.


+1 - Tôi chưa bao giờ nghĩ về việc gọi nó theo cách đó.
Nathan Osman

8
Để thực thi nhị phân, sử dụng /lib64/ld-linux-x86-64.so.2 ./program.bincho các chương trình 64 bit và /lib/ld-linux.so.2 ./program.bincho các chương trình 32 bit.
Lekensteyn

8

Theo phần Quyền sở hữu và Quyền của tài liệu NTFS-3G, chúng tôi có thể sử dụng tùy chọn gắn kết để kiểm soát truy cậptạo tệp . Các kết hợp rất phức tạp (xem hai bảng ở đó). Ngoài ra tôi không đọc và nhận được tất cả chúng. Ví dụ: tôi không biết liệu POSIX ACL có được chọn tại thời điểm biên dịch hay không của gói nhị phân NTFS-3G. Nhưng điều tốt nhất tôi đã đưa ra là sử dụng tệp Ánh xạ người dùng kết hợp với một số tùy chọn gắn kết để xấp xỉ ánh xạ chính đáng của quyền sở hữu tệp và quyền giữa Windows và Linux.


Cảnh báo : Đây chỉ là những gì hoạt động tốt nhất để tôi chia sẻ phân vùng dữ liệu NTFS (ổ đĩa D:trên Windows) giữa Windows 8 khởi động kép và Kubfox 14.04. Các hướng dẫn được ghi lại trong hồi cứu cẩn thận nhưng không được kiểm tra kỹ lưỡng. Thật quá mệt mỏi và tẻ nhạt khi lặp lại toàn bộ quy trình một lần nữa. Vì vậy, theo nó có nguy cơ của riêng bạn. Nhưng nếu bạn làm, hãy chia sẻ lại kinh nghiệm của bạn. Nếu bạn quyết định làm theo hướng dẫn, xin vui lòng đọc nó đầy đủ để có một bức tranh toàn cảnh trước khi thực sự hành động. Chúc may mắn!


Được rồi, bạn đi đây! Các hướng dẫn chi tiết bao gồm ba phần. Phần 1 nên được thực hiện trên Windows trong khi Phần 2 trên Linux. Phần 3 là để thử nghiệm.

Phần 1

Phần Ánh xạ người dùng trong tài liệu NTFS-3G chỉ định hai phiên bản để thiết lập ánh xạ người dùng giữa Windows và Linux, một phiên bản Windows và một phiên bản Linux. Kinh nghiệm của tôi là phiên bản Linux đã kết thúc với một lỗi . Tài khoản Linux không được ánh xạ vào tài khoản Windows của tôi nhưng một số tài khoản không xác định đã xuất hiện dưới SID . Kết quả là một mớ hỗn độn vì tài khoản không xác định này chiếm quyền sở hữu tất cả các tệp trong tài khoản Windows của tôi. Trong tình huống đó, trừ khi bạn có đặc quyền quản trị để lấy lại quyền sở hữu của mình, các tệp trong tài khoản Windows của bạn sẽ không thể truy cập được. Nhưng ngay cả khi bạn lột xác, nó vẫnmột ánh xạ sai. Điều đó có nghĩa là, sau này, bất kỳ tệp nào bạn tạo trên Linux đều được gán cho tài khoản không xác định đó trên Windows và những tệp trên Windows sẽ được gán cho root trên Linux (nếu tôi nhớ chính xác). Vì vậy, trên Windows, bạn cần lấy lại quyền sở hữu và trên Linux thay đổi quyền sở hữu. Đó không phải là những gì chúng ta mong đợi nó được. Sau nhiều nỗ lực vô vọng để khắc phục sự cố, tôi đã từ bỏ và chuyển sang phiên bản Windows. Đó là một trong những làm việc. Hướng dẫn chi tiết được trích xuất từ ​​phần có liên quan của tài liệu NTFS-3G như sau:

  1. Tải xuống công cụ usermap , giải nén nó ở đâu đó (trong trường hợp của tôi, ổ đĩa C:), tốt hơn ngoài phân vùng NTFS (trong ổ đĩa trường hợp của tôi D:) để được chia sẻ.

  2. Mở dòng lệnh Windows. Thay đổi thư mục giải nén tools(theo mặc định) của usermapcông cụ. Sau đó chạy lệnh sau:

    C:\tools> mapuser > UserMapping
    

    Điều này tạo ra một mẫu và chuyển hướng nó đến một tệp có tên UserMapping. Mở tệp bằng trình soạn thảo văn bản, giả sử Notepad, bạn sẽ thấy các dòng sau:

    # 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
    

    Có lẽ, người đầu tiên SIDnên là người dùng SID của bạn trong khi người thứ hai là nhóm SID của bạn. Bạn có thể kiểm tra chúng tương ứng bằng các lệnh whoami /userwhoami /groups.

  3. Sau khi bạn chắc chắn rằng các SID là chính xác, theo các hướng dẫn trong các bình luận, có nghĩa là, sự thay đổi usertrong user::SIDdòng tên người dùng của bạn và grouptrong :group:SIDdòng vào tên của nhóm chính của bạn trên Linux. Trên Ubuntu, chúng giống nhau. Hơn nữa, thêm tên nhóm Linux của bạn sau dấu hai chấm đầu tiên của user::SIDdòng. Vì vậy, dòng nên trông giống như user:group:SID. Có vẻ như nếu không làm như vậy, các tệp được tạo trên Windows sẽ được gán cho user:rootLinux.

  4. Lưu các tập tin. Di chuyển nó đến một thư mục có tên .NTFS-3G(tạo nó nếu chưa tồn tại) trên phân vùng NTFS sẽ được chia sẻ (trong trường hợp của tôi D:).

  5. Bước này là để thử nghiệm trong Phần 3. Trên phân vùng NTFS được chia sẻ, tạo một thư mục mới và một tệp mới.

Phần 2

Bây giờ khởi động vào Linux. sudochỉnh sửa tập tin /etc/fstab. Thêm hoặc sửa đổi dòng cho phân vùng NTFS được chia sẻ thành một cái gì đó như sau:

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

Điều cần thiết là thiết lập umask( dmaskfmaskcũng có thể hoạt động nhưng không được kiểm tra). Chọn một giá trị cho umaskbạn thích, mặc dù tôi đã chọn 077. Dường như không có cài đặt này, các quyền đầy đủ sẽ được trao ocho những kẻ mới cho các tệp mới được tạo.

Lưu các tập tin. Bây giờ sudo mounthoặc kể lại ( sudo umountvà sau đó sudo mount) phân vùng NTFS được chia sẻ (trong trường hợp của tôi /data):

$ sudo mount /data

Phần 3

Bây giờ (vẫn trên Linux) cdđến điểm gắn kết (trong trường hợp của tôi /data), ls -lcác tệp ở đó. Kiểm tra xem quyền sở hữu và quyền của họ có khớp với nhau tương ứng mà bạn đã chỉ định trong UserMappingtệp và umaskbạn đã đặt hay không /etc/fstab(khớp giữa các quyền và umaskyêu cầu một số tính toán bổ sung, xem ô (1) để biết thêm thông tin). Nếu họ làm, xin chúc mừng, một nửa mục tiêu đã đạt được. Nếu không, tội nghiệp bạn. Hỏi Ubuntu hoặc Windows.

Sau đó tạo một thư mục mới và một tập tin mới. ls -lđể kiểm tra quyền sở hữu và quyền của họ. Quyền sở hữu phải là tên người dùng và nhóm chính của bạn như bình thường. Các quyền phải phù hợp với umask. Bây giờ khởi động lại máy tính của bạn và khởi động vào Windows. Định vị trên phân vùng NTFS được chia sẻ thư mục và tệp bạn vừa tạo trên Linux. Kiểm tra các thuộc tính của chúng để xem chúng có được gán cho tài khoản Windows của bạn không. Nếu có, xin chúc mừng, bạn đã hoàn tất. Nếu không thì xui xẻo. Hỏi Windows hoặc Ubuntu.

EOF


6

Tôi biết chủ đề cũ, nhưng vẫn có liên quan và thiếu một mẹo sử dụng cụ thể, bao gồm từ các đề xuất khác nhau trên các diễn đàn / chủ đề khác nhau và đã thử nghiệm trên Ubuntu GNOME 13.04 trong đó tôi muốn có một ổ đĩa ngoài để giữ thư viện Steam ...

Ví dụ, khi phân vùng NTFS nằm trên ổ USB ngoài - có nghĩa là phân vùng được gắn kết khi đang kết nối - thì bạn có thể sử dụng phương pháp sau để tạo phân vùng ntfs mount với quyền thực thi.

Mở một cửa sổ đầu cuối và làm:

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

Sau đó dán dòng này vào tệp trống / mới (nếu không, sau đó thoát nano và cấp lại lệnh nhưng bắt đầu tên tệp với số cao hơn như 91 -...):

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

Sau đó lưu và đóng lại. Rút ổ đĩa và sau đó làm trong thiết bị đầu cuối:

$ sudo service udev restart

Tiếp theo, cắm ổ đĩa lại và thưởng thức :)


1
Tuyệt vời, đây nên là câu trả lời được chấp nhận.
leftaroundabout

4

Tất cả các bước:

  1. Cài đặt ntfs-3g:

    sudo apt-get install -y ntfs-3g
    
  2. Ngắt kết nối phân vùng NTFS :

    sudo umount /mnt/windows
    
  3. Sử dụng ntfs-3g.usermapđể tạo UserMappingtệp của bạn :

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

    hoặc là

    sudo ntfs-3g.usermap /dev/sdb1
    
  4. Kể lại phân vùng NTFS để thêm UserMappingtệp:

    mount -a
    sudo mkdir /mnt/windows/.NTFS-3G
    sudo mv UserMapping /mnt/windows/.NTFS-3G/
    
  5. Cập nhật fstabtệp của bạn :

    sudo vim /etc/fstab
    

    Cập nhật dòng gắn kết :

    1. Sao lưu dòng gắn kết hiện tại của bạn! Nhân đôi dòng và nhận xét nó bằng cách thêm một# ở đầu.
    2. Thay đổi tiếp theo: UUID=34A0456DA04536A0 /mnt/windows ntfs defaults,uid=1000,gid=1000 0 0
    3. Bởi tiếp theo: UUID=34A0456DA04536A0 /mnt/windows ntfs-3g defaults 0 0 ( Tùy chọn sử dụng ntfs-3gvà duy nhất default)

    Nó sẽ trông giống như thế này:

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

  6. Cuối cùng, hãy sử dụng lại fstab:

    sudo umount /mnt/windows
    sudo mount -a
    

Làm điều này một lần cho mỗi phân vùng NTFS bạn có!

CẢNH BÁO VỚI HĐH WINDOWS!

Tôi kiểm tra nó với Windows 7+ và các quyền ảnh hưởng đến HĐH Windows! Tôi thay đổi quyền của Thư mục chính trên phân vùng Windows và khi tôi sử dụng lại Windows, tôi có thể thấy rằng người dùng đã bị hỏng!


1

Có n câu hỏi liên quan cho các thiết bị USB. Câu trả lời này cung cấp một bản hack xấu xí nếu bạn muốn tự động gắn mọi thiết bị USB với quyền thực thi.


1

Gắn kết phân vùng NTFS trong ổ USB với quyền và chủ sở hữu tùy chỉnh

Trong Linux, chế độ NTFS (và FAT32) được xác định bởi các tùy chọn gắn kết của phân vùng . Bạn không thể thay đổi nó thông qua chmod.

Giả định: ổ USB được xem là sdb1 , sửa đổi để khớp với tên ổ đĩa và số phân vùng trong trường hợp của bạn . Cú pháp chung là sdxn, xký tự ổ đĩa ở đâu và nlà số phân vùng như được thấy bởi ví dụsudo lsblk -f

Chuẩn bị

  • Ngắt kết nối phân vùng NTFS.

    sudo umount /dev/sdxn   # general syntax
    sudo umount /dev/sdb1   # modify to match your case
    
  • Tạo một mountpoint tùy chỉnh (chỉ khi bạn muốn một mountpoint mới), ví dụ như với

    sudo mkdir -p /mnt/sd1
    
  • Kiểm tra uidsố ID người dùng của bạn (thường là 1000, đôi khi 1001 hoặc 1002 ...)

    grep ^"$USER" /etc/group
    

    và sử dụng số đó nếu bạn muốn lấy quyền sở hữu (mặc định là root).

Gắn kết phân vùng NTFS

Ví dụ 1 (không có quyền thực thi cho các tệp, không có quyền truy cập cho 'người khác'),

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
  • trong trường hợp này bạn có thể chạy tập lệnh this-scriptvới

    bash /mnt/sd1/this-script
    

Ví dụ 2 (có quyền thực thi cho các tệp, không có quyền truy cập cho 'người khác'),

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
  • Trong trường hợp này, bạn có thể chạy tập lệnh this-scriptvới

    /mnt/sd1/this-script
    

    và bạn cũng có thể chạy các chương trình thực thi từ vị trí này (không phải là nó được khuyến nghị).

Ví dụ 3 (quyền đầy đủ cho mọi người, thuận tiện nhưng không an toàn, khi có nhiều người dùng),

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
alrcal

@alhelal, tôi e rằng phần cứng của ổ USB của bạn đã trở thành chỉ đọc hoặc 'khóa lưới'. Nhưng cũng có thể có một số vấn đề với hệ thống tệp và nếu hệ thống tệp bị hỏng, bạn có thể sửa nó bằng cách sửa chữa nó trong Windows, bằng phương pháp GUI hoặc với dòng lệnh chkdsk /f X:theo liên kết này ubuntuforums.org / Vay
sudodus
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.