리눅스 시스템에서 모든 파일과 디렉토리는 특정 사용자 및 그룹에 의해 소유됩니다. 파일의 소유권을 변경하고 싶을 때 `chown` 명령을 사용하면 됩니다. 이 글에서는 `chown` 명령을 활용하여 파일 소유권을 변경하는 방법을 자세히 알아보겠습니다.
파일은 사용자 및 그룹에 귀속됩니다.
리눅스는 다중 사용자 환경을 지원하며, 여러 사용자 계정을 만들고 각 사용자가 시스템에 로그인하여 동시에 작업할 수 있습니다. 파일에 대한 접근 권한을 효과적으로 관리하고 보안을 강화하기 위해 리눅스는 ‘소유권’이라는 개념을 도입했습니다. 즉, 모든 파일은 특정 ‘소유자(사용자)’와 ‘그룹’에 연결되어 있습니다.
파일을 처음 생성할 때, 해당 파일을 만든 사용자가 파일의 소유자가 됩니다. 또한 파일은 사용자가 속한 그룹에 자동으로 할당됩니다. 각 사용자와 그룹은 고유한 이름과 숫자 식별자(UID 및 GID)를 가지고 있습니다.
일반적으로 파일이 생성될 때, 파일은 사용자가 로그인한 그룹에 속하게 됩니다. 이 그룹은 기본적으로 사용자 이름과 동일한 이름을 가지며, 시스템에 사용자 계정이 생성될 때 자동으로 만들어집니다.
`chown` 명령을 사용하면 이러한 소유권 값을 변경할 수 있습니다. 파일의 새로운 소유자, 그룹 또는 둘 다를 한 번에 설정할 수 있습니다. 일반 사용자는 파일의 그룹 소유권만 변경할 수 있지만, 파일의 사용자 소유권을 변경하려면 루트 권한이 필요합니다. 이는 시스템 보안을 위한 필수적인 조치입니다. 루트 권한 없이 파일의 소유자를 변경할 수 있다면, 다른 사용자가 시스템 파일이나 데이터를 무단으로 ‘채택’할 수 있기 때문입니다.
파일 소유권 변경이 필요한 상황
다음은 파일 소유권을 변경해야 할 수 있는 몇 가지 예시입니다:
- 다른 리눅스나 유닉스 계열 시스템으로 파일을 전송할 때, 해당 파일이 새 시스템에서 제대로 작동하도록 파일의 소유자를 변경해야 합니다.
- 직원이 회사를 퇴사하면, 해당 직원이 소유한 모든 파일을 다른 직원에게 이관해야 할 수 있습니다. 이때 파일의 소유자와 그룹 소유자를 변경해야 합니다.
- 특정 사용자를 위한 스크립트를 개발했을 때, 해당 스크립트의 소유자를 특정 사용자로 설정해야 합니다.
- 루트 권한으로 파일을 생성했지만, 특정 사용자만 해당 파일에 접근하게 해야 하는 경우 소유자를 변경해야 합니다.
그룹, UID, GID 확인
사용자가 속한 그룹 목록을 보려면 다음 명령어를 사용합니다:
groups
사용자의 UID, GID 및 그룹 목록을 모두 확인하려면 `id` 명령어를 사용합니다.
id
다음과 같은 옵션을 사용하여 출력 정보를 상세하게 조정할 수 있습니다.
- `-u`: 사용자 UID를 표시합니다.
- `-g`: 현재 GID를 표시합니다.
- `-nu`: 사용자 이름을 표시합니다.
- `-ng`: 현재 그룹 이름을 표시합니다.
id -u
id -g
id -nu
id -ng
파일의 사용자 및 그룹 소유권 확인
파일이나 디렉토리의 소유자를 확인하려면 `ls` 명령어와 `-l` 옵션을 함께 사용하십시오.
ls -l
`ls -l` 명령어의 출력에서 사용자 이름이 두 번 나타나는 것을 볼 수 있습니다. 왼쪽은 파일의 소유자이고, 오른쪽은 파일이 속한 그룹을 나타냅니다.
일반적으로 사용자가 생성되면 사용자 이름과 동일한 이름의 개인 그룹에 속하게 됩니다. 그 그룹에는 해당 사용자만 멤버로 존재합니다.
다음은 사용자와 그룹이 다른 예시입니다:
ls -l
이 파일은 `mary`라는 사용자가 소유하고 있으며, `mary`의 개인 그룹에 속해 있습니다.
다음 예시에서는 파일의 사용자와 그룹이 다른 경우를 보여줍니다.
이 파일은 `oscar`라는 사용자가 소유하고 있지만, 파일이 속한 그룹은 `researchlab`입니다. 이는 연구실 그룹의 다른 멤버들이 이 파일에 접근할 수 있다는 것을 의미합니다.
사용자 소유권 변경하기
이제 실제 예시를 통해 파일의 사용자 소유권을 변경하는 방법을 알아보겠습니다. 다음 명령어는 `while.c` 파일의 사용자 소유권을 `mary`로 변경합니다.
sudo chown mary while.c
파일 속성 변경 여부를 확인하기 위해 `ls` 명령어를 사용합니다.
ls -l while.c
`chown` 명령어를 사용하여 한 번에 여러 파일의 소유권을 변경할 수도 있습니다.
sudo chown mary getval.c global.c goto.c
위 명령어는 세 파일 모두의 사용자 소유권을 변경합니다.
ls -l getval.c global.c goto.c
와일드카드를 사용하여 파일 그룹을 선택할 수 있습니다. 다음 명령어는 “c”로 시작하는 모든 파일의 사용자 소유권을 변경합니다.
sudo chown mary c*.*
이제 모든 파일의 소유자는 `mary`입니다. 그룹 소유권은 변경되지 않았습니다.
ls -l mary c*.*
디렉토리의 소유권 변경도 가능합니다. `chown` 명령어에 디렉토리 이름을 전달하기만 하면 됩니다.
sudo chown mary ./archive/
디렉토리의 소유권 속성을 확인하기 위해 `ls` 명령어를 사용하지만, `-d` 옵션을 추가합니다. 이 옵션은 디렉토리 내 파일이 아닌 디렉토리 자체의 속성을 보여줍니다.
ls -l -d ./archive/
디렉토리 내 모든 파일의 소유권을 변경하려면 `-R` (재귀) 옵션을 사용합니다. 다음 명령어는 `archive` 폴더 내부의 모든 파일의 사용자 소유권을 변경합니다.
sudo chown -R mary ./archive/
`archive` 디렉토리 안의 파일 목록을 확인해 보겠습니다.
ls -l ./archive/
결과적으로 모든 파일은 `mary`의 소유로 변경되었습니다.
그룹 소유권 변경하기
그룹 소유권을 변경하는 방법은 여러 가지가 있습니다.
사용자 소유권과 그룹 소유권을 동시에 변경하려면 새로운 소유자와 새로운 그룹을 콜론(`:`)으로 구분하여 입력하면 됩니다. 그룹은 사전에 존재해야 합니다.
sudo chown mary:researchlab charm.c
사용자와 파일의 소속 그룹 모두 변경되었습니다.
ls -l charm.c
그룹 소유권을 새로운 소유자의 현재 그룹으로 변경하려면 콜론(`:`)만 사용하고 그룹 이름을 생략하면 됩니다.
sudo chown mary: caps.c
ls -l caps.c
사용자와 그룹 소유권 모두 `mary`로 변경되었습니다.
그룹 소유권만 변경하려면 콜론(`:`)을 먼저 쓰고 사용자 이름을 생략합니다. 사용자 소유권은 변경되지 않습니다.
sudo chown :researchlab at.c
ls -l at.c
그룹 소유권만 변경되고, 사용자 소유권은 그대로 유지되었습니다.
UID 및 GID 값과 함께 `chown` 사용하기
`chown` 명령어와 함께 숫자 UID 및 GID 값을 사용할 수도 있습니다. 다음 명령어는 사용자 및 그룹 소유권을 모두 `mary`의 UID와 GID로 설정합니다.
sudo chown 1001:1001 at.c
ls -l at.c
결론
리눅스에서 파일 소유권은 파일 보안의 중요한 부분입니다. `chown` 명령어와 `chmod` 명령어를 함께 사용하면 시스템에서 파일 접근을 보호할 수 있습니다. 파일 권한 설정과 함께 소유권 변경은 리눅스 시스템을 안전하게 관리하는 데 필수적인 기술입니다.