리눅스에서는 각각의 파일과 디렉토리마다 소유권 및 허가권의 속성이 있다.
유닉스는 다중 사용자 시스템으로 여러 사용자가 동시에 시스템에 접속해 있는데, A가 B의 파일을 지워버리면 곤란한 일이 생길 수 있다. 그래서 각 사용자마다 사용할 수 있는 공간을 나눠놓았는데 이를 홈디렉토리(윈도의 Documents and Settings와 비슷한 개념)라고 한다.



○ 파일 속성



○ 파일 허가권(Permission)

파일 퍼미션은 "rw-", "r--", "r-x" 3개씩 끊어서 읽으면 된다.
해당 파일에 대해 소유자는 읽거나 쓸 수 있고,
그룹은 읽을 수만 있고,
그 외 사용자는 읽거나 실행만 되도록 허가되어 있다.



chown은 소유권을 변경.
chmod는 권한을 변경.

r권한을 가지면 파일을 복사 가능하다. (복사 후에는 지지고 볶고 가능. 보안상 위험하니 필요치 않다면 아예 권한을 주지 말아야 함)
w권한을 가지면 수정 후 저장이 가능하다.

# chown 계정.그룹 a.txt
# chown -R 계정.그룹 a.txt
첫번째 명령은 해당 파일의 소유권 변경 가능. 루트만이 할 수 있다.
두번째 명령은 해당 파일을 쓰는 디렉토리와 그 안의 파일 모두 소유권 변경.

# chmod u+x a.txt
# chmod g-w a.txt
첫번째 명령은 유저한테 해당 파일에 대한 실행 권한 부여.
두번째 명령은 그룹한테 해당 파일에 대한 쓰기 권한 회수.
Posted by 겨울섬
,

리눅스에서 사용자를 생성할 시 고려해야 할 사항

- 사용자를 어느 그룹에 넣을 것인지
- UID (고유한 아이디. 학번의 개념)
- GID (속한 그룹 아이디. 학과의 개념)
- 사용자의 홈디렉토리를 어디에 둘 것인지
- 쉘은 무엇을 쓸 것인지


● 계정 생성 및 흐름
UID = 5000
GID = 500
Home Directory = /home/oracle
Shell = /bin/bash
Login ID = oracle
# useradd -u 5000 -g 500 -d /home/oracle -s /bin/bash oracle
  ↓
위 명령을 날리면 /etc/passwd 파일[각주:1]에 사용자 등록.
  ↓
그리고 /home/oracle 라는 홈디렉토리 생성.
  ↓
