klaus

[KDT-DAY_13] Linux (feat. 편집기, 권한) 본문

수업/KDT

[KDT-DAY_13] Linux (feat. 편집기, 권한)

klus! 2023. 1. 11. 17:02

1. 편집기(vi / vim / Gvim)

 

[+]Vi와 Vim, Gvim 

  Linux에서 전통적으로 사용해오는 vi와 vi를 좀 더 개선한 vim 편집기부터 알아보자. CLI에서만 동작되므로 일부 사용자들은 불편하다고도 하지만 1976년에 만들어지고 1978년에 처음 BSD UNIX에 탑재된 이후 아직도 UNIX/Linux 매니아 사이에서는 디폴트 GUI 에디터인  gedit 보다 이 vi를 더 많이 사용하고 있다는 통계도 있다. 


CentOS에서는 Vi보다 Vim(Vi IMproved)을 사용하게 되어 있다. 1991년에 나온 vim은 vi의 별칭인데 alias |grep vi 해보면 vim이라고 나온다. vim은 Perl, Python, 그리고 PHP의 기본 편집기이기도 하다. 시스템 전체적으로 vim의 형태를 조절하려면 /etc/vimrc 파일에서 조절할 수 있다. 사용법은 vi와 동일한데 화면이 TUI처럼 보이고, 줄 번호가 gedit 처럼 우측하단에 보여서 사용하기 좀 더 편리해 보인다. 
=>gvim은 vim의 GUI 버전이다.

 

※ BSD : Berkeley Software Distribution 

 

- 이동 모드

내용
Ctrl+d/u   반 페이지 아래/위로 이동
Ctrl+f/b   한 페이지 앞/뒤로 이동
G/1G  맨 끝줄/첫줄로 이동
:set nu  줄 번호를 붙임
g/줄_수  현재 줄에서 주어진 줄 수만큼 이동

 

- 파일모드

명령어 내용
:w, :w! 현재 파일을 강제로 저장
:wq  현재 파일을 저장하고 vi를 종료
:q  현재 파일을 저장하지 않고 vi를 종료
:q!, :wq! 강제로 vi를 종료, 강제로 저장 후 vi 종료

- 검색 모드

명령어 내용
/[단어] 주어진 해당 단어의 텍스트를 앞에서 찾음
/  동일한 텍스트를 앞에서 다시 찾음
?[단어] 주어진 해당 단어의 텍스트 뒤에서 찾음
? 동일한 텍스트를 뒤에서 찾음
   

단축키 모음

 

- gedit 
  CentOS에서의 디폴트 GUI 편집기이다. 사용법은 직관적이어서 매우 쉽다.


-  nano
  nano 역시 간편한 텍스트 편집도구이다. 

 - mc
  이 mc(Midnight Commander) 편집 프로그램은 예전 DOS 시절부터 Linux에서 파일 관리용으로 널리 사용되던 TUI 방식의 프로그램이다. 


-   ed


  이 도구는 IBM에서 만든 편집기인데 콘솔에서 주로 사용된다.

 

 

 

 

2. Linux 권한

 

[+] Linux 쉘의 종류

종류 설명
Bourne Shell /bin/sh 로써 모든 쉘의 원조 격이다.( 뼈대)
korn Shell /bin/ksh로써 본 쉘을 모방해서 만든 쉘로 많이 사용하지 않는다.
C Shell  /bin/csh로써 본 쉘의 단점을 보강한 C 언어의 특성을 가지고 있는 쉘이 다.
Bourne Again Shell  /bin/bash로써 본 쉘과 C 쉘의 특징을 모두 가진 Linux의 디폴트 쉘로 bash 쉘이라고 부른다.

 

- 쉘 파일 

 

쉘 변경도 가능하다.

 

[+] 리눅스의 환경파일!

환경 파일은 부팅 시 시스템(전체)와 사용자(개인)별로 환경 변수가 저장된 파일을 불러와서 작업하는 환경을 만들어주는데 다음과 같은 것이 있다. windows 서버에서의 Raoming profile과 유사한 개념

 

환경파일 설명
/etc/profile 전반적인 시스템 환경설정 파일로써 시작 프로그램 설정, 로그인 시 최초로  적용 되는 파일로 PATH, USER, MAIL, HOSTNAME 등이 정의되어 있다 .
/etc/bashrc 전반적인 사용자에 관한 설정파일로써 alias, umask, 그리고 prompt  등이 정의되어 있다.
$HOME/.bash_profile 개별 사용자의 전반적인 환경과 프로그램이 들어 있다.
$HOME/.bashrc 개별 사용자가 콘솔로 들어갈 때의 alias, 함수 등이 정의되어 있다. 
$HOME/.bash_history 개별 사용자가 입력한 명령어, 히스토리 파일 크기 등이 들어 있다.

