fstab 없이 명령줄에서 루트가 아닌 읽기/쓰기로 Samba를 마운트하시겠습니까?

fstab 없이 명령줄에서 루트가 아닌 읽기/쓰기로 Samba를 마운트하시겠습니까?

글쎄, 나는 이것이 더 쉬울 것이라고 생각했지만 내가 원하는 것이 실행 가능한지 여부를 알 수 없습니다.

Ubuntu 20.04(MATE)의 명령줄에서 네트워크 Samba 공유를 마운트하고 싶습니다. 파일을 변경하거나 설정을 어딘가에 저장하지 않는 것이 좋습니다. 단지 명령줄일 뿐입니다.

그래서 먼저 다음을 시도했습니다.

sudo mount -t cifs -o user=MYSMBUSER //192.0.2.1/myshare /tmp/myshare

이것은 훌륭하게 작동합니다. 파일을 마운트하고 나열하며 파일에 대한 읽기 전용 액세스를 제공한다는 점에서 그렇습니다. 하지만 파일 쓰기는 허용되지 않습니다(권한이 거부됨).

그 이유는 다음과 같습니다.

https://unix.stackexchange.com/questions/68079/mount-cifs-network-drive-write-permissions-and-chown

CIFS 공유를 루트로 마운트 중이므로(sudo를 사용했기 때문에) 일반 사용자로 쓸 수 없습니다. Linux 배포판과 해당 커널이 일반 사용자로 네트워크 공유를 마운트할 수 있을 만큼 최신 버전이라면(그러나 사용자가 소유한 폴더 아래) 파일을 쓸 수 있는 적절한 자격 증명을 갖게 됩니다.

예, "일반 사용자로 네트워크 공유를 마운트"하고 싶습니다. 이는 옵션처럼 보일 수 있습니다. 그러나 Ubuntu의 사용자 이름은 Samba 사용자 이름과 다릅니다.

대안은 마운트된 네트워크 공유가 사용해야 하는 사용자 및 그룹 ID를 지정하는 것입니다. 이렇게 하면 해당 특정 사용자 및 잠재적인 그룹이 공유에 쓸 수 있습니다. 마운트에 다음 옵션을 추가하십시오: ...


첫 번째 문제 - 위의 내용을 어떻게 마운트 해제합니까? 나는 다음을 수행했습니다.

$ sudo umount /tmp/myshare
$ 

... 오류가 보고되지 않았으므로 정상적으로 완료되었다고 가정하고 다음을 시도합니다.

$ ls /tmp/myshare
file_from_share01.txt  file_from_share02.txt ...

