klaus

[KDT-DAY_14]Linux (feat. 사용자 권한, 그룹, 정보) 본문

수업/KDT

[KDT-DAY_14]Linux (feat. 사용자 권한, 그룹, 정보)

klus! 2023. 1. 12. 16:56

0. 들어가기

- 홈디렉토리를 옮기는 방법

--적용되지 않는다.

 

touch /houch /home/choii/choii.txt && mkdir /home/choii/CHOII

ls /home/choii

chmod -m choii -d /tmp/choii

 

1. 리눅스 권한(su, sudo)

====CENTOS====

[+] su(Switch User)

- 현재 계정(일반유저)에서 로그아웃하지 않고 다른 계정으로 전환하는 명령어 입니다.

[+] sudo(SuperUser DO)

 

 

[옵션]

-c : 쉘을 실행하지 않고, 주어진 명령만을 수행합니다.

-s : 지정된 셀로 로그인합니다.

-, -l : 지정한 사용자의 환경 변수를 적용하여 로그인합니다.

 

su -c  'cat /etc/shadow'

 

sudo cat /etc/shadow

 

-일시적으로 5분간 루투 권한을 얻을 수 있다.(?????)

> nano /etc/sudoers에서 아래와 같이 타임스템프를 2분으로도 설정할 수 있다.

 

 

 

 

 

- 패스워드 없이 모든 권한을 사용할 수있음 (위험)

 

 

[+] 그룹 권한 (%wheel으로 내장 그룹)

- centos에서는 wheel은 관리자 역할을 대행할 수 있는 그룹

- ubuntu

[실습] tori에게 wheel 권한 

> sudo usermod -G wheel -a tori

>  grep wheel /etc/group      ==

====ubuntu====

- 설치시 root 사용자/PW를 지정하기 때문에 일반 사용자에서 sudo su명령을 통해 root로 접근하여 권한 습득

  ==> 최초 사용자의 경우 ubuntu는 이미 /etc/sudoers 파일에 작성

- centos와 다른점은 /etc/sudoers에서의 그룹명이 %sudo가 권한 그룹

- ubuntu가 sudo명령을 사용할 수 있는 이유는 sudo 그룹에 속해있기 때문이다. 

 

2.  PAM (Pluggable Authentication Modules)

- 리눅스 시스템에서 사용하는 '인증 모듈(Pluggable Authentication Modules)'로써 라이브러리 통합 관리 폴더

- PAM은 /etc/pam.d파일 내용의 모듈별 인증관리하고 있다.

즉,  필요한 공유라이브러리의 묶음을 제공하여 PAM을 사용하는 응용프로그램을 재컴파일없이 인증 방법을 변경 가능

 

pam.d에 있는 설정 파일

PAM에 있는 설정 파일은 기존 설정파일들 보다 먼저 적용된다. 

예) etc/ssh/sshd.conf 파일보다 /etc/pam.d가 먼저 적용

 

시스템의 환경 설정을 효율적으로 할 수있다.(== 한곳에서 집중적으로 관리)

 

[실습]

- (원본) head -20 /etc/ssh/sshd_config | cat -n 

- (PAM) cat -n /etc/pamd.sshd

(왼) 기본 (오) PAM

단, 원본파일(/etc/ssh/sshd_config의 96번째줄)에서 설정 부분이 UsePAM yes설정으로 되어 있어야 한다. 

 

- pam.d/ssh 파일을 열었을 때, required "필수적"이라는 의미

만약, 예를 들어 pam.d/su에서 pam_wheel.so use_uid의 주석을 지워주면 wheel의 그룹에 속한 사용자만 su명령을 사용할 수 있다.

tori같은 경우 wheel의 그룹이기 때문에 su를 사용할 수 있고, asd같은 경우 su명령어를 사용할 수 없다.

그룹 확인 grep wheel /etc/group

id tori를 했을 때 groups에 wheel이 있는 것을 볼 수 있다.

 

만약, asd 사용자가  su 권한이 없는 상태에서 사용을 한다면 su를 사용할 수 없다. (사용 불가)

 

 

[+] sudo권한 

sudo: 현재 계정에서 다른 계정의 권한만 빌림

 

 

 

 

 

 

 

 

 

 

abc 그룹이 centos:wheel이고 사용가능한 명령은cat/kill

 

 

 

 

2. 리눅스 그룹 관리 명령어