- etc아래에 있으면 전반적인 환경 변수이고 HOME아래있으면 개별적으로 사용자 환경변수를 확인할 때 사용한다.

예를들어, /home/centos/.bash_history 각 사용자 별로 명령어를 사용한history를 확인 할 수 있다

 

[+]adduser 명령어

사용자를 생성할 때 adduser [계정명] [옵션]으로 생성

adduser는 useradd의 심볼릭 링크이다(ls -l /usr/sbin/adduser 하면 useradd의 링크라고 보인다).

adduser를 사용하는 것이 더 좋다. 
- 옵션
G : 기본그룹 외에 추가로 특정그룹에 포함시킴
d : 사용자의 홈 디렉터리를 지정해서 사용자를 생성하는데 별도로 지정하지 않으면 ‘/home /계정_명’이 됨
s : 사용자 쉘 지정해서 생성하는데 별도로 지정하지 않으면 /bin/bash가 됨
p : 사용자 생성과 동시에 평문장 패스워드도 지정해서 생성함 등이 있다.

 

- adduser dotori 하면 자동으로 /bin/bash 쉘과 /home/dotori 홈 디렉터리가 생성

확인 방법은 tail -1 /etc/passwd 와 같이 passwd에서 사용자 명을 확인하고 etc/shadow에서 패스워드를 확인 할 수 있다.

=>사용자의 생성 확인은 /etc/passwd에서 해주고 
  사용자의 패스워드 여부는 /etc/shadow에서 해준다. 
  사용자의 그룹 확인은 /etc/group에서 해주면 된다. 
  id lee 해서 사용자의 UID(User ID), GID(Group ID)를 확인할 수도 있다.  

 

ID와 PW를 같이 만들 때

adduser와 useradd의 차이

useradd는 사용자 홈디렉토리를 자동으로 생성안함 + 기타 등등

adduser는 홈디렉토리를 자동으로 생성함 + 기타 등등

 

사용자

/etc/login.defs

어떤 중요한 설정 파일을 변경할 때에는 반드시 원본 파일을 백업해두고 작업
어떤 중요한 작업을 할 때에 su root 해서 root 사용자로 작업하는 것도 금물

==sudo를 사용해서 작업한다.

 

 

[+] /etc/skel 디렉터리  

