NTFS (또는 FAT32) 파티션에서 'chmod'를 어떻게 사용합니까?


128

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

보시다시피 변경되지 않은 상태로 유지됩니다.


더 나은 해결책은 여기 에서 찾을 수 있습니다 . 이 두 질문은 연결되어야합니다!

답변:


79

모드는 파티션의 마운트 옵션에 따라 결정됩니다 (chmod를 통해 변경할 수 없음).

파일에서 '755'및 디렉토리에서 '777'의 경우 다음과 같은 것을 사용합니다

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

좋아, 이것도 몇 가지 다른 것을 설명 할 것입니다.
Nathan Osman

4
나는 무엇 무엇의 장소에 배치해야 /dev/whatever하고 /mnt/whatever나는 이름을 내 HDD 파티션의 권한을 변경해야 할 경우/media/Prtn
pranphy

3
이 방법으로 마운트하면 디스크의 원래 설정이 유지됩니까? 즉, Windows 드라이브를 마운트하는 것이 안전합니까?
Jonathan

1
사용자를 기본 사용자 인 'andrew'로 설정했습니다. ntfs 파티션의 경우 ls는 모든 파일 / 디렉토리가 루트에 의해 소유되어 있음을 보여줍니다.
deathangel908

실제 솔루션은 ntfs-3g.usermap입니다. ... 아래를 참조
에두아르도 쿠 오모에게

86

대부분의 사람들이 믿는 것과는 달리 NTFS는 POSIX 호환 ¹ 파일 시스템이며 NTFS에 대한 권한을 사용할 수 있습니다 .

이를 가능하게하려면 "사용자 매핑 파일"이 필요하거나 permissions마운트 할 때 옵션을 제공하십시오 (Windows와의 호환성이 필요하지 않은 경우). 이것은 시스템의 Linux 사용자를 NTFS / Windows와 같은 사용자 ID가 내부적으로 사용하도록 매핑합니다.

일부 정보와 예제 는 ntfs-3g 맨 페이지 를 참조하십시오 . 자세한 정보가 필요하면 소유권 및 권한에 대한 ntfs-3g 고급 문서를 참조하십시오 .

FAT 파일 시스템에서는 작동하지 않습니다.

¹ 예, Linux / unix에서는 유효하지만 Windows에서는 유효하지 않은 파일 이름을 저장할 수 있으며 symlinks 및 hardlinks 등을 지원합니다.


4
여기 좋은 문서가 있습니다. 한마디로 : sudo ntfs-3g.usermap /dev/disk/by-label/MY-NTFS그리고 나서sudo mv UserMapping /media/MY-NTFS/.NTFS-3G/
날으는 양

1
그러면 chmod 655 /some/fileLinux에 마운트 된 NTFS 파티션 과 같은 권한을 임의로 설정할 수 있습니까? 리눅스에서 c : \ Users로 홈 파티션을 병합하는 방법을 알아 내려고합니다. usermap을 사용하면 모든 권한을 유지할 수 있습니까? c : \ Users 디렉토리를 Linux의 / home에 마운트하려고했습니다.
trusktr

7
"Windows와의 호환성이 필요하지 않은 경우"라는 말을 다시 강조하겠습니다. 참조 : askubuntu.com/questions/92863/…
타원형보기

1
ntfs-3g manpage링크가 끊어짐
ctrl-alt-delor

Eduardo Cuomo는 여기에 "사용자 매핑 파일"을 만드는 데 필요한 모든 단계의 좋은 예를 썼습니다. askubuntu.com/a/887502/327339
Gabriel Staples

38

NTFS 파티션의 경우 permissionsfstab 의 옵션을 사용하십시오 .

먼저 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-이것은 오래된 질문이지만 다른 옵션으로 마운트 할 수도 있습니다. 문제가 무엇인지 알기가 어렵습니다. 아마도 하드웨어를 식별하고 별도의 질문을하십시오.
Panther

@ bodhi.zazen은 noexec , nosuidnodev를users 의미합니다 . 그렇지 않습니까? 사용자 가 설정된 상태에서 마운트 / 마운트 할 수있는 방법 noexec
Khurshid Alam

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

13

스크립트 인터프리터를 항상 명시 적으로 호출 할 수 있으며이 경우 실행 권한이 필요하지 않습니다. 스크립트가 bash를 사용하는 경우 스크립트 의 첫 번째 줄을 보면 확인할 수 있으므로 다음을 실행하십시오.