그리고 /etc/skel/* 모든 파일을 홈디렉토리 밑으로 전부 복사.
  ↓
그리고 복사한 파일들에 사용자 권한을 설정.

# useradd oracle라고 해도 된다. 그 사이에 있는 설정값들은 서버가 자동으로 잡아준다. [각주:2]


● 그룹 생성
사용자를 추가하기 전에 500번 그룹이 먼저 만들어져 있어야 한다. 없다면 먼저 500번 그룹을 만들어 주고 사용자를 추가시켜 주어야 한다.
GID = 500
Group Name = dba
# groupadd -g 500 dba


● 그룹 및 유저 삭제
# groupdel 그룹명
# userdel 계정명
# userdel oracle 을 입력하면 oracle이라는 사용자는 지워지는데 사용자가 쓰던 /home/oracle이라는 홈디렉토리는 지워지지 않는다. (실수로 계정을 지웠을 때 다시 한번 해당 계정에 useradd를 해주면 정상적으로 홈디렉토리를 사용 가능)
# userdel -r oracle 하면 사용자와 함께 사용자가 쓰던 /home/oracle 홈디렉토리까지 모두 지워진다.(굉장히 위험한 옵션이므로 신중히 사용하자)


● 계정 정보 변경
# usermod -g 505 oracle
# usermod -u 0 -o oracle
# usermod -g 505 oracle 은 oracle 계정의 그룹번호(GID)를 505로 변경.
# usermod -u 0 -o oracle 은 리눅스에서 UID와 GID를 0으로 쓰는 계정은 루트밖에 없는데, oracle계정을 루트권한까지 끌어올리는 명령임. 즉, UID=0으로 변경.
리눅스에서 계정 및 계정권한은 UID를 보고 결정한다. 이런 정보가 /etc/passwd 파일에 들어있다.


● 계정 암호 생성
# passwd 계정명



◆ /etc/passwd
사용자 이름 : 암호 : 사용자ID : 사용자가 소속된 그룹ID : 전체 이름 : 홈 디렉토리 : 기본 쉘
root:x:UID:GID:root:/root:/bin/bash
여기서 두번째에 x는 계정의 암호가 /etc/shadow 에 들어있다는 뜻. 원래는 암호가 들어있었는데 보안을 강화하기 위함. 

◆ /etc/shadow
/etc/shadow를 열었을 때 !!는 해당 계정에 아직 암호가 설정되지 않았다는 뜻.
passwd 명령으로 계정의 암호를 설정한 후 /etc/shadow를 열어보면 : : 사이에 md5 알고리즘으로 변환된 암호코드가 있다.
만약 루트 암호를 잊어버렸을 때 : : 사이의 값을 모두 지워주기만 하면 암호를 묻지 않고 루트로 로그인을 할 수 있다. 물론 로그인 후에는 루트 암호를 다시 설정해 주어야 하는 것을 잊지 말자.
userdel 명령어를 날리면 /etc/passwd와 /etc/shadow파일에서 해당 계정에 대한 정보가 지워진다.
로그인을 하면 무조건 먼저 /etc/passwd를 확인하고 그 후 /etc/shadow를 확인한다.
계정을 휴면상태로 하고 싶다면 /etc/passwd 안의 해당 계정 줄 맨 앞에 주석(#)을 달아주면 된다.

◆ /etc/group
그룹명 : 비밀번호 : 그룹ID : 그룹에 속한 사용자명
groupadd 명령어로 그룹을 만들면 이 파일의 제일 아래쪽에 그룹에 대한 정보가 생성된다.
  1. passwd파일은 현재 서버에 등록되어 있는 사용자의 명단임 [본문으로]
  2. # useradd -D 입력하면 자동으로 잡아주는 설정값을 미리 확인 가능 [본문으로]
Posted by 겨울섬
,

Windows에는 마운트(Mount)라는 개념이 별로 사용되지 않지만, 리눅스에서는 하드디스크의 파티션, CD/DVD, USB메모리 등을 사용하려면 특정한 위치에 연결을 해 줘야 한다. 이렇게 물리적인 장치를 특정한 위치(대개는 디렉토리)에 연결시켜 주는 과정을 마운트라고 한다.


그림을 보면서 좀 더 쉽게 다가가보자.

기차는 서울역에서 정차한다. (=디스크를 디렉토리에 마운팅)
홍길동은 서울역에서 기차를 탄다. (=데이터를 마운트 디렉토리에 저장)
기차는 홍길동을 태우고 목적지까지 간다. (=실제 물리적으로 디스크에 저장됨)


여기에서 기차는 리눅스 상에 있는 물리적 장치이고, 서울역은 마운트 된 디렉토리, 홍길동은 저장될 데이터라고 보면 된다.
test.txt라는 데이터를 /data 아래에 저장하면 실제로 해당 데이터는 /dev/sda1 디스크에 저장이 된다.
그렇다면 그 후 /dev/sda1에 /data2 디렉토리를 마운트 시키면 test.txt 데이터는 어떻게 될까?
정답은 test.txt는 안보이는 것일 뿐, 실제로는 /dev/sda1에 저장되어 있다.

유닉스에서는 마운트 되어있는 상태에서는 CDROM 드라이브의 eject 버튼이 먹히지 않는다.
그 이유는 아직 마운트 되어있기 때문에 유닉스에게 언마운트 명령을 주어야 그제서 eject가 먹힌다.
(mount <-> umount)
Posted by 겨울섬
,