이 디렉터리는 사용자 생성 시 사용자의 홈 디렉터리에 자동으로 들어가는 항목들이 들어 있는 곳으로 모두 숨김 파일이기 때문에 ls –a /etc/skel 해서 확인할 수 있다. 여기서 설정 값을 변경하거나 악성코드 파일이나 디렉터리를 넣어두면 이제부터 추가되는 사용자들의 홈 디렉터리에는 변경된 파일이나 디렉터리 등이 자동으로 들어가 있게 되어 보안상 문제가 될 수 있어서 /etc/skel 디렉터리를 잘 관리할 필요가 있다. 
=>/etc/skel 디렉터리의 특성을 이용한 사용자별 웹 페이지 만들기 
보통은 Apache 웹 서버에서 가상 디렉터리로 사용자별 홈 페이지를 설정하지만 앞에서 알아본 /etdc/skel 디렉터리와 사용자 생성 시 자동으로 만들어 지는 ‘/home/사용자’ 디렉터리와의 관계를 이용해서 사용자별로 홈 페이지를 생성할 수 있다. 
※ Windows Server 등에서 설정하는 Roaming Profile처럼 사용자가 어느 장소에서 어느 머신으로 서버에 로그온 해도 자신의 홈피를 가지게 하는 기법이다.  
  앞에서 chmod +x -R /home/* 해서 이미 /home 디렉터리 이하의 권한을 변경했지만 Windows 서버와 다르게 부모의 권한이 자식 디렉터리나 파일로 상속되지 않기 때문에 별도로 다시 해주어야 한다.

 

 

vi /etc/httpd/conf.d/userdir.conf

- UserDir disabled 주석처리한다. 즉 사용하겠다는 의미

 

 

 

으로 변경

httpd 서비스 시작

 

 

 

취약점

-리눅스 소프트링크 취약점

- /etc/passwd

- /etc/skel/ ==> 해당 폴더의 경우 사용자 생성시 홈 데릭터리에 자동으로 만들어지는 항목들이 생성되기 때문에 악성코드가 복사 되기 때문에 

 

 

/etc/login.defs 파일

시간 기준 : 1970년 1월 1일 0시 0분 0초부터

 

 

 

 

 

[+] userdel 명령어

 - 사용자 삭제 

  userdel 명령어로 계정 및 패스워드를 삭제할 수 있는데 
-r : 사용자가 만든 파일이나 홈 디렉터리도 삭제 옵션이 있다. 

 

 

[+] usermod 명령어

- 사용자 기존 정보 변경

옵션

a 사용자명 : G 그룹_명 옵션과 함께 사용자를 다른 그룹에 추가함 
d 홈_디렉터리 : 사용자의 홈 디렉터리 지정
e 만료일 : 패스워드 만료일 변경
G 추가시킬_그룹 : 추가적으로 그룹에 가입(기존에 해당 그룹이 있어야 함)
g 변경될_그룹 : 사용자_명의 기본 그룹을 변경
s 셀 : 기본 셀을 변경
u UID : UID 변경
l / L 사용자명 : 사용자의 로그인_명 변경, L은 사용자 계정 잠금
m : 홈 디렉터리를 변경하면서 홈 디렉터리 안에 있는 파일도 함께 옮김 등이다. 보통 d 이동    할_디렉터리 옵션과 함께 사용해야 한다.

 

root:x:0:0:root:/root:/bin/bash

root:x:0:0:root:/root:/bin/bash

 

zzz:*:1010:1013::/home/zzz:/bin/bash

 

수정사항 /etc/passwd파일

 

root::0:0:root:/root:/bin/bash

mary:x:1008:1011::/home/mary:/bin/fales
hhh:x:1009:1012::/home/hhh:/bin/nologin
zzz:*:1010:1013::/home/zzz:/bin/bash

 root는 패스워드 없이 로그인이 되어야 함.

 

[+] su / sudo

사용자와 권한 전환 
∎ su는 앞에서도 보았지만 사용자를 전환할 때 사용한다. 
a. 사용자 centos에서 su paul 하고 paul의 패스워드 paul을 넣어주면 
paul 사용자로 전환된다. 그러나 paul 사용자가 현재 /home/centos에 있을 때 ls나 touch paul.txt식으로 다른 사용자 centos의 홈 디렉터리에 파일을 보거나 생성하는 것은 허가되지 않는다. 
b. 하지만 root 관리자는 어느 사용자의 홈 디렉터리를 보거나 들어가서 작업(읽기와 실행, 쓰기)을 할 수 있어서 위의 명령어를 root에서 해주면 모두 잘 수행된다. 
root 사용자에서 su centos 하고, pwd 해서 /home/centos 일지라도 ls, touch root.txt식으로 /home/centos/ 디렉터리의 내용을 보거나 파일을 생성할 수 있다. 

c. su, sudo 명령어에서 root 사용자로 전환하거나 권한을 일시적으로 사용할 때 주의해야 한다. 
∎ A 사용자가 su B 하면 B 사용자로 완전히 전환하는 것이고 
  =>B 사용자의 패스워드 입력 <= /etc/pam.d/su 파일에서 지정
∎ A 사용자가 su -c '명령어' 하면 관리자 권한으로 한 번 작업하는 것이 된다.
  =>root 패스워드 입력
∎ A 사용자가 sudo '명령어' 하면 일시적으로(5분) root 사용자 권한을 얻는 것이다.
  =>A 사용자의 패스워드 입력한다. 하지만 A 사용자가 sudo 명령어를 사용할 수 있게 /etc/sudoers 파일에 등록되어져 있어야 한다. 등록이 안 되어 있으면 오류가 뜬다.
∎  여러 명이 sudo 명령어를 사용해야 한다면 /etc/sudoers 파일의 %wheel 그룹에 usermod -G wheel -a paul식으로 넣어준다.

cat –n /etc/suoders 해서 
100줄 root ALL=(ALL) ALL
107줄 %wheel ALL=(ALL) ALL
110줄 #%wheel ALL=(ALL) NOPASSWD: ALL을 잘 보아 둔다.  
∎ A 사용자가 sudo su 하면 root로 전환하게 하는데 /etc/sudoers 파일에 A 사용자가 등록되어져 있으면 
  =>A 사용자의 패스워드로 root 사용자로 들어갈 수 있다.

  정리하면 CentOS나 Ubuntu 머신에서 sudo를 일반 사용자가 실행하려면 
∎ CentOS나 Ubuntu의 /etc/sudoers 파일에 직접 사용자를 지정해 주거나
∎ CentOS에서는 %wheel 그룹의 멤버가 되거나
∎ Ubuntu에서는 %sudo 그룹의 멤버가 되면 된다. 

 

Comments