... 파일이 여전히 나열되어 있으므로 공유가 마운트됩니다. 그것은 밝혀졌습니다 (를 통해https://stackoverflow.com/questions/74626/how-do-you-force-a-cifs-connection-to-unmount) 마운트를 해제하려면 다음을 수행해야 합니다.

$ sudo umount -a -t cifs -l

까다로운 부분은 다음과 같습니다. 일반 사용자로 마운트하고 SMB 사용자 이름을 지정하려면 위와 동일한 명령을 작성해야 합니다. 단, 다음은 제외됩니다 sudo.

$ mount -t cifs -o user=MYUSER //192.0.2.1/myshare /tmp/myshare
mount: only root can use "--options" option

그럼 아마도 나는~할 수 있었다그렇지 않으면 이것을 루트가 아닌 사용자로 실행했습니다.만약에이 옵션을 사용할 필요는 없었지만 user사용했습니다. 그래서 이 명령을 실제로 사용할 수 없습니다.

이 문제를 해결하기 위한 한 가지 제안은 fstab에서 옵션을 지정하는 것입니다. sudo 없이 공유 cifs 폴더 마운트:

해당 폴더를 일반 사용자로 마운트하려면 구성 파일 /etc/fstab에 cifs 폴더에 대한 마운트 옵션을 포함하고 noauto,user,

그러나 나는한다~ 아니다내 컴퓨터에 SMB 자격 증명 기록을 보관하고 싶지 않기 때문에 이 작업을 수행하고 싶습니다. 그리고 fstab을 편집해야 하는 경우 작업이 완료되면 fstab에서 항목을 삭제해야 하는 책임은 나에게 있습니다. 피곤하면 잊어버릴 수도 있지 어쩌구.

나는 이것이 보안 기능일 가능성이 높다는 것을 발견했습니다.

https://unix.stackexchange.com/questions/365308/use-mount-o-with-a-non-root-user

-o 제한(루트만 지정할 수 있음)은 시스템을 보호하기 위해 적용됩니다. 관리자는 -o를 직접 사용하거나 /etc/fstab을 사용하여 필요한 모든 옵션을 설정할 수 있습니다. 파일 시스템 옵션은 여러 가지 적대적인 시나리오를 허용하므로 사용자는 옵션을 지정하지 않고 사용자 제어 가능 파일 시스템을 마운트하거나 마운트 해제하도록 할 수만 있습니다. 결과적으로 일부 파일 시스템은 위에서 CIFS에 사용된 USER 환경 변수와 같은 특정 옵션을 설정하는 다른 방법을 지원합니다.

네, 하지만 저에게는 SMB 경로를 /etc/fstab전혀 입력하지 않는 것이 더 안전합니다.

그래서, 나는 정말로 마운트하고 싶다.단지명령줄을 사용하여없이어디서나 구성 파일( 포함 /etc/fstab)을 변경할 수 있습니다.

다른 명령이 있기를 바랐고 찾았습니다 gvfs-mount. 하지만 다음과 같은 문제가 있습니다.명령줄에서 gvfs를 사용하여 SMB 공유 마운트:

$ dbus-launch bash
$  gvfs-mount smb://192.0.2.1/myshare
This tool has been deprecated, use 'gio mount' instead.
See 'gio help mount' for more info.

Password required for share myshare on 192.0.2.1
User [locuser]: MYUSER
Domain [WORKGROUP]:
Password:
$

이 시점에서는 마운트된 것으로 보이지만 실제로는 마운트되지 않았습니다.

$ ls /run/user/1000/gvfs/
$

... 그리고 를 통해 gvfs-mount -l해당 마운트 지점이 없다는 것을 알 수 있습니다.

$ gvfs-mount -l
...
Volume(3): test_nfs
  Type: GProxyVolume (GProxyVolumeMonitorUDisks2)
  Mount(0): test_nfs -> file:///tmp/test_nfs
    Type: GProxyMount (GProxyVolumeMonitorUDisks2)
Mount(0): myshare on 192.0.2.1 -> smb://192.0.2.1/myshare/
  Type: GDaemonMount

... 어쨌든 이 "마운트"를 사용하면 어떤 파일에도 액세스할 수 없습니다.


다시 말하지만, 이것을 어떻게 마운트 해제 umount /tmp/myshare합니까? 할 수 없습니다. 마운트된 것으로 간주되지도 않습니다. 여기서 그걸 찾았어열린 파일로 gvfs samba 공유 마운트 해제:

$ ls ~/.gvfs
ls: cannot access '~/.gvfs': No such file or directory

$ gvfs-mount -u smb://192.0.2.1/myshare
This tool has been deprecated, use 'gio mount' instead.
See 'gio help mount' for more info.

이후 확인을 통해 gvfs-mount -l공유가 실제로 사라졌는지 확인합니다.)


그리고 첫 번째 참고 사항에 대한 언급을 해결하기 위해 gio mountdbus-session을 시작하지 않으면 다음과 같이 실패합니다.

$ gio mount smb://192.0.2.1
gio: smb://192.0.2.1: volume doesn’t implement mount

... 그런 다음 에 의해 시작된 셸 내에서는 다음 dbus-launch bash과 정확히 동일하게 동작합니다 gvfs-mount.

