Wisdom’s Cloud
[LINUX] 7. 사용자 관리와 파일 속성 본문
사용자와 그룹
-
리눅스는 다중 사용자 시스템이므로, 1대의 리눅스에 사용자 여러 명이 동시에 접속해서 사용할 수 있는 시스템이다.
-
리눅스를 설치하면 기본적으로 root라는 이름을 가진 슈퍼 유저가 있는데, 이 root 사용자는 시스템의 모든 작업을 실행할 수 있는 권한이 있으며, 시스템에 접속할 수 있는 사용자를 생성할 수 있는 권한도 있다.
-
모든 사용자는 혼자서 존재하는 것이 아니라 하나 이상의 그룹에 소속되어야 한다.
-
/etc/passwd 파일에서 여러 명의 사용자들을 확인할 수 있고, 제일 위의 root 사용자부터 tcpdump 사용자까지는 리눅스에서 기본적으로 존재하는 표준 사용자다. 그리고 '암호'가 'x'로 표시되어 있는 것은 /etc/shadow 파일에 비밀번호가 지정되어 있다는 의미이며, 각 행의 의미는 다음과 같다.
사용자 이름 : 암호 : 사용자 ID : 사용자가 소속된 그룹 ID : 전체 이름 : 홈 디렉터리 : 기본 셸
-
/etc/group 파일에서는 여러 그룹들을 확인할 수 있고, 마지막 '그룹에 속한 사용자 이름'은 참조로 사용되기 때문에 해당 부분에 아무것도 써 있지 않다고 해서 그룹에 소속된 사용자가 반드시 없다는 뜻은 아니며, 각 행의 의미는 다음과 같다.
그룹 이름 : 비밀번호 : 그룹 id : 그룹에 속한 사용자 이름
useradd/adduser : 새로운 사용자를 추가해준다. 이 명령어를 실행하면 /etc/passwd, /etc/shadow, /etc/group 파일에 새로운 행이 추가된다.
# useradd newuser | newuser라는 이름의 사용자 생성 |
# useradd -u 1111 newuser | newuser라는 사용자를 생성하면서 사용자 ID를 1111로 지정 |
# useradd -g mygroup newuser | newuser라는 사용자를 생성하면서 mygroup 그룹에 포함시킴(mygroup 그룹을 먼저 만들어놓아야 함) |
# useradd -d /newhome newuser | newuser라는 사용자를 생성하면서 홈 디렉터리를 /newhome으로 지정 |
# useradd -s /bin/csh newuser | newuser라는 사용자를 생성하면서 기본 셸을 /bin/csh로 지정 |
passwd : 사용자의 비밀번호를 지정하거나 변경한다.
# passwd newuser | newuser 사용자의 비밀번호 지정 또는 변경 |
usermod : 사용자의 속성을 변경한다. 옵션은 useradd와 동일하다.
# usermod -g root newuser | newuser 사용자의 그룹을 root 그룹으로 변경 |
userdel : 사용자를 삭제한다.
# userdel newuser | newuser 사용자 삭제 |
# userdel -r newuser | newuser 사용자를 삭제하면서 홈 디렉터리까지 삭제 |
chage : 사용자의 암호를 주기적으로 변경하도록 설정한다.
# chage -l newuser | newuser 사용자에 설정된 사항 확인 |
# chage -m 2 newuser | newuser 사용자에 설정한 암호를 사용해야 하는 최소 일자 |
# chage -M 30 newuser | newuser 사용자에 설정한 암호를 사용할 수 있는 최대 일자 |
# chage -E 2026/12/12 newuser | newuser 사용자에 설정한 암호가 만료되는 날짜 |
# chage -W 10 newuser | newuser 사용자에 설정한 암호가 만료되기 전에 경고하는 기간. 지정하지 않을 경우 기본값은 7일 |
groups : 사용자가 소속된 그룹을 보여준다.
# groups | 현재 사용자가 소속된 그룹을 보여줌 |
# groups newuser | newuser가 소속된 그룹을 보여줌 |
groupadd : 새로운 그룹을 생성한다.
# groupadd newgroup | newgroup이라는 그룹 생성 |
# groupadd -g 2222 newgroup | newgroup이라는 그룹을 생성하면서 그룹 ID를 2222로 지정 |
groupmod : 그룹의 속성을 변경한다.
# groupmod -n bgroup agroup | agroup 그룹의 이름을 bgroup으로 변경 |
groupdel : 그룹을 삭제한다.
# groupdel newgroup | newgroup 그룹 삭제(해당 그룹을 주요 그룹으로 지정한 사용자가 없어야 함) * 사용자는 주요 그룹 1개와 보조 그룹 여러 개에 가입할 수 있으며, 그 예로 useradd -g main -G sub user1 명령은 user1을 생성하면서 main 그룹을 주요 그룹으로, sub 그룹을 보조 그룹으로 가입시킨다. * |
gpasswd : 그룹의 암호를 설정하거나 그룹 관리를 수행한다.
# gpasswd newgroup | newgroup 그룹의 암호를 지정 |
# gpasswd -A user1 newgroup | user1 사용자를 newgroup 그룹의 관리자로 지정 |
# gpasswd -a user1 newgroup | user1을 newgroup 그룹의 사용자로 추가 |
# gpasswd -d user1 newgroup | user1을 newgroup 그룹의 사용자에서 제거 |
[실습 1] 사용자 그룹을 관리하는 연습을 해보자.
step 0 스냅숏 받은 데이터를 이용해서 Server를 초기화하자.
step 1 새로운 사용자를 만들어보자.
* useradd 명령을 실행해 별도의 그룹을 지정하지 않으면 자동으로 사용자 이름과 동일한 그룹이 생성되고
새로운 사용자는 생성된 그룹에 자동으로 포함되는 것을 알 수 있다.
따라서 사용자를 관리할 경우 먼저 그룹을 만들고 사용자를 만든 그룹에 속하도록 생성하는 것이 바람직하다. *
step 2 그룹을 별도로 생성하고 해당 그룹에 다수의 사용자를 포함시켜 관리해보자.
* 아직 암호가 지정되어 있지 않기 때문에
centos의 경우 암호가 코드화되어 들어 있지만 user1과 user2는 해당 부분에 '!!'라는 표시만 되어 있다. *
* 간단한 암호를 입력하면 경고가 나오지만 root 사용자가 암호를 지정해줄 경우에는 간단한 암호도 지정할 수 있다.
단, 일반 사용자가 자신의 암호를 변경할 때는 간단한 암호가 아닌 8글자 이상으로
영어 사전에 등록되지 않은 단어를 사용해야 한다. *
* 두 사용자의 암호를 모두 '1234'로 입력했으나 코드화된 암호는 서로 다르다는 것을 확인할 수 있다.
즉, /etc/shadow 파일을 살펴보더라도 암호를 알 수 없다는 것을 의미한다. *
* 두 디렉터리에 동일한 파일이 들어 있다.
즉, 새로운 사용자를 생성하면 해당 사용자의 홈 디렉터리 기본 설정은 '/home/사용자이름'으로 지정되며,
/etc/skel 디렉터리의 모든 내용을 사용자의 홈 디렉터리에 복사하는 작업이 발생한다.
그러므로 앞으로 생성하는 사용자에게 특정한 파일 등을 배포하고 싶은 경우 /etc/skel 디렉터리에 넣어두면 된다. *
step 3 연습한 사용자 및 그룹을 삭제한다.
파일과 디렉터리의 소유권과 허가권
-
리눅스는 각각의 파일과 디렉터리마다 소유권과 허가권이라는 속성이 있다.
-
예를 들어 root 사용자가 자신의 홈 디렉터리에서 touch sample.txt 명령을 실행해 빈 파일을 만들고 ls -l 명령을 실행하면 다음과 같이 나타낼 수 있다.
- | rw-r--r-- | 1 | root | root | 0 | 1월 22일 19:22 | sample.txt |
파일 유형 | 파일 허가권 | 링크 수 | 파일 소유자 이름 | 파일 소유그룹 이름 | 파일 크기 | 마지막 변경 날짜 | 파일 이름 |
파일 유형
-
파일이 어떤 종류인지 나타내며, 디렉터리인 경우 'd'가, 일반적인 파일인 경우 '-'가 표시된다.
-
그 외에 블록 디바이스는 'b'로 표시되며, 대표적인 것으로는 하드디스크, 플로피디스크, CD/DVD 등의 저장장치가 있다.
-
문자 디바이스는 'c'로 표시되며, 대표적인 것으로는 마우스, 키보드, 프린터 등의 입출력장치가 있다.
-
링크는 'l'로 표시되고, 링크란 windows의 '바로 가기 아이콘'과 비슷한 개념으로 연결된 파일을 의미하며, 이때 실제 파일은 다른 곳에 존재한다.
파일 허가권
-
만약 파일 허가권이 'rw-r--r--'라면 rw-, r--, r--으로 3개씩 끊어서 인식하면 된다.
-
r은 read, w는 write, x는 execute의 약자로, rw-는 읽거나 쓸 수 있지만 실행할 수 없다는 의미며, r--로 표시되면 읽기만 가능한 파일이라는 의미다.
-
첫 번째 rw-는 소유자의 파일 접근 권한을, 두 번째 r--는 그룹의 파일 접근 권한을, 세 번째 r--는 그 외 사용자의 파일 접근 권한을 의미한다.
-
따라서 소유자는 읽거나 쓸 수 있고, 그룹은 읽을 수만 있으며, 그 외 사용자도 읽을 수만 있도록 허가되어 있다는 의미이며, 허가권을 다음과 같이 숫자로도 표현할 수 있다.
소유자(User) | 그룹(Group) | 그 외 사용자(Other) | |||||||
r | w | - | r | - | - | r | - | - | |
2진수 | 1 | 1 | 0 | 1 | 0 | 0 | 1 | 0 | 0 |
10진수 | 4 + 2 + 0 = 6 | 4 + 0 + 0 = 4 | 4 + 0 + 0 = 4 |
-
참고로 디렉터리의 경우 해당 디렉터리로 이동하려면 반드시 실행(x) 권한이 있어야 하므로, 디렉터리는 일반적으로 소유자/그룹/기타 사용자에게 모두 실행(x) 권한이 설정되어 있다.
-
파일의 허가권을 변경하는 명령어로 chmod 명령이 있는데, 이 명령어는 root 사용자 또는 해당 파일의 소유자만 실행할 수 있다. 예를 들어 chmod 777 smaple.txt 명령을 실행하면 sample.txt 파일은 모든 사용자가 읽고, 쓰고, 실행할 수 있는 파일이 된다.
-
또한 chmod 명령을 상대 모드로도 사용할 수 있다. 예를 들어 chmod u+x 파일이름 명령을 실행하면 소유자에게 실행 권한을 허가하라는 의미다. u-wx는 사용자에게 쓰기와 실행 권한을 제거하라는 의미고, g+rx는 그룹에게 읽기와 실행 권한을 허가하라는 의미며, o+rwx는 그 외 사용자에게 읽기/쓰기/실행 권한을 허가하라는 의미다.
파일 소유권
-
파일을 소유한 사용자와 그룹을 의미하며, 파일의 소유권을 바꾸는 명령어는 chown으로, 사용법은 chown 새로운사용자이름(.새로운그룹이름) 파일이름 명령의 형식으로 사용하면 된다.
-
예를 들어 chown centos sample.txt 명령은 sample.txt 파일의 소유자를 centos 사용자로 바꾸라는 의미고, chown centos.centos sample.txt 명령은 파일의 그룹도 centos 그룹으로 바꾸라는 의미다. 그리고 chgrp centos sample.txt 명령은 그룹만 centos 그룹으로 변경하라는 의미다.
링크
-
파일의 링크는 하드 링크와 심볼릭 링크 2가지가 있다.
-
다음과 같이 원본 파일이 inode1을 사용할 때 하드 링크를 생성하면 '하드 링크 파일'만 하나 생성되며 같은 inode1을 사용하게 된다. 하드 링크를 생성하려면 ln 링크대상파일이름 링크파일이름 명령을 실행하면 된다.
-
원본 파일에 심볼릭 링크를 생성하면 새로운 inode2를 만들고, 데이터는 원본 파일과 연결되는 효과를 갖는다. 심볼릭 링크를 생성하려면 ln -s 링크대상파일이름 링크파일이름 명령을 실행한다.
-
일반적으로 사용자는 주로 심볼릭 링크를 사용하며, windows의 바로가기 아이콘도 심볼릭 링크에 해당된다.
-
여기서 inode는 리눅스/유닉스 파일 시스템에서 사용하는 자료구조를 말하는데, 파일이나 디렉터리의 여러 가지 정보가 있다. 모든 파일이나 디렉터리는 각자 1개씩의 inode가 있으며, 각 inode에는 해당 파일의 소유권, 허가권, 파일 종류 등의 정보와 해당 파일의 실제 데이터 위치(주소)도 있다.
-
이러한 inode가 모여 있는 공간이 inode 블록이며, 일반적으로 전체 디스크 공간의 1% 정도 차지한다. Data 블록은 실제 데이터가 저장된 디스크 공간으로, 전체 디스크의 대부분을 차지한다.
[실습 2] 파일의 허가권 및 소유권을 확실히 이해하자.
step 0 Server를 실행해 root 사용자로 접속하자.
안녕하세요? 그냥 연습 파일입니다.
ls /var
step 1 파일의 속성을 변경해보자.
* 현재 사용자인 root의 실행 권한이 rw-이므로 실행할 수 없기 때문에 허가가 거부되었다는 메시지가 나왔다. *
* 첫 번째 행인 '안녕하세요~~'는 명령이 아니므로 오류가 발생했고,
두 번째 행인 'ls /var'은 실행되어 /var 디렉터리의 내용이 출력된 것을 확인할 수 있다. *
step 2 파일의 소유권을 변경해보자.
* 사용자와 그룹을 한꺼번에 바꾸려면 "chown centos.centos test" 또는
"chown centos:centos test" 명령을 입력하면 된다. *
su - centos → centos 사용자로 접속(root가 접속할 경우 암호를 물어보지 않음)
pwd → 현재 디렉터리 확인
ls -l /root/test
ls -ld /root → /root 디렉터리의 속성 확인
* 앞에서 test 파일의 소유권을 centos에게 확실히 넘겨줬는데도
centso 사용자는 /root/test 디렉터리 접근이 거부되었다.
그 이유는 /root 디렉터리의 속성이 r-xr-x---로 되어 있기 때문이다.
기타 사용자의 허가권에 아무런 권한이 허가되지 않았으므로
centos 사용자는 /root 디렉터리의 접근이 거부된 것이다.
따라서 /root 디렉터리 안에 있는 test 파일의 소유가 centos 사용자에게 있더라도 사용할 수 없다. *
exit → 다시 원래 접속한 사용자(root)로 돌아감
mv test ~centos → ~centos는 /home/centos와 동일
su - centos
ls -l test
chmod 777 test
ls -l test
* 명령을 허용하지 않는다는 메시지가 나온다. 정상적인 상황이다.
만약 이 test 파일이 심각한 바이러스 파일이고, 지금 명령이 실행되었다면
centos 사용자가 마음대로 root 사용자에게 바이러스 파일을 전달하게 되는 것이다.
그러므로 파일의 소유권을 바꾸는 chown 명령은 root 사용자만 실행할 수 있다. *
[실습 3] 하드 링크와 싱볼릭 링크를 생성해보자.
step 0 Server를 실행하고, 다음 그림을 참고하면서 진행하자.
step 1 /root/linktest 디렉터리를 만들고 그 안에 basefile이란 파일을 만들자.
step 2 하드 링크와 심볼릭 링크를 확인해보자.
ln basefile hardlink → 하드 링크 생성
ln -s basefile softlink → 심볼릭 링크(=소프트 링크) 생성
ls -il → -il 옵션은 inode 번호를 제일 앞에 출력
cat hardlink → 하드 링크의 내용 확인
cat softlink → 심볼릭 링크의 내용 확인
* 원본 파일(basefile)은 inode가 68248798번으로 지정되어 있고,
하드 링크 파일도 마찬가지로 inode가 68248798번으로 지정되어 있지만,
심볼릭 링크 파일은 inode가 68240502번으로 다르게 지정되어 있다.
또한 원본 파일과 하드 링크 파일은 Data 블록에 같은 원본 파일 데이터를 사용하므로 크기가 61바이트로 동일하지만,
심볼릭 링크 파일은 별도의 원본 파일 포인터를 갖기 때문에 8바이트로 크기가 다르다는 것을 확인할 수 있다. *
mv basfile ../ → basefile을 앞 디렉터리(..)로 이동
ls -il
cat hardlink
cat softlink
* 하드 링크는 디렉터리에서 원본 파일이 없어져도 아무 이상이 없지만,
심볼릭 링크는 디렉터리에서 원본 파일이 없어지면 연결이 끊어지는 것을 확인할 수 있다. *
'LINUX > Beginner' 카테고리의 다른 글
[LINUX] 9. 네트워크 관련 설정과 명령어 (0) | 2021.01.30 |
---|---|
[LINUX] 8. 리눅스 관리자를 위한 명령어 (0) | 2021.01.29 |
[LINUX] 6. 리눅스 기본 명령어 (0) | 2021.01.21 |
[LINUX] 5. 리눅스 운영에 필요한 개념 (0) | 2021.01.21 |
[LINUX] 4. CentOS 리눅스 설치 (0) | 2021.01.19 |