bash script.sh

스크립트는 동일한 파티션에서 다른 스크립트 나 바이너리를 호출하지만 작동하지 않습니다. 또한이 전략은 Bash Script, Perl, Python 등으로 작성된 텍스트 스크립트 파일과 달리 바이너리에서는 작동하지 않습니다.


+1-그런 식으로 호출하는 것에 대해 생각한 적이 없습니다.
Nathan Osman

8
바이너리를 실행하려면 /lib64/ld-linux-x86-64.so.2 ./program.bin64 비트 프로그램과 /lib/ld-linux.so.2 ./program.bin32 비트 프로그램에 사용하십시오 .
Lekensteyn

8

NTFS-3G 문서 의 소유권 및 권한 섹션에 따르면 마운트 옵션을 사용하여 파일 액세스생성 을 제어 할 수 있습니다 . 조합은 매우 복잡합니다 (두 표 참조). 또한 나는 그들 모두를 읽고 얻지 않습니다. 예를 들어, POSIX ACL이 컴파일시 NTFS-3G 바이너리 패키지에서 선택되었는지 여부를 알 수 없습니다. 그러나 내가 얻은 최선 은 Windows와 Linux 간의 파일 소유권과 권한에 대한 적절한 매핑을 근사하기 위해 일부 마운트 옵션과 결합 된 사용자 매핑 파일을 사용하는 것입니다 .


경고 : 이것은 이중 부팅 Windows 8과 Kubuntu 14.04간에 NTFS 데이터 파티션 ( D:Windows의 드라이브) 을 공유 할 때 가장 효과적입니다 . 지침은 신중하게 소급하여 기록되지만 철저히 테스트되지는 않았습니다. 전체 절차를 다시 반복하기에는 너무 피곤하고 지루합니다. 따라서 위험을 감수하십시오. 그러나 그렇다면 경험을 다시 공유하십시오. 지침을 따르기로 결정한 경우 실제로 행동하기 전에 전체 그림을 읽으려면 지침을 완전히 읽으십시오. 행운을 빕니다!


좋아, 여기있어! 자세한 지침은 세 부분으로 구성됩니다. Part 1은 Windows에서 수행하고 Part 2는 Linux에서 수행해야합니다. 파트 3은 테스트 용입니다.

1 부