$ gio mount smb://192.0.2.1/myshare
Password required for share myshare on 192.0.2.1
User [locuser]: MYUSER
Domain [WORKGROUP]:
Password:
$

마운트된 것처럼 보이지만 다음과 같습니다.

$ gio mount -l
...
Volume(3): test_nfs
  Type: GProxyVolume (GProxyVolumeMonitorUDisks2)
  Mount(0): test_nfs -> file:///tmp/test_nfs
    Type: GProxyMount (GProxyVolumeMonitorUDisks2)
Mount(0): myshare on 192.0.2.1 -> smb://192.0.2.1/myshare/
  Type: GDaemonMount

... 역시 로컬 디렉터리 마운트 지점이 없습니다.


위의 내용은 다음과 같습니다. 로컬 파일(예: 특히 /etc/fstab)을 변경하지 않고 sudo 없이 r/w 권한(Windows에서 확인한 바 있음)을 사용하여 명령줄에서 SMB 공유를 마운트할 수 있습니까? SMB 사용자 MYUSER가 있음) - 그렇다면 어떻게 합니까?

답변1

글쎄, 이것을 답변으로 게시하면 해당 gvfs/ gio명령 중 일부가 분명히 작동한 것 같습니다. 저는 분명히 올바른 마운트 폴더를 보고 있지 않았습니다. 분명히 내 Ubuntu 20.04에서는 그렇지 않습니다.

$ ls ~/.gvfs
ls: cannot access '~/.gvfs': No such file or directory

... 대신에:

$ ls ~/.cache/gvfs/
'smb-share:server=192.0.2.1,share=myshare'

... 그리고 파일이 거기에 있고 읽고 쓸 수 있습니다. ... 이제 마운트 해제한 것 같은데 어떻게 아직도 거기에 있는지 의아해합니다.

글쎄요, 수십 년간의 개발 끝에 행복합니다. 요즘에는 파일 공유가 너무 쉽습니다! 그리고 더 많은 변화를 기대하며, ~/.cache/.etc/gvfs-2/사용되는 모습을 볼 수 있기를 바랍니다. 그러면 앞으로 더 많은 파손과 훨씬 더 쓸모없는 답변을 얻게 되어 앞으로 몇 시간을 들여 트롤링해야 할 것입니다! 기술의 발전은 대단한거 아닌가요?:)

답변2

마운트 지점이 다음 위치에 있지 않습니다.~/.cache/gvfs/아래에 있어요/실행/사용자/1000/gvfs

1000을 자신의 UID 번호로 바꾸십시오.

내 공유 중 하나를 마운트하겠습니다.

~$ gio mount smb://vubmate2004.local/Private
Password required for share private on vubmate2004.local
User [tester]: tester
Domain [WORKGROUP]: 
Password: 

마운트되었는지 확인하겠습니다.

~$ ls -al /run/user/1000/gvfs
total 0
dr-x------  3 tester tester   0 Jan  5 15:08  .
drwx------ 10 tester tester 300 Jan  5 15:13  ..
drwx------  1 tester tester   0 Jan  5 15:14 'smb-share:server=vubmate2004.local,share=private'

마운트된 공유의 내용을 확인하겠습니다.

~$ ls -al /run/user/1000/gvfs/smb-share:server=vubmate2004.local,share=private
total 0
drwx------ 1 tester tester 0 Jan  5 15:14  .
dr-x------ 3 tester tester 0 Jan  5 15:08  ..
-rwx------ 1 tester tester 0 Jan  5 15:14 'new file'

공유를 마운트 해제하겠습니다.

~$ gio mount -u smb://vubmate2004.local/Private

아직 마운트되어 있는지 확인하겠습니다.

~$ ls -al /run/user/1000/gvfs
total 0
dr-x------  2 tester tester   0 Jan  5 15:08 .
drwx------ 10 tester tester 300 Jan  5 15:13 ..

관련 정보