web-dev-qa-db-ja.com

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

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

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

126
Nathan Osman

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

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

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

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

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

情報と例については、 ntfs-3g manpage を参照してください。さらに情報が必要な場合は、 ntfs-3g所有権とアクセス許可に関する高度なドキュメント を参照してください。

(これはFATファイルシステムでは機能しないことに注意してください。)

¹はい、linux/unixでは有効だがWindowsでは有効ではないファイル名も保存でき、シンボリックリンクやハードリンクなどをサポートしています。

83
JanC

NTFSパーティションの場合、fstabでpermissionsオプションを使用します。

最初にntfsパーティションをアンマウントします。

blkidでパーティションUUIDを識別します

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を使用できます。

37
Panther

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

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

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

スクリプトインタープリターをいつでも明示的に呼び出すことができます。この場合、実行権限は必要ありません。スクリプトがbashを使用する場合、スクリプトの最初の行を確認することで確認できるように、単に実行します

bash script.sh

スクリプトは同じパーティションの他のスクリプトまたはバイナリを呼び出すことに注意してください。これは機能しません。また、この戦略は、Bash Script、Perl、Pythonなどで記述されたテキストスクリプトファイルとは対照的に、バイナリでは機能しないことに注意してください。

13
loevborg

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


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


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

パート1

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

  1. sermap ツールをダウンロードして、どこか(私の場合は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であり、2番目はグループSIDである必要があります。コマンドwhoami /userおよびwhoami /groupsでそれぞれ確認できます。

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

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

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

パート2

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

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

重要なのは、umaskを設定することです(dmaskおよびfmaskも機能する可能性がありますが、テストされていません)。 077を選択しましたが、好きなumaskの値を選択してください。この設定がないと、新しく作成されたファイルの完全な許可がothersに与えられるようです。

ファイルを保存します。共有NTFSパーティション(私の場合はSudo mount)をSudo umountまたは再マウント(Sudo mountしてから/data)します:

$ Sudo mount /data

パート3

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

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

EOF

8
reflectionalist

古いスレッド、私は知っていますが、まだ関連性があり、さまざまな他のフォーラム/スレッドのさまざまな提案から構成され、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

次に、ドライブを再び接続して楽しんでください:)

6
user17254

すべての手順:

  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
    

    更新mount行:

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

    次のようになります。

    #UUID=34A0456DA04536A0 /mnt/windows ntfs defaults,uid=1000,gid=1000 0 0UUID=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を再度使用すると、ユーザーが壊れていることがわかりました。

4
Eduardo Cuomo

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

1
lumbric

カスタムのアクセス許可と所有者でNTFSパーティションをUSBドライブにマウントする

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

仮定:USBドライブはsdb1ドライブ文字に合わせて変更ケースのパーティション番号。一般的な構文はsdxnです。ここでxはドライブ文字、nSudo 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
1
sudodus