NTFS(またはFAT32)パーティションで「chmod」を使用するにはどうすればよいですか?


129

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

ご覧のとおり、変更されていません。


より良い解決策はこちらにあります。この2つの質問はリンクする必要があります。

回答:


79

モードは、パーティションのマウントオプションによって決定されます(chmodで変更することはできません)。

ファイルの「755」とディレクトリの「777」には、次のようなものを使用します

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

さて、それは他のいくつかのことも説明します。
ネイサンオスマン

5
HDDパーティションのアクセス許可を変更する必要がある場合、何を代わりに配置する必要が/dev/whateverあります/mnt/whatever/media/Prtn
pranphy 14

3
この方法でマウントすると、ディスクの元の設定が保持されますか?すなわち、Windowsドライブをマウントしても安全ですか?
ジョナサン

1
ユーザーをメインユーザーである「アンドリュー」に設定します。ntfsパーティションのlsでは、その中のすべてのファイル/ディレクトリがルートによって所有されていることを示しています。
deathangel908

実際のソリューションはntfs-3g.usermapです。...以下を参照してください
エドゥアルド・クオモ

86

ほとんどの人が信じていることに反して、NTFSはPOSIX互換¹ファイルシステムであり、NTFSでアクセス許可を使用することができます

これを有効にするには、「ユーザーマッピングファイル」が必要かpermissions、マウント時にオプションを指定するだけです(Windowsとの互換性が不要な場合)。これにより、システム上のLinuxユーザーがNTFS / WindowsなどのユーザーIDでマップされ、内部で使用されます。

情報と例については、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、LinuxにマウントされたNTFSパーティションのように、許可を任意に設定できますか?Linuxのホームパーティションをc:\ Usersにマージする方法を見つけようとしています。ユーザーマップを使用すると、すべての権限を保持できますか?Linuxでc:\ Usersディレクトリを/ homeにマウントすることを計画していました。
trusktr 14

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ユーザーがマウントおよびアンマウントできるようにします。

ntfsパーティションでchownとchmodを使用できます。


2
これらの権限はどのように保存されますか?ADSで?他のメタデータ?
–ζ

fat32はどうですか?書き込み保護されたMicro sdカードがあり、アクセス、フォーマットができません。
ワカス

@RanaMuhammadWaqas-これは古い質問ですが、別のオプションでマウントすることもできます。あなたの問題が何であるかを知るのは難しいでしょう。おそらくあなたのハードウェアを特定し、別の質問をしてください。
パンサー

@ bodhi.zazenはusersnoexecnosuid、および nodevを意味します。じゃない?ユーザーはどのようnoexecに設定されたままマウント/アンマウントできますか?
ルシッドアラム

1
@EduardoCuomo-それが機能していないという回答にコメントを投稿することはあなたを助けそうにない。どのファイルシステム?質問を開くことをお勧めします。ファイルシステムを識別し、fstabエントリを投稿する必要があります
Panther

20

上記のhtorqueの回答でfmaskやdmaskを設定することに加えて、ドライブでスクリプトを実行する場合は、「exec」マウントオプションも設定する必要がありました。

したがって、例は次のようになります。

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

14

スクリプトインタープリターをいつでも明示的に呼び出すことができます。この場合、実行権限は必要ありません。スクリプトの最初の行を見て確認できるように、スクリプトが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.bin32 ビットプログラムに使用します。
-Lekensteyn

8

NTFS-3Gのドキュメントの「所有権と権限」セクションによると、マウントオプションを使用してファイルのアクセス作成を制御できます。組み合わせは非常に複雑です(2つの表を参照)。また、私はそれらのすべてを読んだり取得したりしません。たとえば、NTFS-3GバイナリパッケージのPOSIX ACLがコンパイル時に選択されているかどうかはわかりません。しかし、私が思いついたのは、ユーザーマッピングファイルといくつかのマウントオプションを組み合わせて使用し、WindowsとLinux間のファイルの所有権とアクセス許可のもっともらしいマッピングを近似することです。


警告:これは、デュアルブートWindows 8とKubuntu 14.04の間でNTFS データパーティションD:Windows上のドライブ)を共有するのに最適な方法です。指示は慎重に振り返って記録されていますが、完全にはテストされていません。すべての手順を再度繰り返すのは大変で退屈です。したがって、自己の責任においてそれに従ってください。しかし、もしそうなら、あなたの経験を共有してください。指示に従うことにした場合、実際に行動する前に全体像を把握するためにそれを完全に読んでください。幸運を!


よし、行くぞ!詳細な手順は3つの部分で構成されています。パート1はWindowsで、パート2はLinuxで実行する必要があります。パート3はテスト用です。

パート1