NTFS-3G 문서 의 사용자 매핑 섹션은 Windows와 Linux간에 사용자 매핑을 설정하기 위해 Windows 버전과 Linux 버전의 두 가지 버전을 지정합니다. 내 경험은 리눅스 버전이 그리워 졌다는 것이었다 . Linux 계정이 내 Windows 계정에 매핑 되지 않았지만 일부 알 수없는 계정이 SID 아래에 나타납니다 . 이 알 수없는 계정이 내 Windows 계정의 모든 파일의 소유권을 갖기 때문에 결과는 혼란 스러웠습니다. 이 경우 소유권을 되 찾을 수있는 관리자 권한이 없으면 Windows 계정의 파일에 액세스 할 수 없게됩니다. 그러나 당신이 관리하더라도 여전히잘못된 매핑. 즉, 나중에 Linux에서 만든 파일은 Windows의 알 수없는 계정에 할당되고 Windows의 파일은 Linux의 루트에 할당됩니다 (정확하게 기억하는 경우). 따라서 Windows에서는 소유권을 다시 가져와 Linux에서 소유권을 변경해야합니다. 그것은 우리가 기대하는 것이 아닙니다. 이 문제를 해결하기 위해 여러 번의 희망없는 시도 끝에 포기하고 Windows 버전으로 전환했습니다. 저것은 효과가 있었다. NTFS-3G 문서의 관련 섹션에서 추출 된 자세한 지침은 다음과 같습니다.

  1. 사용자 도구를 다운로드하여 공유C: 할 NTFS 파티션 외부 (나의 경우 drive D:)에 압축을 풉니 다 (내 경우에는 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이고 두 번째는 그룹 SID 여야합니다. 명령 whoami /user및로 각각을 확인할 수 있습니다 whoami /groups.

  3. 당신은 SID가이 올바른지 확인 한 후, 변경, 즉, 주석의 지침에 따라 useruser::SID선 사용자 이름과 group:group:SID리눅스에 대한 기본 그룹 이름 라인. 우분투에서는 동일합니다. 또한 첫 번째 콜론 뒤에 Linux 그룹 이름을 추가하십시오 user::SID. 따라서 줄은 다음과 같아야 user:group:SID합니다. 그렇게하지 않으면 Windows에서 생성 된 파일이 user:rootLinux에서 할당 된 것으로 보입니다 .

  4. 파일을 저장하십시오. .NTFS-3G공유 할 NTFS 파티션에서 이름이 지정된 디렉토리 (아직 존재하지 않는 경우 작성) 로 이동하십시오 (내 경우에는 drive D:).

  5. 이 단계는 3 부에서 테스트하기위한 것입니다. 공유 NTFS 파티션에서 새 디렉토리와 새 파일을 작성하십시오.

2 부

이제 리눅스로 부팅하십시오. sudo파일을 편집하십시오 /etc/fstab. 공유 NTFS 파티션의 행을 다음과 같이 추가하거나 수정하십시오.

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

필수는 umask( dmask그리고 fmask작동하지만 테스트되지는 않음) 을 설정하는 것 입니다. umask내가 선택했지만 원하는 값을 선택하십시오 077. 이 설정이 없으면 o새로 만든 파일에 대한 모든 권한이 부여됩니다 .

파일을 저장하십시오. 지금 sudo mount또는 공유 NTFS 파티션 sudo umount을 다시 마운트 한 다음 sudo mount(내 경우에 /data) :

$ sudo mount /data

3 부

이제 (여전히 Linux에서는) cd마운트 지점 (내 경우에는 /data)에 ls -l파일이 있습니다. UserMapping파일에 지정한 소유권과 권한이 각각 umask설정되어 있고 설정 한 권한과 일치하는지 확인하십시오 /etc/fstab(권한 간 일치 및 umask보완 계산이 필요한 경우 자세한 내용 은 man (1) umask 참조). 그들이 축하하는 경우 절반 목표가 달성됩니다. 그렇지 않으면, 당신을 가난한. 우분투 또는 Windows에 문의하십시오.

그런 다음 새 디렉토리와 새 파일을 작성하십시오. ls -l그들의 소유권과 권한을 확인합니다. 소유권은 평소와 같이 사용자 이름과 기본 그룹이어야합니다. 권한은와 일치해야합니다 umask. 이제 컴퓨터를 다시 시작하고 Windows로 부팅하십시오. 공유 NTFS 파티션에서 방금 Linux에서 작성한 디렉토리 및 파일을 찾으십시오. 해당 속성이 Windows 계정에 할당되어 있는지 확인하십시오. 그들이 축하합니다, 당신은 모두 끝났습니다. 그렇지 않으면, 불운. Windows 또는 Ubuntu에 문의하십시오.

EOF


6

오래된 스레드는 알고 있지만 여전히 다양한 유스 케이스 팁과 관련이 없으며 다른 여러 포럼 / 스레드에 대한 다른 제안으로 구성되어 있으며 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
훌륭합니다.이 답변은 받아 들여야합니다.
leftaroundabout

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. 현재 마운트 라인을 백업하십시오! 줄을 복제하고 #시작 부분 에를 추가하여 주석을 답니다 .
    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 파티션에 대해이 작업을 한 번 수행하십시오 !

WINDOWS OS에 대한 경고!

Windows 7 이상에서 확인 하면 권한이 Windows OS에 영향을줍니다! Windows 파티션에서 홈 디렉토리의 권한을 변경하고 Windows를 다시 사용하면 사용자가 손상되었음을 알 수 있습니다!


1

USB 장치에 대한 관련 질문이 없습니다. 이 답변 은 실행 권한으로 모든 USB 장치를 자동으로 마운트하려는 경우 추악한 해킹을 제공합니다.


1

사용자 지정 권한 및 소유자가있는 USB 드라이브에 NTFS 파티션 마운트

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 (파일에 대한 실행 권한이없고 'others'에 대한 액세스 권한이 없음),

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 (파일에 대한 실행 권한이 있고 'others'에 대한 액세스 권한이 없음),

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:이 링크 ubuntuforums.org 에 따라 명령 줄을 사용하여 Windows에서 파일을 복구하여 문제를 해결할 수 있습니다. /… -여전히 운이 없다면 데이터를 백업하고 askubuntu.com/questions/144852/…
sudodus
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.