디스크의 장치 파일에 대한 읽기 권한 부여

디스크의 장치 파일에 대한 읽기 권한 부여

벤치마킹 목적으로 장치에서 hdparm또는 직접 사용해야 하는 경우 이를 안전하게 수행하는 올바른 방법이 무엇인지 궁금합니다.dd

문제의 디스크가 다음과 같다고 가정해 보겠습니다 /dev/sda.

root@igloo:~# ls -l /dev/sd*
brw-rw---- 1 root disk 8, 0 May 29 08:23 /dev/sda
brw-rw---- 1 root disk 8, 1 May 29 08:23 /dev/sda1

난 정말 그러고 싶지 않아쓰다sda어떤 상황에서도 . 그렇다면 일반 사용자로서 실행 chmod o+r /dev/sda*하고 실행하는 dd것이 좋습니다 .hdparm

답변1

chmod o+r /dev/sda*이는 모든 프로그램이 전체 디스크(예: /etc/shadow루트 파티션이 켜져 있는 경우 의 비밀번호 해시 포함 sda)를 읽을 수 있도록 허용하므로 매우 위험합니다!

이 작업을 보다 안전하게 수행하는 방법에는 (적어도) 두 가지가 있습니다.

  1. 디스크를 읽어야 하는 모든 사용자를 그룹에 추가 하고 해당 그룹에 대한 쓰기 액세스를 방지하기 위해 disk실행합니다 .chmod g-w /dev/sda*
  2. 의 그룹을 /dev/sda*디스크를 읽어야 하는 사용자만 포함하는 그룹으로 변경합니다. 예를 들어 를 사용하여 chgrp my-benchmarkers /dev/sda*이 그룹에 대한 쓰기 액세스를 방지합니다 chmod.

장치 노드의 그룹 및 권한 변경은 /dev해당 장치의 연결이 끊어지거나 컴퓨터가 재부팅될 때까지 일시적일 뿐입니다.

hdparm한 가지 문제 는 대부분의 기능에 대해 쓰기 액세스가 필요하다는 것입니다 . 원하는 모든 것이 읽기 전용 액세스로 작동하는지 확인해야 합니다.

편집하다:hdparm쓰기 권한이 필요하지 않은 것 같습니다 . 오히려 그것이 필요하다CAP_SYS_RAWIO 능력대부분의 ioctl을 수행합니다. setcap cap_sys_rawio+ep /sbin/hdparm이 기능을 hdparm에 부여하는 데 사용할 수 있습니다 . 이를 허용한다는 점에 유의하십시오.누구나매뉴얼 페이지에서 "매우 위험", "매우 위험" 또는 "예외적으로 위험"으로 설명하는 기타 모든 hdparm 명령을 포함하여 해당 장치에서 실제로 수행할 수 있는 모든 작업을 수행하기 위해 장치 파일을 실행할 수 hdparm있고 최소한 읽기 액세스 권한이 있는 사람입니다. 래퍼 스크립트가 더 나은 솔루션일 수 있습니다.hdparm--write-sector

그렇지 않은 경우 쓰기 액세스 권한을 부여하거나 sudo 규칙을 사용하여 사용자가 루트로 실행할 수 있는 래퍼 스크립트를 작성해야 합니다.

답변2

/dev의 일부 배포에서는 이를 지원하지 않을 수도 있지만 한 가지 가능성은 ACL을 사용하는 것입니다. 예:

$ dd if=/dev/sda bs=1M count=200 of=/dev/null
dd: failed to open '/dev/sda': Permission denied
$ sudo setfacl -m u:youruser:r /dev/sd*
$ dd if=/dev/sda bs=1M count=200 of=/dev/null
200+0 records in
200+0 records out
209715200 bytes (210 MB, 200 MiB) copied, 0.0335544 s, 6.3 GB/s

AFAIK는 hdparm -t루트로 실행해야 합니다.

관련 정보