(루트가 아닌) 일반 사용자로 tmpfs를 만들 수 있습니까?


39

배포본은 2.6.35-30 Linux 커널을 실행하는 Ubuntu 서버입니다.

메모리에 완전히 저장된 디렉토리를 갖고 싶습니다. 루트 권한없이 가능합니까?

답변:


49

Linux는 모든 사용자가 사용할 수있는 tmpfs 장치를 제공합니다 /dev/shm. 기본적으로 특정 디렉토리에 마운트되지 않지만 여전히 하나의 디렉토리로 사용할 수 있습니다.

디렉토리를 /dev/shm만든 다음 원하는 곳으로 심볼릭 링크하십시오. 다른 사용자가 액세스 할 수 없도록 작성된 디렉토리에 원하는 권한을 부여 할 수 있습니다.

이것은 RAM 지원 장치이므로 기본적으로 메모리에있는 것이 있습니다. 내부에 필요한 디렉토리를 만들 수 있습니다/dev/shm

당연히 여기에 배치 된 파일은 재부팅 후에도 유지되지 않으며 컴퓨터가 교환을 시작 /dev/shm하면 도움이되지 않습니다.

Solaris 병렬 /dev/shm/tmp"스왑"유형 파티션이며 메모리 기반입니다. 와 마찬가지로 /dev/shm임의의 사용자가 /tmpSolaris 에서 파일을 만들 수 있습니다 .

OpenBSD는 메모리 기반 마운트를 사용하는 기능도 있지만 기본적으로 사용 가능한 것은 없습니다. mount_mfs 명령은 수퍼 유저가 사용할 수 있습니다.

다른 * BSD에 대해서는 잘 모르겠습니다.


1
심볼릭 링크는 어디서 문제를 해결할 수 있습니다.
enzotib

D' oh ... 그 성가신 작은 심볼릭 링크를 잊어 버렸습니다.
개브.

@enzotib는 그것을 고쳤다!
개브.

/dev/tmpfs시스템에 없는 것 같습니다 (3.0.0 커널을 가진 자체 시스템도 아닙니다). 배포판에서 생성 한 것이 아닌가?
비트 마스크

1
확실하지이뿐만 아니라 다른 사람의를 적용되지만 우분투의 내 현재의 버전이 변경가있는 것 같으면 /run아마도 /run/shm내 대답을 업데이트하기 전에 추가로 조사 할 필요가있다.
개브.

14

/ dev / shm이 안전하지 않습니다

... 활성 스왑이있는 시스템에서 ! 컴퓨터가 활성화했을 가능성이 매우 높습니다 .

더 좋고 안전한 표준 대안이 ramfs있습니다. ramfsRAM 지원 공간을 사용 하여 개인 키, 비트 코인 또는 이더 리움 지갑 등과 같은 민감한 데이터 를 임시 저장 하려는 경우 에 사용할 수 있습니다 .

ramfs데이터 가 스왑 되지 않고 (물리적 스토리지 드라이브에 저장 되지 않음 ) 스왑 tmpfs있기 때문에 보안에 관한 것보다 낫 습니다. 써드 파티는 스왑 공간을 검사 할 수 있습니다민감한 데이터를 추출 .ramfstmpfs

해결책

ramfs권한이없는 모든 사용자가 필요에 따라 마운트를 마운트 해제 할 수 있도록 마운트 를 준비 할 수 있습니다 .

이렇게하려면 루트 권한이 한 번 필요 합니다 . 루트 권한이없는 경우 시스템 관리자에게이를 설정하도록 요청하십시오.

처음에는에 줄을 추가해야합니다 /etc/fstab. fstab의 줄은 다음과 같습니다.

