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
)를 읽을 수 있기 때문에 매우 위험합니다 !
이 작업을 보다 안전하게 수행하는 방법에는 최소한 두 가지가 있습니다.
- 디스크를 읽어야 하는 모든 사용자를 이
disk
그룹에 추가하고chmod g-w /dev/sda*
이 그룹에 대한 쓰기 액세스를 차단하려면 실행하세요. /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
그래도 루트로 실행해야 합니다.