chown 명령어 사용법

파일과 디렉터리의 소유자·소유 그룹을 변경하는 명령어입니다.

권한·보안 관리연결 실습 문제 6개Rocky Linux 8 기준 · 실행 결과는 실습 컨테이너에서 확인

기본 문법

chown [옵션] 소유자[:그룹] 파일...
chown [옵션] --reference=기준파일 파일...

chown 은 파일이나 디렉터리의 소유자(user)와 소유 그룹(group)을 바꾸는 명령어입니다. 리눅스의 접근 권한은 '소유자 / 그룹 / 기타'의 세 단계로 판정되므로, chmod 로 권한 비트를 맞추기 전에 소유권이 올바른지 먼저 확인하는 것이 좋습니다. 소유자를 다른 사용자로 넘기는 작업은 root 만 할 수 있고, 일반 사용자는 자신이 소유한 파일의 그룹을 자신이 속한 그룹으로 바꾸는 것까지만 허용됩니다.

실무에서는 서비스 계정용 데이터 디렉터리를 만든 뒤 소유권을 넘기거나, 웹 배포 디렉터리를 -R 옵션으로 일괄 변경하거나, SSH 키·설정 파일의 소유자를 해당 계정으로 맞출 때 사용합니다. 소유권이 맞지 않으면 권한 비트가 맞아도 서비스가 파일을 읽거나 쓰지 못해 기동에 실패할 수 있습니다.

리눅스마스터·RHCSA·LPIC 등의 시험에서는 useradd/groupadd 로 계정과 그룹을 만든 뒤 chown 으로 소유권을 지정하고 chmod 로 권한을 마무리하는 복합 문제 형태로 출제됩니다.

아래 내용은 Rocky Linux 8(GNU coreutils 8.30) 기준입니다.

자주 쓰는 옵션

옵션의미
소유자:그룹옵션이 아닌 인자 형식. 소유자와 그룹을 함께 지정합니다.chown appsvc:apps /srv/appdata
:그룹옵션이 아닌 인자 형식. 소유자는 그대로 두고 그룹만 변경합니다(chgrp 와 같은 결과).chown :projectops /srv/project-share
-R, --recursive디렉터리와 그 하위 항목 전체에 재귀 적용chown -R websvc:webteam /var/www/release
-v, --verbose처리한 파일마다 진단 메시지를 출력(변경되지 않은 파일도 포함)chown -v root:root /tmp/demo/a.txt
-c, --changes실제로 변경이 일어난 파일만 출력chown -c root:root /tmp/demo/a.txt
-f, --silent, --quiet대부분의 오류 메시지를 표시하지 않음(종료 코드는 그대로 반영됨)chown -f appsvc /tmp/demo/none.txt
-h, --no-dereference심볼릭 링크가 가리키는 대상 대신 링크 자체의 소유권을 변경chown -h root:root /tmp/demo/link
--dereference심볼릭 링크가 가리키는 대상의 소유권을 변경(기본 동작)chown --dereference root:root /tmp/demo/link
--reference=RFILE지정한 기준 파일과 같은 소유자·그룹으로 맞춤chown --reference=/tmp/demo/model /tmp/demo/a.txt
--from=현재소유자:현재그룹현재 소유자·그룹이 지정한 조건과 일치하는 파일만 변경. 한쪽을 생략하면 그 항목은 비교하지 않음chown --from=root:root appsvc /tmp/demo/a.txt
--preserve-root-R 사용 시 / 에 대한 재귀 변경을 거부. chown 의 기본값은 --no-preserve-root 이므로 필요하면 직접 붙여야 함chown -R --preserve-root root:root /tmp/demo

실무 예시

소유자와 그룹을 함께 변경

준비: mkdir -p /tmp/demo; touch /tmp/demo/a.txt

$ chown root:root /tmp/demo/a.txt && ls -l /tmp/demo/a.txt
-rw-r--r--. 1 root root 0 Sep 16 10:48 /tmp/demo/a.txt

소유자와 그룹을 root:root 로 지정한 뒤 ls -l 의 3번째(소유자)·4번째(그룹) 필드에서 결과를 확인합니다. 권한 문자열 뒤의 '.' 은 SELinux 컨텍스트가 있음을 뜻하며, Rocky Linux 8 기본 환경에서 함께 표시됩니다.

그룹만 변경

준비: mkdir -p /tmp/demo; groupadd demo_projectops 2>/dev/null; touch /tmp/demo/share.txt

$ chown :demo_projectops /tmp/demo/share.txt && ls -l /tmp/demo/share.txt
-rw-r--r--. 1 root demo_projectops 0 Sep 16 10:48 /tmp/demo/share.txt

