리눅스는 다중 사용자 운영체제로서 여러 사용자가 동시에 동일한 컴퓨터를 공유하며 상호 작용할 수 있도록 설계되었습니다. 이러한 다중 사용자 환경에서는 각 사용자의 파일 보안과 개인정보 보호를 보장하는 것이 매우 중요합니다.
리눅스는 이를 위해 파일 및 디렉토리 권한을 관리하는 정교한 시스템을 갖추고 있습니다. 이 시스템을 통해 사용자는 다른 사용자의 파일 접근을 제어하고, 시스템 사용 중에 수행할 수 있는 작업들을 세밀하게 설정할 수 있습니다.
리눅스 사용자라면 파일 및 디렉토리 권한이 어떻게 처리되는지, 그리고 이러한 권한을 활용하여 파일을 보호하고 시스템 기능을 안전하게 유지하는 방법을 이해하는 것이 중요합니다. 이 시스템을 이해하기 위해 먼저 리눅스 운영체제에서 사용자를 분류하는 다양한 기준을 살펴보겠습니다.
리눅스 사용자 분류
가장 기본적인 사용자 분류는 파일 또는 디렉토리의 소유자입니다. 리눅스에서는 모든 파일과 디렉토리에 정확히 한 명의 소유자가 지정됩니다. 일반적으로 이 소유자는 자신의 파일이나 디렉토리에 대해 더 많은 권한을 갖습니다. 파일 소유자는 ‘u’라는 문자로 표현됩니다.
리눅스에서는 여러 사용자를 그룹으로 묶어 파일에 대한 권한을 그룹 단위로 부여할 수 있습니다. 이러한 그룹 소유자는 ‘g’라는 문자로 표시됩니다. 예를 들어, 추천 도서 목록이 담긴 파일이 있고 여러 사용자에게 동일한 접근 권한을 부여하고 싶다면, 이들을 그룹으로 묶어 해당 그룹에 권한을 부여하는 것이 편리합니다.
또 다른 사용자 범주는 ‘기타 사용자’이며, ‘o’라는 문자로 표현됩니다. 이들은 파일 소유자가 아니며, 파일에 대한 접근 권한을 가진 그룹에도 속하지 않은 모든 사용자를 의미합니다. 다시 말해, 시스템의 다른 모든 사용자가 이 범주에 속합니다.
컴퓨터의 모든 사용자를 총칭할 때는 ‘a’라는 문자를 사용할 수 있습니다. 여기에는 파일 소유자, 그룹 소유자, 기타 사용자가 모두 포함됩니다.
Ubuntu Linux에서 새 사용자 생성 및 추가
이제 Ubuntu Linux에서 새 사용자를 생성하고 추가하는 방법을 살펴보겠습니다. 다음 과정을 따라 하면서 직접 새 사용자를 생성해 보십시오.
1. 시스템 설정 메뉴를 열고 왼쪽 메뉴 표시줄에서 ‘사용자’를 클릭합니다. 그다음 ‘잠금 해제’를 클릭하고 비밀번호를 입력하여 관리자 권한을 획득합니다. 새 사용자를 추가하려면 이 단계가 필요합니다. 기본적으로 이 기능은 잠겨 있습니다.
2. 잠금 해제 후에는 ‘사용자 추가’ 옵션이 나타납니다. 이 버튼을 클릭하여 새 사용자를 추가합니다.
3. 새 사용자 생성 화면에서 전체 이름과 사용자 이름을 입력하고, ‘지금 비밀번호 설정’을 선택하여 비밀번호를 설정합니다. 또한 계정 유형이 ‘관리자’로 설정되어 있는지 확인한 후 ‘추가’ 버튼을 클릭하여 사용자를 추가합니다.
4. 새 사용자 계정이 성공적으로 생성되면 아래와 같이 표시됩니다.
리눅스 파일 및 디렉토리 권한
권한은 파일 및 디렉토리에 대한 접근을 제어하는 규칙이며, 다양한 사용자가 해당 파일 및 디렉토리에 대해 수행할 수 있는 작업을 규정합니다. 리눅스에는 세 가지 주요 권한 범주가 있습니다.
- 읽기(r): 파일 내용을 확인하고 디렉토리 내의 파일 목록을 볼 수 있는 권한입니다.
- 쓰기(w): 파일 내용을 수정할 수 있는 권한입니다. 디렉토리의 경우, 쓰기 권한은 파일 및 하위 디렉토리를 생성, 삭제, 이름 변경 또는 이동하는 등 디렉토리 내용을 변경할 수 있는 권한을 의미합니다. 단, 디렉토리에 대한 쓰기 권한은 실행 권한이 함께 있어야만 작동합니다.
- 실행(x): 파일을 프로그램으로 실행할 수 있는 권한입니다. 디렉토리의 경우, 실행 권한은 디렉토리 내부로 이동하거나 ‘cd’ 명령을 사용할 수 있게 해줍니다.
읽기, 쓰기, 실행 권한은 위에서 설명한 세 가지 사용자 범주에 각각 할당됩니다.
리눅스에서 파일 및 디렉토리를 삭제하는 방법도 알아보시는 것이 좋습니다.
리눅스 상세 목록
리눅스에서 디렉토리 내의 파일 목록을 보려면 보통 ‘ls’ 명령어를 사용합니다. 하지만 이 명령어는 파일과 디렉토리 이름만 나열할 뿐 추가 정보는 제공하지 않습니다.
더 자세한 정보를 확인하려면 ‘상세 목록’ 형식을 사용해야 합니다. 이를 위해 ‘ls’ 명령어와 함께 ‘-l’ 플래그를 사용합니다. 이 명령어를 실행하면 파일 권한, 소유자, 그룹 소유자가 아래와 같이 표시됩니다.
Ubuntu에서는 기본적으로 그룹이 생성되지 않은 경우, 그룹 이름이 파일 소유자와 동일하게 설정됩니다.
그룹을 생성하려면 ‘addgroup’ 명령어를 사용합니다. 예를 들어 ‘편집자’라는 그룹을 추가하려면 다음 명령어를 실행하고 비밀번호를 입력해야 합니다.
sudo addgroup editors
‘sudo’ 명령어는 컴퓨터의 모든 사용자에게 영향을 미치는 변경 사항을 실행할 수 있는 권한을 가진 슈퍼 사용자(루트 사용자)로 명령어를 실행하도록 해줍니다.
그룹에 사용자를 추가하려면 다음 형식을 사용합니다.
adduser <user> <group>
따라서 ‘편집자’ 그룹에 ‘belmont’와 ‘madici’ 사용자를 모두 추가하려면 다음 명령어를 실행합니다.
sudo adduser belmont editors
sudo adduser madici editors
사용자가 속한 그룹을 확인하려면 다음 명령어를 실행합니다.
groups <username>
위 명령어를 실행한 결과는 다음과 같습니다.
이제 파일 유형과 파일 권한을 알려주는 파일 속성을 자세히 살펴보겠습니다.
리눅스 파일 속성
리눅스에서 파일 속성은 정확히 10개의 문자로 구성됩니다. 첫 번째 문자는 파일 유형을 나타냅니다. 일반적으로 사용되는 첫 번째 문자는 다음과 같습니다.
- d: 디렉토리를 나타냅니다.
- -: 일반 파일(예: 텍스트 파일)을 나타냅니다.
- c: 문자 특수 파일을 나타냅니다.
- l: 심볼릭 링크를 나타냅니다.
- b: 블록 특수 파일을 나타냅니다.
나머지 9개의 문자는 소유자, 그룹 소유자, 기타 사용자의 권한을 표시하는 데 사용됩니다. 이 9개의 문자는 다시 3개의 그룹으로 나뉩니다. 첫 번째 그룹은 소유자의 권한을, 두 번째 그룹은 그룹 소유자의 권한을, 마지막 그룹은 기타 사용자(시스템의 다른 모든 사용자)의 권한을 나타냅니다.
각 범주에 대한 권한은 읽기(r), 쓰기(w), 실행(x) 순서로 표시됩니다. 만약 특정 권한이 없다면 ‘-‘ 기호로 표시됩니다. 예를 들어, 그룹 소유자의 ‘rw-‘는 읽기 및 쓰기 권한은 있지만 실행 권한은 없다는 것을 의미합니다.
기호 표기법을 사용하여 파일 권한 변경
파일이나 디렉토리의 권한을 변경하려면 ‘chmod’ 명령어를 사용하고, 변경할 권한의 대상을 지정합니다. 변경 대상은 ‘u’로 표시되는 파일 소유자, ‘g’로 표시되는 그룹 소유자, 또는 ‘o’로 표시되는 기타 사용자가 될 수 있습니다. ‘a’ 문자를 사용하여 모든 사용자 범주를 한 번에 지정할 수도 있습니다.
다음으로 지정할 것은 변경 사항입니다. 권한을 추가하려면 ‘+'(더하기 기호)를, 권한을 제거하려면 ‘-‘ (빼기 기호)를 사용합니다. 마지막으로 추가할 권한을 ‘r’, ‘w’, ‘x’를 사용하여 지정합니다.
실제로 예를 들어, ‘books’라는 디렉토리를 다음 명령어로 만들어 보겠습니다.
mkdir books
디렉토리 안으로 이동하려면 다음 명령어를 입력합니다.
cd books
‘readingList.txt’라는 파일을 만듭니다.
touch readingList.txt
다음 명령어를 실행하여 ‘books’ 디렉토리 내용을 상세 목록으로 확인합니다.
ls -l
출력 결과는 다음과 같습니다.
생성한 파일은 첫 번째 문자가 ‘-‘로 표시된 일반 파일입니다. 소유자와 그룹 소유자는 읽기 및 쓰기 권한을 가지고 있고, 다른 사용자는 읽기 권한만 가지고 있습니다. 다른 사용자에게 파일에 쓰기 권한을 부여하려면 다음 명령어를 실행합니다.
chmod o+w readingList.txt
다른 사용자의 권한이 변경되었는지 확인하려면 다음 명령어를 실행합니다.
ls -l
출력:
다른 사용자의 파일 권한이 ‘r–‘에서 ‘rw-‘로 변경되었습니다. 이제 쓰기 권한을 갖게 된 것입니다.
파일 소유자에게 실행 권한을 추가하려면 다음 명령어를 사용합니다.
chmod u+x readingList.txt
그룹 소유자의 쓰기 권한을 제거하려면 다음 명령어를 실행합니다.
chmod g-w readingList.txt
아무도 파일을 볼 수 없도록 모든 사용자의 읽기 권한을 제거하려면 다음 명령어를 실행합니다.
chmod a-r readingList.txt
파일 소유자에게 다시 읽기 권한을 추가하려면 다음 명령어를 실행합니다.
chmod u+r readingList.txt
파일 그룹 소유자에게 쓰기 및 실행 권한을 추가하려면 다음을 실행합니다.
chmod g+wx readingList.txt
8진수 표기법을 사용하여 권한 변경
리눅스에서 사용 가능한 세 가지 권한은 각각 두 가지 값만 가질 수 있습니다. 읽기 권한은 ‘r’ 또는 ‘-‘ 만 가능하고, 쓰기 권한은 ‘w’ 또는 ‘-‘, 실행 권한은 ‘x’ 또는 ‘-‘만 가능합니다.
따라서 이러한 권한은 켜짐(1) 또는 꺼짐(0)의 두 가지 상태로 표현될 수 있으며, 이는 이진수로 표현하기에 적합합니다. ‘rw-‘와 같은 권한은 이진수로 ‘110’으로 표시할 수 있습니다.
이진수 3개만 있으면 특정 사용자 범주에 대한 모든 권한을 표시할 수 있습니다. 예를 들어 소유자, 그룹, 기타 사용자에 대한 ‘rwxrw-r–‘ 권한은 이진수로 ‘111110100’으로 표시할 수 있습니다.
하지만 길고 혼란스러울 수 있는 이진수 대신 더 나은 대안은 8진수를 사용하는 것입니다.
8진수는 8을 밑으로 하므로 8개의 값만 가질 수 있습니다. 각 8진수는 정확히 3개의 이진수에 매핑됩니다.
예를 들어, ‘rw-‘와 같은 권한은 이진수로 ‘110’으로 표시할 수 있으며, 이 110의 8진수 값은 6입니다. 따라서 ‘rw-‘를 나타내기 위해 6을 사용할 수 있습니다. 아래 그림과 같이 소유자, 그룹, 기타 사용자 각각의 읽기, 쓰기, 실행 권한을 8진수로 표현할 수 있습니다.
복잡한 이진수를 사용하는 대신 8진수를 사용하여 권한을 더 간결하게 표현할 수 있습니다. 따라서 소유자, 그룹, 기타 사용자의 모든 권한은 위 그림과 같이 하나의 8진수 코드로 표시됩니다.
8진수 표기법을 사용하면 기호 표기법처럼 한 번에 한 명의 사용자에게만 권한을 설정할 수 있는 것과 달리, 모든 사용자에 대한 권한을 한 번에 설정할 수 있습니다. 다만 8진수 표기법은 각 8진수가 무엇을 의미하는지 익숙해지는 데 다소 시간과 연습이 필요합니다. 필요할 때마다 위 그림을 참고하면 됩니다. 이제 8진수 표기법으로 권한을 변경하는 몇 가지 예를 살펴보겠습니다.
모든 사용자(소유자, 그룹 소유자, 기타 사용자)에게 ‘readingList.txt’ 파일에 대한 읽기, 쓰기, 실행 권한을 부여하려면 다음 명령어를 실행합니다.
chmod 777 readingList.txt
권한이 변경되었는지 확인하려면 다음 명령어를 실행합니다.
ls -l
출력:
total 0 -rwxrwxrwx 1 madici madici 0 Sep 6 05:45 readingList.txt
이제 소유자, 그룹, 기타 사용자 모두 ‘readingList.txt’ 파일을 읽고 쓰고 실행할 수 있는 권한을 갖게 되었습니다.
그룹 소유자와 다른 사용자의 쓰기 권한을 제거하려면 다음 명령어를 실행합니다.
chmod 755 readingList.txt
소유자와 다른 사용자의 실행 권한을 제거하려면 다음 명령어를 실행합니다.
chmod 654 readingList.txt
리눅스의 특별 권한
리눅스에는 표준 읽기, 쓰기, 실행 권한 외에도 파일과 디렉토리에 적용할 수 있는 세 가지 특별 권한이 있습니다. 이러한 권한은 접근 제어 기능을 향상시키고, 파일 소유자나 그룹 소유자보다 권한이 적은 사용자도 더 높은 권한으로 파일 및 명령어를 실행할 수 있도록 해줍니다.
특별 권한은 다음과 같습니다.
- SUID(Set User ID): SUID 권한이 설정된 파일이나 프로그램은 실행하는 사용자의 권한이 아니라 파일 소유자의 권한으로 실행됩니다. 이는 일반 사용자가 높은 권한이 필요한 작업을 수행할 때 유용합니다.
- SGID(Set Group ID): SGID 권한이 설정된 파일은 파일을 실행하는 사용자의 그룹 권한이 아닌 파일의 그룹 소유자의 권한으로 실행됩니다.
- 고정 비트(Sticky Bit): 고정 비트는 주로 디렉토리에 설정되는 권한으로, 디렉토리 내의 파일을 디렉토리의 소유자, 해당 파일의 소유자, 또는 루트 사용자만 삭제할 수 있도록 제한합니다.
이러한 특별 권한은 표준 읽기, 쓰기, 실행 권한과 함께 사용할 수 있습니다.
결론
컴퓨터에 여러 사용자가 없더라도 권한은 리눅스에서 매우 중요한 개념입니다. 리눅스 시스템과 그 안에 저장된 데이터의 제어, 보안 및 개인정보 보호를 보장하려면 권한을 이해하는 것이 필수적입니다. 따라서 이 글에서 배운 권한 관련 내용을 직접 연습해 보면서 익숙해지도록 노력하는 것이 좋습니다.
Windows에서 리눅스 명령어를 사용하는 방법도 알아보는 것도 좋습니다.