- 리눅스의 경우 사용자(Owner), 그룹(Group), 기타 사용자(Other)로 구분하여 권한 을 분리하여 사용

- 새로운 사용자를 만들면 보통 사용자와 같은 이름으로 그룹으로 설정되며, 사용자를 별도의 그룹으로 묶어서 관리하기 위해서는 그룹 관련 명령어을 확인해야합니다.

 

[+] group명령어 

> ABC그룹만들기groupadd ABC

> ABC그룹삭제 groupdel ABC

> ABC그룹 확인 grep ABC /etc/group

==> 패스워드  groupmod -p ABC ABC

> 그룹 속성변경 – groupmod과 chgrp

[+]chgrp 명령어

centos파일을 만들고 그룹을 root로 변경한다.

touch centos.txt && chgrp root centos.txt

 

 

 

[+]finger, id, groups, getent 명령어

- 사용자와 그룹등의 속성을 확인하는 명령어

- finger의 경우 centos에서 따로 설치하여 사용 (yum -y install finger)

 

 

 

 

w

 

who

 

users

빈줄하고 주석을 확인하는 명령어

grep ^[^#] 파일위치

 

 

 

 

[+]getent 명령어

특정 시스템 데이터베이스의 NSS (Name Service Switch) 라이브러리에서 항목을 가져 오는 명령 줄 유틸리티

 

 

user Manager

사용자 관리 모드를 사용할 수도 있다.

- yum -y install system-config-users

- system-config-users

 

 

 

2. 서비스 관련 명령어 정리

프로세스 확인 : ps, tstree, top 와 pidof, pgrep, pmap

특정 작업의 프로세스를 확인 : fuser

프로세스 종료 명령어 : kill, killall와 pkill,skill

프로세서의 우선순위를 지정하는 nice와 renice

메모리 관련 명령어 free와 sync

커널 정보를 확인하는 명령어 : uname

백그라운드 작업 확인 : &, bg,fg,%그리고 jobs, disown

시스템 사용자 정보 관련 : who, w, users, last, lastb, whoami, finger,id등이 있다.

 

 

 

 

[+]ps 명령어

- ps -ef | grep ssh 를 했을 때

root       1174      1  0 10:39 ?        00:00:00 /usr/sbin/sshd -D

[USER] [PID][PPID] [size] [time] [tty] [%cpu:%mem:start command]

PPID를 확인할 때,는 pstree -p [PPID]를 통해 어느 위치에서 실행되는지 확인할 수있다.

 

PPID(Parent Process ID)는 부모 프로세스의 PID를 의미

 

ps - aux | grep sshh

 

 

ps -ef |grep pts*

 

외부에서 접속한 PID를 확인하면, kill -9 PID를 통해 접속을 끊을 수있다.

 

 

 

 

 

 

 

 

w

- 외부 접속확인가능

pmap $$ 메모리 주소 정보

 

 

 

 

top 명령어

- 시스템 자원 정보를 실시간 확인

옵션

k를 누르면kill의미

r의 경우 nice를 설정 (nice는 실행의 우선순위!!! ==> nice 범위 :  -20~20이다.

x의 우선순위를 높이면

 

 

시스템의 정보를 볼 때

l(TOP), m, t, c 등 키를 입력하면 정보를 숨기거나 보이거나 할 수 있다.

 

 

 

fuser

fuser를 사용해서

 

 

 

kill 명령어

 

kill

-1(up) PID-19 (stop)PID -9(kill)PID를 주로사용한다.

 

 

 

 

 

nice와 renice

- 프로세서의 우선순위 표시와 변경이다.

- 범위는 -20~20(19)로 설정되어 있으며, -20이 가장 처음

 

 

skill

skill -STOP [PID]

skill - CONT [PID]

skill -KILL [PID]

skill

 

 

 

 

skill -9 -t pts/2로 ubuntu에서 연결을 종료시킬 수 있다.

 -> 우분투에서는 아무런 키입력이 되지 않는다.

 

 

 

free / sync명령어

- 캐시에 저장된 쓸데 없는 메모리를 반환해서 시스템의 안정성을 높인다.

※ 주기적으로 사용하려면 crond를 사용하여 루틴 작성을 한다.

 

 

crontab -e  정책을 하나 만들어주고

해당 파일이 실행되도록 작성한다.

 

실행될 nano /home/centos/mem_free.sh 파일을 만들어 준다.

 

 

[+] uname

- 커널 정보를 확인하는 명령어

- r 간단하게 -a 자세하게

[+] &, bg, fg, %, 그리고 jobs, disown

- 백그라운드 작업을 보이는 명령어
- 명령어 & : 해당 명령어 작업을 백그라운드로 실행시킴
- % : (최근) 작업번호를 보임
- bg : 포그라운드 작업을 백그라운드로 보냄
- fg %job_id : 해당 백그라운드 작업(job_id)을 포그라운드로 불러 올림
- jobs : 모든 백그라운드 작업을 보임(여기서 jobs –p 하면 모든 백그라운드 잡의 PID를 보이고, jobs –r 하면 백그라운드 잡만 보이며, jobs –s 하면 일시 정지된(Suspend) 잡을 보이고, jobs 2 하면 2번 잡만 보인다)  
- notify %job_num : 해당 백그라운드 작업(job_num)이 끝나면 알림 
- []+ / []- : []+는 fg나 bg 명령어에 의해 현재 실행되고 있는 디폴트 잡이며, 
- []-는 현재 디폴트 잡이 중지되었을 때 새로 실행 될 잡 등의 옵션이 있다.

 

- more /root/inital-setup-ks.cfg 를 사용하면 파일의 내용을 볼 수 있고 뒤에 & 를 추가하면 백그라운드로 불러온다.

 

 

 

 

[+] who, w, users, last, lastb, whoami와 finger, id  명령어

 

- 시스템 사용자에 관한 정보 

- wtmp는 /var/log/wtmp에 있고 last 명령어의 결과를 저장하는데 로그기록으로 시간별 이벤트와 로그인한 호스트의 IP와 시간, 그리고 리부팅 날짜 등이 들어 있다. 여러 로그인 정보를 보인다. ->utmp의 history 기능

- btmp는 /var/log/btmp에 있으며 lastb 명령어의 결과를 저장하는데 실패한 로그인 정보를 보인다.

- utmp /var/run/utmp에 있고 w, who, finger 명령어의 결과를 저장한다. 성공한 로 그인 정보를 보인다.

  cat /var/run/utmp 명령을 통해 확인하면, 글자가 깨지는 것을 확인할 수 있다. 이럴 때에는strings 사용하여 제대로 확인

cat으로 출력시 깨져서 보이는 것을 볼 수 있다.

- strings /var/run/utmp

[+] 유저 정보 쉘 스크립트 작성

- vi logs.sh 스크립트 작성

- chomd +x logs.sh 실행 권한 주기

- bash logs.sh 실행하기

- tori에 대한 정보를 확인하기

작성된 스크립트를 확인 할 수 있다.

[+]데몬

- 서버 : 서비스를 제공하는 머신

- 클라이언트 : 서비스를 요청하는 머신

 

Linux 서버는 여러 서비스를 실행하고 있으므로 클라이언트 머신에서 다양한 서버 서비스에 접속해서 작업할 수 있다. 서버는 서비스(Web, FTP, VNC, Database, Proxy, Mail, Name, DNS, DHCP, ...)를 데몬(daemon) 형태로 실행시켜둔다.


  보통 다음 단계로 서비스를 수행한다. 예를 들어서 SSHD 데몬이라면 
① (필요하면) 해당 프로그램을 설치하고
② 해당 서비스의 구성 설정파일(/etc/ssh/sshd_conf)이 있으면 상황에 맞게 변경해주고 
③ system-config-firewall 해서 방화벽에서 해당 서비스 포트 22를 열어두고
=>CentOS 7에서는 firewall-config  
④ setenforce 0 해서 SELinux 설정을 permissive로 해두고, getenforce로 확인하고, 
⑤ service sshd (re)start식으로 해당 서비스 데몬을 (재)실행시킨 뒤
=>CentOS 7에서는 systermctl start sshd ; systemctl enable sshd
⑥ netstat –nltp |grep 22 해서 해당 서비스 포트가 듣고 있는지 보고 
⑦ (필요하면) chkconfig sshd --level 35 on식으로 실행 레벨을 정해주고
⑧ 이제 클라이언트들을 해당 서비스로 접속시켜서 서비스를 이용하게 한다. 

서비스 실행은 service network restart/start/stop/status 식인데
CentOS 7에서는 systemctl start network나  
리커시에서는 /etc/(rc.d/)init.d/network start식으로 해주어도 된다. 

 

[+]리소스 제한하기(자원 관리)

cat /etc/security/limits.conf

Comments