none    /mnt/ramfs    ramfs    noauto,user,size=1024M,mode=0770    0    0
  • /mnt/ramfsramfs 파일 시스템이 마운트 될 마운트 지점입니다. 디렉토리가 존재해야합니다.
  • noauto 옵션을 사용하면 시스템이 부팅 될 때 자동으로 마운트되지 않습니다.
  • user 일반 사용자가 마운트 할 수있게합니다.
  • size이 "램 디스크의"크기를 설정합니다 (당신이 사용 M하고 G여기에).
  • mode이다 매우 중요한 8 진수 코드로, 0770이 파일 시스템을 마운트에만 루트와 사용자, 그것에 읽기 및 쓰기 할 수없는 다른 사람 (당신이 아니라 당신의 선택의 다른 코드를 사용하지만, 그것에 대해 매우 확신 할 수 있습니다! ).

이 작업이 완료되면 모든 사용자가 필요에 따라이를 마운트 할 수 있습니다.

일부 사용자가 이것을 마운트하면 새로운 1024MB ramfs파일 시스템이 생성되어에 마운트됩니다 /mnt/ramfs/. 이 소유합니다 root:user. 마운트를 해제하거나 시스템을 재부팅하면이 RAM 기반 파일 시스템은 모든 데이터 와 함께 사라집니다 . 어느 것이 멋지다.

또한이 파일 시스템은 여러 사용자가 독립적으로 마운트 할 수 있지만 동시에는 아닙니다 . 즉, 다음 사용자가 마운트 할 준비가 되려면 이전 사용자가이 파일 시스템을 마운트 해제해야합니다.

마운트 :

mount /mnt/ramfs/

마운트를 해제하려면

umount /mnt/ramfs/

PS rsync루트가 아닌 사용자로서 새로 마운트 / 작성된 램프의 루트에 파일 을 저장 하려고 하면 rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1183) [sender=3.1.1]오류가 발생할 수 있습니다. 사용자가 램 파일 시스템의 루트를 소유하지 않기 때문에 이것은 완전히 훌륭하고 예상됩니다. 해결책은 간단 합니다. /mnt/ramfs/copied/예를 들어 디렉토리를 만들고 그 안에 디렉토리를 만드 rsync십시오.

PPS는 데비안 9에서 테스트되었습니다. 우분투에서도 작동합니다.


10

시스템에 이미 사용 가능한 시스템이있을 수 있습니다. Glibc 기반의 최신 Linux 시스템 에는/dev/shm 항상 tmpfs가 마운트되어 있습니다.

시스템에 시스템이 없거나 너무 작은 경우 루트로 마운트되지 않은 파일 시스템은 FUSE를 의미 합니다. 우분투에서는 fuseFUSE를 사용하기 위해 그룹에 속해 있어야합니다. 통해 찾고 사용할 수 FUSE 파일 시스템 , 난 단지 참조 Ramfuse 불행하게도 상류 포기한다.


5

일반적으로, 파일 시스템은 루트로만 마운트 할 수 있습니다. 사용자가 파일 시스템을 임의로 배치하도록 허용하는 경우 근본적으로 루트를 부여하는 것입니다. (쉬운 방법 : / etc 위에 하나를 마운트하고 방금 만든 새로운 루트 암호로 su를 자신의 passwd와 shadow를 넣고 마운트 해제하십시오)

특정 위치에 tmpfs를 원한다면 /etc/fstab, 플래그를 사용 하여 tmpfs를 추가 할 수 noauto,user있으며 사용자는 마운트 할 수 있습니다 (그러나 자동 마운트하지 않는 이유는 명확하지 않습니다)

사용자에게 임의의 tmpfs가 필요한 경우 몇 가지 옵션이 있습니다.

  • 하나의 tmpfs 서브 디렉토리를 사용하십시오. 아마도 가장 좋은 방법 일 것입니다. 실제로 두 개 이상의 tmpfs가 필요하지 않습니다.
  • 디렉토리를 작성하고 그 위에 tmpfs를 마운트하는 스크립트를 작성한 다음 디렉토리를 어디에 놓아 두는지 인쇄하십시오. 사용하여 sudo사용자가 실행 할 수 있도록. 당신이 않음을 확인 하지 사용자가 임의의 경로를 선택할 수 있습니다.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.