ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [산대특] 리눅스의 명령어의 바다 탐색 2
    [산대특]클라우드기반 빅데이터 활용 정보 시스템보안과정/Linux 2024. 8. 26. 19:41

    0826

    sed 하나만 더 보고 가보겠습니다. 

     

     

    두 명령어는 결과 값이 같당



    소유권(ownership)과 허가권(permission)

    Linux 시스템에 있는 모든 파일과 디렉터리에는 엑세스할 수 있는

    사용자를 지정하는 소유권과 엑세스해서 작업할 수 있는 범위를 지정하는 허가권이 있다. 

     

    소유권

    디폴트로 해당 파일과 디렉터리를 생성한 사용자의 소유로 계정이름이나 UID 로 표시된다.

    <- UID(User ID), GID(Group ID)

     

    요기도 추가

    (inode 다른 파일과 몇개의 관계를 같고 있는가) 

     

    허가권

    rwxr-xr-x식인데 변경할 때에는 ‘chmod 허가권_지정’ 을 사용하고 , -R 옵션은 하위 디렉터리까지 적용이다. 

    파일 생성시 디폴트 허가권은 666, 디렉터리는 777이다. /etc/bashrc 를 보면 umask 는 022로 되어 있어서

    666  - 022 = 644, 777 - 022  = 755 가 된다.

    따라서 /etc/bashrc 에서 umask 값을 변경하면 이후에 생성되는 파일/디렉터리의 허가권이 변경된다. 

      

    허가권 변경은 (두가지방법)

    1) 숫자 : r(4), w(2), x(1) =>  7, 6, 5, 4, 3, 2, 1  

    => chmod 7(user)7(group)7(other)[rwxrwxrwx] , chmod 644[rw-r--r–], chmod 751[rwxr-x--x] ,…

     

    2) 문자 : +/- 를 사용하여 u+r-x, g-w, o-w+x 

    => chmod u+r-x, g-w, … <= a 는 all, a+x (user, group, other 다 준다 == +x 만해도됨)



    [root@centos7-10-1 centos]# nano /etc/bashrc

    요부분을 근거로 만들어진다.

     

    [root@centos7-10-1 centos]# ls -dl sample1/

    drwxr-xr-x. 2 root root 6 Aug 26 09:20 sample1/

     

    755 로 되어 있다. 

     

    파일을 열지 않고, sed 로 고쳐보겠다. 

     

    -i 저장

    [root@centos7-10-1 centos]# sed -i '73s/022/020/' /etc/bashrc 

     

    잘되었는지 확인!

     

    [root@centos7-10-1 centos]# source /etc/bashrc 

    적용을 안했다! 적용을 해준다.

     

    잘 나온다. 

     

    이렇게 기본값을 바꿔줄 수 있다. 

     

    [root@centos7-10-1 centos]# touch smaple1.txt

    [root@centos7-10-1 centos]# ls -l smaple1.txt

    -rw-r--rw-. 1 root root 0 Aug 26 09:25 smaple1.txt

     

    원상복귀

    [root@centos7-10-1 centos]# sed -i '73s/020/022/' /etc/bashrc 

    [root@centos7-10-1 centos]# source /etc/bashrc 

    [root@centos7-10-1 centos]# sed -n '70,75p' /etc/bashrc 

        if [ $UID -gt 199 ] && [ "`/usr/bin/id -gn`" = "`/usr/bin/id -un`" ]; then

           umask 002

        else

           umask 022

        fi



    이번엔 

    요거 변경해보겠다.

    [root@centos7-10-1 centos]# ls -l smaple1.txt 

    -rw-r--rw-. 1 root root 0 Aug 26 09:25 smaple1.txt

    [root@centos7-10-1 centos]# ### 646

     

    a 는 all

    [root@centos7-10-1 centos]# chmod u-w+x,g+x,o-w+x smaple1.txt 

    [root@centos7-10-1 centos]# ls -l smaple1.txt 

    -r-xr-xr-x. 1 root root 0 Aug 26 09:25 smaple1.txt

     

    555 로 바꿨다. 

     

    [root@centos7-10-1 centos]# chmod +w smaple1.txt 

    한꺼번에 다 추가.

    [root@centos7-10-1 centos]# ls -l smaple1.txt 

    -rwxr-xr-x. 1 root root 0 Aug 26 09:25 smaple1.txt

     

    [root@centos7-10-1 centos]# ls -l smaple1.txt 

    -r-xr-xr-x. 1 root root 0 Aug 26 09:25 smaple1.txt

     

    [root@centos7-10-1 centos]# chmod 751 smaple1.txt 

    [root@centos7-10-1 centos]# ls -l smaple1.txt 

    -rwxr-x--x. 1 root root 0 Aug 26 09:25 smaple1.txt

     

    742 문자로 바꾸기!

    [root@centos7-10-1 centos]# chmod g-x,o+w-x smaple1.txt 

    [root@centos7-10-1 centos]# ls -l smaple1.txt 

    -rwxr---w-. 1 root root 0 Aug 26 09:25 smaple1.txt




      소유권

    소유권은 작업하기 위해서 사용자 A가 만든 a 파일/디렉터리를 사용자 B로 소유권을 변경시켜서

    B가 a 파일/디렉터리로 작업하게 하거나, 그룹을 변경해서 해당 그룹에 있는

    여러 사용자들이 a 파일/디렉터리로 작업하게 해주는 경우가 많다.

    소유권 변경은 보안과 관련되어 있으므로 root가 해주어야 한다.

    R은 하위 디렉터리까지 모두 변경 옵션만 알고 있으면 된다. 

     

      소유권 변경은 

    사용자 A의 소유권으로 되어 있는 a 파일/디렉터리를 다른 사용자 B에게 줄 때

    a. 'B:B'(OR 'B.B') a 하면 

    => a 파일/디렉터리의 소유자와 그룹이 모두 B가 된다. 

    => 'B:'(OR 'B.') a 해도 a 파일/디렉터리의 소유자와 그룹이 모두 B로 변경된다. 

     

    b. ':B'(OR '.B') a 하면 

    => a 파일/디렉터리의 그룹만 B로 변경된다. 

     

    c. 'B' a 하면 

    => a 파일/디렉터리의 소유자만 B로 변경된다 (이 경우 'B:' a 하면 안 된다). 



    소유권 실습

    (선생님은 디폴트를 안 바꿔서 이렇게 나옴)

     

    권한은 루트만 바꿀 수 있다. 

     

    루트 비번 입력하면 OK

     

     

    앞쪽에 하나만 하면 전부 paul 로 변경된다. 



      참고로 통신에서 동기식/비동기식이라는 용어가 자주 나오는데 

    ◾ 동기식(synchronous)은 송신자가 동의한 시간 동안만 데이터를 전송하는 방식으로

    별도로 송수신자 양측이 클럭(clock)으로 동기신호를 맞추어야한다.

    문자나 비트단위로 전송하며, 정확한 고속 데이터 전송이 가능하지만 사용 장비가 고가이다. 

     

    ◾ 비동기식(Asynchronous)은 필요할 때마다 그때그때 데이터를 전송하는 방식으로

    송수신자가 데이터 송수신을 동의할 필요가 없는 방식이다.

    송신자가 전송 데이터 안에 전송 시작(start)과 전송 종료(stop) 비트를 넣어서 송신을 알린다.

    문자단위로 저속으로 전송하기 때문에 사용 장비가 저가이며, 임의로 데이터를 송수신할 때 편리해서

    특정 송수신을 제외하고 대부분 통신에서는 이 비동기식 송수신 방법을 사용한다.   

     

      mknod -b/-c, … 해서 임의의 데이터 타입을 지정해서 파일을 생성할 수 있다. 

    - file
    d directory(folder)
    l link
    b block device(hdd, sha, sr0)
    c character(문자열)
    p named pipe
    s socket 등이 있는 것을 볼 수 있다. 

     



    실습 

    블락 디바이스는 b가 붙어있다.

    c 를 붙여서 c가 붙었다. 문자 속성

     

    소프트링크는 l 이 붙어있다. 

     

     

     

      (명명된) 파이프 파일(nabed pipe)

      일반적인 Bash Shell 은 동일한 쉘

    (GUI에서 tty 해서 보면 /dev/pts/0 으로 보이고,   CLI 에서 tty 하면 /dev/tty0 으로 보임)

    내에서 작동되는 프로세스들을 처리하므로 

    cat /etc/passwd | tail -3 과 같은 명령어를 pipe 로 수행하면

    | 앞의 cat~ 명령어와 | 뒤의 tail ~ 명령어가 동일한 쉘 안에 있으므로

    나중 프로세스인 두 번째 명령어의 실행 결과만 콘솔에서 나오게 된다. 

    | 앞의 cat ~ 명령어 부분은 메모리에 저장되어져 있다.

    이 메모리에 들어있는 정보를 다른 콘솔에서 보게 하는 방식이 명명된 파이프이다. 

     

      따라서 Named pipe는 서로 다른 쉘(콘솔을 두 개 열어두면 /dev/pts/0과 /dev/pts/1이 됨)끼리

    프로세스가 연결되게 한다.

    cat /etc/passwd | tail –3(예로써 보인 것일 뿐이다!!)과 같은 명령어를 수행하면

    cat 명령어를 수행한 쉘(/dev/pts/0)에서의 결과가 tail 명령어를 실행하는 쉘(/dev/pts/1)로 전해져서

    쉘 간의 정보연결이 가능하다.

    이들 과정은 표준입력(0> &), 표준출력(1> &), 그리고 표준에러(2> &)와 관련이 있다.



    pipe 실습

    명명된 파이프

     

    root 부터 찾아라 타입은 p 이고 오류가 있다면 표시 노노해




    콘솔을 두개 열고 해보겠다. 왼쪽의 콘솔 작업 결과가 오른쪽 콘솔로 넘어가게 실습

     

    파이프 파일 생성

    # mkfifo my-pipe

    현재 명령 대기 



    오른쪽 콘솔에서 

    하면 이것은 명명된 파이프여서 

    이렇게 왼쪽에서 보인다. 




    새로운 실습

     

    두번째 콘솔로 간다. (오른쪽)

     

    줄이 있을 때까지 == while

     

    왼쪽에서 만든것으로 오른쪽에서 만든것에서 받아서 명령어 실행

     

    왼쪽에서 # bash send.sh

     

    오른쪽에선 

    해주면 왼쪽 명령어도 끝나고 오른쪽에도 결과가 나온다. 



    표준 출력. 왼쪽에서 친 명령어가 오른쪽에서 나온다. 

     

    하면 외부?로 노출되지 않는다. 

     

    왜 읽으려고 했는데 보이지 않는가? 서버가 딱 잡고 있어서 그렇다. 

    w.gpt

    스크립트는 named_pipe를 사용하여 메시지를 전송하려고 하지만,

    마지막 cat 명령어를 사용했을 때 내용이 보이지 않는 이유는 파이프의 특성 때문입니다.

     

    파이프는 기본적으로 *생산자(Producer)*와 *소비자(Consumer)*가 동시에 있어야 제대로 작동합니다.

    cat /tmp/named_pipe 명령어는 파이프의 내용을 읽는 소비자 역할을 하지만,

    생산자가 아직 데이터를 쓰지 않았기 때문에 파이프에 데이터가 없습니다.

    따라서 cat 명령어는 아무 내용도 출력하지 않고 대기 상태에 있을 수 있습니다.

     

    또한, cat 명령어는 파이프에 데이터가 들어올 때까지 기다리게 되는데,

    이 상황에서 생산자가 데이터를 보내지 않으면 아무것도 출력되지 않습니다.

    만약 send.sh 스크립트를 다시 실행하여 데이터를 파이프에 쓰고,

    동시에 cat을 실행해 보시면 데이터를 볼 수 있을 것입니다.

     

     

     



    ls 한 결과를 OUT 변수에 저장해라

    하면 중간에 

    이게 임시 파일이다. 아직 마무리 되지 않는.

    요렇게 보인다. 

     

    물론 시간이 지나면 완료된다. 

    간혹 파일_명이 tmp.4waHFxLx6o 식으로 보일 수 있는데, 이는 임시파일로 일정 시간이 지나면 없어진다. 
    4waHFxLx6o 부분은 64-encoder(부호화) 된 형태이다. 

     

     

      편집기

    vi, vim, gvim / nano / gedit / leaflet / emacs / pico / mc(Midnight Commander) / ed(editor)

     

      vi, vim, gvim에서는 

    :set num  줄번호 붙이기
    /root root 단어가 있는 곳으로 이동
    :11 11줄로 이동
    g/21 현재 줄에서 21줄 아래로 이동하고(22줄)
    맨 아래줄로 간다
    1G 첫줄로 간다
    a OR i  insert 모드로 가서 작업
    Esc 키+:wq(!:강제 저장) 저장 후 나가기 

     

     

    --편집 모드  명령어 역할

    i 현재 문자 앞에 삽입
    I 현재 줄 앞에 삽입
    a 현재 문자 뒤에 삽입
    A 현재 줄 끝에 삽입
    o 현재 줄 아래 새 줄 삽입
    O 현재 줄 위에 새 줄 삽입 

     

    --이동 모드  역할

    h 한 문자 좌측으로 이동
    j 한 줄 아래로 이동
    k 한 줄 위로 이동
    l 한 문자 우측으로 이동
    Ctrl + d/u 반 페이지 아래/위로 이동
    Ctrl + f/b 한 페이지 앞/뒤로 이동
    G/1G 맨 끝줄/첫줄로 이동
    :set nu 줄 번호를 붙임
    g/줄_수 주어진 줄 수만큼 이동

     

     

    --파일 모드 명령어 역할

    ZZ 현재 파일을 저장하고 vi를 종료
    :w, :w! 현재 파일을 강제로 저장
    :wq 현재 파일을 저장하고 vi를 종료
    :q 현재 파일을 저장하지 않고 vi를 종료
    :q!, :wq! 강제로 vi를 종료, 강제로 저장 후 vi 종료
    :n 다음 파일로 이동
    :rew 첫 번째 파일로 이동
    :w 파일_명 현재 파일을 다른 이름으로 저장
    :f 현재 파일의 이름과 위치를 보임
    yy 현재 줄을 클립보드에 저장
    p 클립보드에 저장된 내용을 복사
    줄_번호 yy 여러 줄을 하나의 번호로 클립보드에 저장 
    u 마지막 명령어 취소
    마지막 명령어 재실행

     

     

    --찾기 모드 명령어 역할

    /root 주어진 root 텍스트를 앞에서 찾음
    동일한 텍스트를 앞에서 다시 찾음
    ?root 주어진 root 텍스트를 뒤에서 찾음
    ?  동일한 텍스트를 뒤에서 다시 찾음
    n 마지막 찾기를 다시 실행
    N 마지막 찾기를 반대방향으로 재실행

     

     

      예전 DOS 시절부터 Linux에서 파일 관리용으로 널리 사용되던 TUI 방식의 편집기가 mc이다. 

      ed 도구는 IBM에서 만든 UNIX 용 편집기인데 콘솔에서 사용될 때가 많다.

     

     

     

    편집기 실습

    :set nu 하면 번호가 붙는다. 

     

    vim 도 비슷하다. 

    i 는 내용 편집하겠다. 

    a 는 커서가 오른쪽으로 한가 가면서 편집하겠다.

    : 숫자하면 해당 라인으로 간다. 

    /root 혹은 /sync 하면 해당 단어를 검색하여 보여준다. 

     

    리거시~~해~~

     

    alt 0 하면 저장하고 나올 수 있다. 





    또 하나 리거시한거 

     

     

    2번 누르면 두번째 줄을 보여준다. 

     

     

     

    Linux 쉘의 종류

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

     

     

    환경설정 파일

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

     

     

    사용자 생성 : 

    adduser  => is preferred 

    useradd

    옵션

    g 기본그룹 없이 특정그룹에 포함시킴(특정그룹이 미리 생성되어 있어야 함) 
    G 기본그룹 외에 추가로 특정그룹에 포함시킴
    d 사용자의 홈 디렉터리를 지정해서 사용자를 생성하는데 별도로 지정하지 않으면 ‘/home/계정_명’이 됨
    e 계정 만료일을 함께 지정해서 생성
    s 사용자 쉘 지정해서 생성하는데 별도로 지정하지 않으면 /bin/bash가 됨
    u 사용자 uid를 지정해서 생성, 별도로 지정하지 않으면 1000번부터 순차적으로 지정됨
    N 자신 이름으로 그룹을 만들지 않는 사용자를 생성하는데 users 그룹으로 들어가게 됨
    <= Linux에서는 사용자를 생성하면 보안상 자신의 이름으로 그룹이 생성되고 자동으로 자신의 그룹에 가입된다.
    p 사용자 생성과 동시에 평문장 패스워드도 지정해서 생성함 등이 있다.

     

     

    표준 사용자 설정

    adduser

      사용자를 생성하면서 /etc/passwd 파일에 저장되고, 

    패스워드를 생성하면 Linux 는 디폴트 sha512 해시 알고리즘으로 해시해서 /etc/shadow 파일에 저장한다. 

    (만약에) 해시 알고리즘은 MD5 로 지정하면 해시가 짧아지고 보안에 취약하게 된다. 

    <- md5, sha1, sha2, sha256, sha512 등이 있다. 

    물론 -p 옵션으로 평문장 패스워드도 생성할 수 있다. 

    (중요한 것은 사용자는 /etc/passwd 에 기록되고, 해당 사용자가 가지고 있는 passwd 는 /etc/shadow 파일에 저장된다. )

      사용자 관련으로 중요한 파일/디렉터리로 /etc/passwd /etc/shadow 파일 이외에도 
    1) 어느 사용자를 생성하면 /etc/default/useradd 설정에 따라 디폴트 홈 디렉터리, 쉘 등이 지정되게된다.
    2) 어느 사용자의 패스워드 관련 설정은 /etc/login.defs(definition) 파일에 따라서 지정.
    3) 어느 사용자를 생성할 때 사용자의 홈 디렉터리에 자동으로 생성되는 파일/디렉터리는 등은  

        /etc/skel 디렉터리 설정대로 지정된다. 

     

     

     

    adduser 실습

    보안설정 때문에 저기에 못 만들어 라고 나오는겨 

     

    비번이 해시처리되어있다. 

     

    해시 처리를 MD5 으로 하겠다. 

     

    lee 의 해시와 길이 가 다르다. 

     

    평문장으로 패스워드 kang 을 만듦

     

     





    default useradd

    json 포맷으로 되어 있다. key = value 

    사용자에게 귀찮은 메일을 안오게 하려면 이 파일의 CREATE_MAIL_SPOOL을 no, # 하면 된다. 

     

    로그인에 대한 정의 파일 

    여기서 passwd 의 해시되는 종류를 바꿀 수 있다. 



    전부다 숨김파일. 

     

    /etc/skel 은 보안상 취약하다.

    예를들어 

    악성코드 

    mal 나쁘다란 뜻

    를 만들어

     

    들어가있어. 

    이 이후에 유저를 만들면 모든 유저들은 악성코드도 같이 만들어진다. 

     

     

     


     /etc/skel 디렉터리에 악성코드를 심어두면 이후에 생성되는 사용자는 이 악성코드를 홈 디렉터리에 가지게된다 !!!
    만약 사용자 별로 홈 페이지를 갖게 한다면 역시 여기에 넣어두면 된다. 

     

    /etc/skel 악성코드 실습

    사용자별로 홈페이지 

     

     

    누구나 접근할 수 있다. 

     

    when you setup web server, default home page located at 

    홈페이지는 기본값으로 /var/www/html/index.html 여기에 있다. 

    => 이는 해커도 알고 나도 알고 모두가 안다!  (그래서 변경해주는 것이 좋다)

     

     

     

    **

     웹 서버 서비스 httpd/apache2 를 설치하면

    /etc/httpd/conf 와 /etc/httpd/conf.d 가 보인다.

    메인은 /etc/httpd/conf/httpd.conf 파일인데.

    이 파일을 보면 맨 아래에

     

    # Load config files in the “/etc/httpd/conf.d” directory, if any.

    IncludeOptional conf.d/*.conf 

     

    식으로 /etc/httpd/conf.d/*.conf 파일이 있으면 불러 올려

    메인 /etc/httpd/conf/httpd.conf 파일이 해당 설정된 파일을 실행시킨다. 매우 활용도가 높다.

    물론 메인 설정파일에 다 해주어도 되지만, 메인 설정 파일의 크기가 커지고 응용성이 떨어진다. 



    여기 주석을 없애서 실행되게 하고 

    여긴 주석 추가하고 

     

    이렇게 수정해준다. 

     

    웹서버 실행시켜준다. 

     

    firewall-config 가서 permanent 로 바꾸고 

    http, https 를 켜준다. 

     

    firewall-cmd --reload 적용

     

    이것을 명령어로 한다면 

    열지않고 명령어 처리 가능

     

    setenforce 0 

    seLinux 보안 낮추기 

     

    홈페이지니까 애니바디 들어올 수 있게

     

    BT 가서 확인해본다. 

    root

    비번 toor

    startx 

     

    하고 콘솔 열고 

    센토스 주소 

     

    둘 다 잘 나온다. 

     

     

    /etc/passwd 파일은 

    centos:x:500:500::/home/centos:/bin/bash  로 뵌다. 

     

    centos 사용자_명 
    x /etc/shdow 파일에서 해시된 패스워드를 확인해라
    500 UID
    500 GID
    /home/centos 홈 디렉터리 
    /bin/bash 사용하는 쉘

     

     

      /etc/shadow 파일은

    root:$6$2xLYu/4cqs0btR8M$i8Bf~Rcww1::0:99999:7:::

     

    root 사용자_명
    $6$ sha512 해시라는 뜻
    2xLYu/4cqs0btR8M$i8Bf~Rcww1 SALT
    (해시된 패스워드를 더욱 어렵게 만듦. 매번 변경될 수 있다.) 
    ::0:  만료일까지 남은 일수 
    99999: 패스워드 유효일시 
    7::: 만료 7일전 통보

     

     

      특정 사용자의 로그인을 막는다면 

    /etc/passwd 파일에서 x 대신 * 는 패스워드를 지정하지 않았다는 뜻으로 로그인할 수 없다는 의미이다. 
    /etc/passwd 파일에서 맨 뒤의 쉘 /bin/bash 를 /sbin/nologin(OR /bin/false) 로 변경하면
    해당 사용자는 로그인할 수 없다는 의미이다.
    가장 중요한 것은 /etc/passwd 파일에서 x 대신 비워두면 패스워드 없이 로그인할 수 있다는 의미이다.
    보안상 매우 위험한 일이다!!!
    /etc/shadow 파일에서 해시된 패스워드 대신 !! 를 써주어도 로그인이 불가하다. 

     

      /etc/shadow 파일이 노출되면 해시 부분을 복사해서 웹이나 기타 도구에 입력으로 넣어주면

    해시가 평문장으로  풀려서 위험하다. 

     

    이렇게 /etc/shadow 파일이 중요하므로 pwunconv 해서

    /etc/shadow 파일을 /etc/passwd 파일과 합쳐서 보이지 않게 할 수도 있다. <=이것이 더 위험하다!!! 



    실습

    누구나 읽을 수 있기 때문

     

    nano /etc/passwd

    여기 x 를 지우면 /etc/passwd 가서 비번을 볼 필요가 없다. ==> 자동 로그인

    가장 취약하다. 

     

    맨 아래를 이렇게 sbin/nologin 하면 사용자이지만 쉘을 받지 못한다. 

    이를 살아있는 TOM 도 이렇게 변경하면 사용자이지만 로그인해도 쉘을 받지 못한다. 

     

    저장하고 나가면

     

    비번 입력하는 단계가 사라졌다. ==> 자동 로그인

     

    쉘을 못 받아서 이렇게 뜬다. 

     

     

     

     

    kim 바보 만들기 실습 

    * => 비번이 없다. 

     

    맨 아래로 가면 

    kim 에 있던 해시된 비번을 이렇게 바꾸면 

    이렇게 그냥 들어가진다. 





    /etc/passwd 의 x가 /etc/shadow 가서 확인해야하는데 여기로 와버린 것. 

    매우 위험 dangerous

     

    pwconv 하면 다시 원래대로 된다. 

     

    cat /etc/group 을 치면 

    그룹도 패스워드가 있다. 

     

    그룹 비밀번호를 안걸어서 없음. 

    밑에 가보면 ! 가 있는 애들도 있는데 이것은 의미가 없다는 뜻. 

     

    센토스도 루트 그룹에 넣기

     

    원래는 아랜데, 루트그룹에도 들어가 있다. 



    unlock 도 할 수 있다. 

    -l 하면 잠궈진다. 

    급할 때 쓰면 좋다. 

     

     

     

      사용자 패스워드 변경 등은  => chage 
      여러 사용자 패스워드 동시 변경은 => chpasswd 를 사용
      사용자의 모든 정보를 삭제한다면 => userdel -r paul 
      기존 사용자의 기본 정보를 변경할 때 => usermod 를 사용하는데 

     

    usermod 옵션들

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

     

     

     

    실습

     

     

    Expire 패스워드 만료일. 

    센토스의 패스워드 만료일 전 15일 전 쯤 패스워드 변경 메세지 보낸다.

     

    패스워드 만료일 변경 (맞나.. 제대로 안들못듦)




    예를들어 인턴이 들어왔다. 

    사용자:패스워드 형태로

    해주고 nano 저장 

     

    여러 사용자의 패스워드가 한꺼번에 변경이 된다. 






    사용자 삭제는 

    -r 는 홈디렉터리까지 삭제 

    no tom




    usermod  실습

     

    jerry 의 그룹 추가 

     

     

     

     

      su/sudo 
      su 는 사용자를 전환할 때 사용. 

      centos 사용자에서 su paul 하면 현재 디렉터리를 사용하고 사용자만 paul로 변경.
     

      su - paul 하면 사용자도 paul 로 변경되고 paul 사용자의 홈 디렉터리로 간다.


      su -c ‘관리자_명령어’ 도 가능. root 패스워드 필요


      sudo  는 일반 사용자가 관리자 root 의 작업을 하도록 

      권한위임(privilege delegation)된 사용자가 ‘sudo 관리자_작업_명령어’ 식으로 사용한다.

     


      1) /etc/sudoers 파일에 사용자를 기록하는 방식과  

          <= centos 패스워드 필요, 한 번 하면 5분간  패스워드 없이 sudo 사용 가능 
          <= ‘centos ALL=(ALL) ALL(NOPASSWD)’  
          첫 ALL: any_machine 둘 ALL : any_group 삼 ALL : any-command


      2) %wheel 그룹의 일원이 되게 해주는 방식이 있다. (Ubuntu 에서는 %sudoers) 

          <= usermod -G wheel -a centos 
          => paul ALL=(ALL)  /bin/ls,/bin/df –h,/bin/date,/usr/sbin/useradd 
               kang ALL=(ALL)  NOPASSWD:/sbin/poweroff,PASSWD:/bin/kill

     

     

    su , sudo 실습

    Allow root to run any commands anywhere
    허락 루트에게 실행 아무거나 명령어 어디서든

     

    이렇게 추가하면 centos 도 sudo 명령어 작업이 가능하다. 

     

    저 줄 # 풀면 wheel 그룹 애들 비번없이 접속 가능.  하면 아니아니 아니되오~

     

    저장하고 나온다. 



     

     

    uncle Ban… Ant May..

     

    왜 이번에는 패스워드가 안나오는가? 5분간 패스워드프리

     





    우분투에서는 관리자로 들어갈 때 sudo su 했다. => 시스템 촤이

     

     

    *** Ubuntu 에서는 설치시 root의 패스워드를 지정하지 않았으므로

    ubuntu 사용자에서 su root 한 뒤 패스워드를 입력하지 못하므로 (없으니까) 들어갈 수 없다.

    그 대신 자동으로 ubuntu 사용자 %sudoers 그룹에 들어있다.

    따라서 ubuntu 사용자에서 sudo su 하고 ubuntu 패스워드를 넣으면

    관리자 root 로 가게 된다 !!!! (이것이 우분투에서의 보안?이다)

     

      정리하면 CentOS나 Ubuntu 머신에서 sudo를 일반 사용자가 실행하려면 

    ∎ CentOS나 Ubuntu의 /etc/sudoers 파일에 직접 사용자를 지정해 주거나

    ∎ usermod –G wheel(OR sudo) -a user_name식으로 해서

        CentOS에서 %wheel 그룹의 멤버가 되거나 Ubuntu에서 %sudo 그룹의 멤버가 되면 된다. 



    우분투에 들어가서 실습

    ! => 로그인이 안된다. 

    몬들어간다 이말이야 🐴

     

    이렇게 비번을 설정해주면 이제 로긘이 된다. 

     

     

    우분투는 %sudo 그룹

     

    여기에 추가하면 된다. 

     

     

     

      PAM(Pluggable Authentication Module) 모듈로 su 를 설정해보자

     

      PAM /etc/pam.d 에 있는 모듈별 파일로 인증을 관리하는데

    ls /etc/pam.d/ 해보면 atd, crond, cups, login, passwd, setup, smtp, sshd, su, sudo, … 등의 파일이 있는데 

     

    예를 들어서 /etc/crond 아래의 설정 파일이나 /etc/ssh/sshd_conf 설정 파일에서

    각각 사용자 인증을 설정할 수 있지만, 이 /etc/pam.d/crond 나 /etc/pam.d/sshd 에서

    인증을 설정해주면 /etc/crond 나 /etc/ssh/sshd_conf 의 개별 설정파일에서의 설정보다

    이 /etc/pam.d/의 PAM 에서의 해당 모듈에 대한 설정이 시스템에 우선 적용되므로

    조직의 일관적 보안 증진과 작업 효율 증진, 그리고 설정상 오류를 줄일 수 있다. 

     

    => 간단히 말하면 프로그램 별의 개별 보안설정보다

    /etc/pam.d/ 아래에서 해당 파일을 열고 설정해주면

    이 설정이 개별 설정보다 우선한다. priority (우선순위)

    (고급보안. 그래서 만약 아래걸 설정했는데 신통치 않다. 그럼 여길 확인해보자)



     

     

     

     

    센토스가서 실습

    설정 보기 

    ssh 의 개별 설정 파일 

    PAM 설정을 우선한다. 여기다가 no 하면 약발이 안 먹는다. 



    PAM 의 설정 파일을 봐보겠다. 

    크게 아래파일에 영향을 주는 애가 없당. 



    만약 규제를 해야겠다. 하면

     

    nano 로 /etc/pam.d/su 를 연다. 

    required 의무/요구하다. 가장 쎈 거임. 제일 중요한 끗발 

    근데 # 당해서 현재 아래쪽 설정이 우선이다. 

     

    하지만 주석을 풀면 pam_wheel.so(소스) use_uid 가 가장 상위가 되어 이 설정이 우선이 된다. 

    저기 pam wheel 그룹 안에 있는 사용자만 sudo 권한이 사용 가능하다. 

     

    이런걸 알고 있으면  신통방통 꼬부랑통!



      아무리 paul, centos 가 /etc/sudoers 파일에 기록되고,

    %wheel 그룹의 멤버라고 해도 순수 root 만 수행할 수 있는 명령어가 있다.

    (아무리 생각해도 난 너를…)



    주석 빼고 저장했다. 

     

     

     

     

     

     

    groupadd 그룹 생성

      ‘groupadd 그룹_명’ 식으로 하면 그룹이 생성된다.

      그룹 삭제 - groupdel

      그룹의 삭제는 ‘groupdel 그룹_명’. 그룹이 삭제되면 해당 그룹에 있던 사용자들이 그룹에서 빠지게 된다. 

    ==> 하나의 사용자는 여러 그룹에 들어갈 수 있다 !!!

    Windows 서버에서는 해당 사용자는 각 그룹에서의 권한을 accumulated(축적된) 한 것이 된다. 

    (윈도우즈에서는 그룹권한 관리가 드릅게 중요)

     

      사용자와 그룹에 대한 속성 관리는 finger, id, groups, getent 등으로 한다. 

      시스템에 로그온 한 정보는 w, who, users 등으로 확인한다. 

     

     

    finger 실습

    우분투에서 접속 

    들어간 상태에서 센토스에서 

     



      Linux 시스템에서는 어느 명령어를 실행하면 내부적으로 /etc/nsswitch.conf 파일에

    정의된 엔트리를 데이터베이스와 라이브러리 파일에서 찾아서 해당 명령어를 실행시키는데

    getent는 이런 엔트리를 보이는 명령어이다.

    대부분 엔트리는 /etc/ 아래에 있다.

    'getent 명령어'하면 직접 해당 명령어를 경로를 지정하지 않아도 실행해준다.

     

    getent passwd만 하면 cat /etc/passwd한 것과 같은 결과이다.

     

      그래픽으로 사용자와 그룹을 처리할 수도 있다. 

    yum -y install system-config-users 해서 도구를 설치. 

     

     

     

     

     

    getentry 실습

     

    /etc/passwd 는 파일이다. 파일의 속성을 뵌다. 

     

    == cat /etc/passwd 

    내부적으로 관리하고 있는 체계가 getentry 다 

     

    그래픽 사용자 관리 실습

     

    경고에 yes

     

    마마마마!




    프로세스 확인

    ps 현재 실행되고 있는 프로세스 목록을 보임 
    pstree 프로세스 간 관계를 부모-자식 도형으로 보인다. 부모 프로세스를 죽이면 자식들도 죽는다.
    top 프로세스, 메모리 등의 정보를 보임
    pidof 특정 실행의 프로세스 번호를 보임 
    pgrep/pmap 프로세스가 어느 메모리 주소에서 실행되는지 증을 보임 

     

     

    프로세스 실습

     

    제엔장 스샷 안찍힌다구~~~ 히히 몰랑

     

    ps -aux | grep ssh

     

    ps 의 옵션 

    -e 또는 -A 시스템의 모든 프로세스를 출력합니다.
    예: ps -e 또는 ps -A
    -f 프로세스의 자세한 정보를 출력합니다. 
    UID, PPID(부모 프로세스 ID), 시작 시간 등 추가 정보를 볼 수 있습니다.

    예: ps -f
    -u [사용자 이름] 특정 사용자가 소유한 프로세스를 출력합니다.
    예: ps -u root (root 사용자의 프로세스 출력)
    -p [PID] 특정 PID를 가진 프로세스 정보를 출력합니다.
    예: ps -p 1234 (PID가 1234인 프로세스 정보 출력)
    -T 현재 터미널에서 실행 중인 모든 프로세스를 출력합니다.
    예: ps -T
    -x 터미널에 연결되지 않은 프로세스도 출력합니다.
    예: ps -x
    -o [필드명] 출력 형식을 사용자가 지정한 필드로 커스터마이즈할 수 있습니다. 
    여러 필드를 콤마로 구분하여 지정할 수 있습니다.

    예: ps -o pid, comm, etime (PID, 명령어, 경과 시간 출력)
    -aux 일반적으로 많이 사용하는 옵션 조합으로, 
    모든 사용자와 터미널에 대해 상세한 프로세스 정보를 출력합니다.

    a : 다른 사용자의 프로세스도 포함하여 출력
    u : 프로세스 소유자의 사용자 이름과 시작 시간, CPU 사용률 등의 정보를 추가하여 출력
    x : 터미널에 종속되지 않은 프로세스도 포함하여 출력
    -H 프로세스 트리 형태로 출력하여 프로세스 간의 계층 구조를 파악할 수 있습니다.
    예: ps -H

     

     

연의 취업 도전기.