소유자는 그대로 두고 그룹만 바꿀 때는 콜론 뒤에만 그룹을 적습니다. chgrp demo_projectops 와 같은 결과입니다.

서비스 계정에 데이터 디렉터리 넘기기

준비: groupadd demo_apps 2>/dev/null; useradd -g demo_apps -s /sbin/nologin demo_appsvc 2>/dev/null; mkdir -p /tmp/demo/appdata

$ chown demo_appsvc:demo_apps /tmp/demo/appdata && ls -ld /tmp/demo/appdata
drwxr-xr-x. 2 demo_appsvc demo_apps 6 Sep 16 10:48 /tmp/demo/appdata

서비스 계정이 자신의 데이터 디렉터리를 소유하도록 만드는 전형적인 형태입니다. ls -ld 는 디렉터리 내부 목록 대신 디렉터리 자체의 정보를 보여 줍니다.

디렉터리 전체 소유권 일괄 변경

준비: groupadd demo_webteam 2>/dev/null; useradd -g demo_webteam -s /sbin/nologin demo_websvc 2>/dev/null; mkdir -p /tmp/demo/release/html; touch /tmp/demo/release/index.html /tmp/demo/release/html/app.js

$ chown -R demo_websvc:demo_webteam /tmp/demo/release && ls -lR /tmp/demo/release | head -8
/tmp/demo/release:
total 0
drwxr-xr-x. 2 demo_websvc demo_webteam 20 Sep 16 10:48 html
-rw-r--r--. 1 demo_websvc demo_webteam  0 Sep 16 10:48 index.html

/tmp/demo/release/html:
total 0
-rw-r--r--. 1 demo_websvc demo_webteam 0 Sep 16 10:48 app.js

-R 을 쓰면 하위 디렉터리와 파일까지 모두 소유권이 바뀝니다. 웹 배포 디렉터리를 정리할 때 사용하며, 대상 경로를 실행 전에 반드시 확인하세요. 출력의 디렉터리 크기(예: 20)는 파일 시스템과 항목 수에 따라 달라집니다.

조건부 변경과 변경 내역 출력

준비: mkdir -p /tmp/demo/cond; touch /tmp/demo/cond/x.txt /tmp/demo/cond/y.txt; chown nobody /tmp/demo/cond/y.txt

$ chown -c --from=root nobody /tmp/demo/cond/x.txt /tmp/demo/cond/y.txt
changed ownership of '/tmp/demo/cond/x.txt' from root to nobody

--from 으로 현재 소유자가 root 인 파일만 골라 바꾸고, -c 로 실제 변경된 파일만 출력합니다. 이미 nobody 가 소유한 y.txt 는 조건에 맞지 않아 건너뛰므로 출력에 나타나지 않습니다.

주의할 점

  • 소유자를 다른 사용자로 넘기려면 root 권한이 필요합니다. 일반 사용자는 자기 파일이라도 소유자를 남에게 넘길 수 없습니다.
  • -R 을 / 나 /home, /etc 같은 상위 경로에 잘못 실행하면 시스템 소유권이 광범위하게 손상되어 복구가 어렵습니다. 실행 전 경로를 확인하고, 필요하면 --preserve-root 를 명시하세요(chown 의 기본값은 --no-preserve-root 입니다).
  • 존재하지 않는 사용자·그룹을 지정하면 'chown: invalid user' 오류가 납니다. useradd/groupadd 로 계정과 그룹을 먼저 만드세요.
  • 심볼릭 링크에 chown 을 쓰면 기본적으로 링크가 가리키는 원본이 바뀝니다. 링크 자체를 바꾸려면 -h 를 씁니다.
  • 일반 파일의 소유자나 그룹을 바꾸면 setuid·setgid 비트가 해제됩니다. 필요한 경우 chown 이후에 chmod 로 다시 설정하세요.
  • 권한 문제를 해결한다고 chmod 777 이나 chmod -R 777 을 쓰지 마세요. 먼저 chown 으로 소유권을 맞추고, 필요한 최소 권한만 부여합니다.
  • /etc 아래 시스템 설정 파일의 소유권은 패키지가 정한 값이 있습니다. 임의로 바꾸면 서비스가 기동하지 않을 수 있으므로, 변경 전 rpm -V 등으로 원래 값을 확인하세요.

이 명령어로 풀 수 있는 실습 문제

브라우저 웹 터미널에서 바로 풀고 요구사항별로 자동 채점됩니다. 로그인 없이 5분 체험도 가능합니다.

관련 명령어

마지막 검수 2026-09-16 · 내용에 오류가 있으면 문제 페이지의 질문 기능으로 알려 주세요.