NTFS-3Gのドキュメントのユーザーマッピングセクションでは、2つのバージョンを指定して、WindowsとLinux間のユーザーマッピングを設定しています。1つのWindowsバージョンと1つのLinuxバージョンです。私の経験では、Linuxバージョンが失敗に終わったということです。LinuxアカウントはWindowsアカウントにマップされませんでしたが、SIDの下に不明なアカウントが表示されました。この未知のアカウントは、Windowsアカウントのすべてのファイルの所有権を取得するため、結果は混乱しました。その状況では、所有権を取り戻す管理者権限がない限り、Windowsアカウントのファイルにアクセスできなくなります。しかし、あなたがman化しても、それはまだです間違ったマッピング。つまり、後でLinuxで作成したファイルはすべてWindowsの不明なアカウントに割り当てられ、WindowsのファイルはLinuxのルートに割り当てられます(正しく覚えている場合)。そのため、Windowsでは再度所有権を取り戻す必要があり、Linuxでは所有権を変更する必要があります。それは我々が期待するものではありません。問題を解決するための絶望的な試みを何度か行った後、私はあきらめてWindowsバージョンに切り替えました。それはうまくいきました。NTFS-3Gドキュメントの関連セクションから抽出された詳細な手順は次のとおりです。

  1. ユーザーマップツールをダウンロードし、どこか(私の場合はdrive C:)に展開し、D:共有するNTFSパーティションの外側(この場合はdrive )に展開します。

  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で、2番目はグループSIDでなければなりません。コマンドwhoami /userとでそれぞれ確認できますwhoami /groups

  3. コメントの指示に従ってSIDが正しいことを確認した後、つまりuseruser::SID行をユーザー名groupに、:group:SID行をプライマリグループ名に変更します。Ubuntuでは、それらは同じです。さらに、user::SID行の最初のコロンの後にLinuxグループ名も追加します。したがって、行は次のようになりuser:group:SIDます。そうしないと、Windowsで作成されたファイルuser:rootがLinuxに割り当てられるようです。

  4. ファイルを保存します。.NTFS-3G共有するNTFSパーティション上の名前のディレクトリ(まだ存在しない場合は作成)に移動します(私の場合はdrive D:)。

  5. この手順は、パート3のテスト用です。共有NTFSパーティションで、新しいディレクトリと新しいファイルを作成します。

パート2

Linuxを起動します。 sudoファイルを編集します/etc/fstab。共有NTFSパーティションの行を次のように追加または変更します。

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

必須は設定することですumaskdmaskまた、動作fmaskする可能性がありますが、テストされていません)。umask私が選んだものの、好きな値を選んでください077。この設定がないとo、新しく作成されたファイルの完全な許可がthersに与えられるようです。

ファイルを保存します。次に、共有NTFSパーティションを(sudo mountまたは私の場合)再マウントします(sudo umountその後)。sudo mount/data

$ sudo mount /data

パート3

今(まだLinuxで)cdマウントポイント(私の場合は/data)、ls -lそこにあるファイルに移動します。それらの所有権と許可が、UserMappingファイルで指定したものとumask設定したものとそれぞれ一致するかどうかを確認します/etc/fstab(許可間の一致とumask補足計算が必要です。詳細については、man(1)umaskを参照してください)。もしそうなら、おめでとう、半分の目標が達成されます。そうでなければ、あなたは貧しい。UbuntuまたはWindowsに尋ねます。

次に、新しいディレクトリと新しいファイルを作成します。 ls -l所有権と権限を確認します。所有権は、通常どおりユーザー名とプライマリグループにする必要があります。許可はに一致する必要がありumaskます。コンピューターを再起動し、Windowsを起動します。Linuxで作成したディレクトリとファイルを共有NTFSパーティションで見つけます。それらのプロパティをチェックして、Windowsアカウントに割り当てられているかどうかを確認します。彼らがそうであれば、おめでとう、あなたはすべて完了です。そうでなければ、不運。WindowsまたはUbuntuに尋ねます。

EOF


6

古いスレッド、私は知っていますが、まだ関連性があり、さまざまな他のフォーラム/スレッドのさまざまな提案から構成され、Steamライブラリを保持する外部ドライブが必要なUbuntu GNOME 13.04でテストされた特定のユースケースのヒントがありません...

たとえば、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. 現在のマウントラインをバックアップしてください!行を複製#し、先頭にa を追加してコメントします。
    2. 次に変更: UUID=34A0456DA04536A0 /mnt/windows ntfs defaults,uid=1000,gid=1000 0 0
    3. 次:(オプションのみをUUID=34A0456DA04536A0 /mnt/windows ntfs-3g defaults 0 0 使用)ntfs-3gdefault

    次のようになります。

    #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パーティションごとにこれを1回行います!

Windows OSでの警告!

私はそれをWindows 7+でチェックし、パーミッションはWindows OSに影響します!Windowsパーティションのホームディレクトリのアクセス許可を変更します。Windowsを再度使用すると、ユーザーが壊れていることがわかりました。


1

USBデバイスに関するnの質問があります。すべてのUSBデバイスを実行権限で自動的にマウントしたい場合、この回答はugいハックを提供します。


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ドライブのハードウェアが読み取り専用または「グリッドロック」になっているのではないかと心配しています。ただし、ファイルシステムに問題がある可能性もあります。ファイルシステムが破損している場合は、GUIメソッドまたはchkdsk /f X:このリンクに従ってコマンドラインを使用して、Windowsで修復することで修正できる場合があります。ubuntuforums.org / ... -それでももし運、バックアップデータとに基づいてみてくださいaskubuntu.com/questions/144852/...
sudodus
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.