Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

나의 IT일지

링크와 쉘 본문

정보보안

링크와 쉘

세레프 2023. 6. 20. 22:43

링크

  리눅스에선 파일과 디렉토리는 inode를 통해 관리된다. inode현재 사용중인 파일 정보를 유지하는 구조체로, 파일이나 디렉토리에 접근하는 경우, 해당 파일/디렉토리의 inode를 바탕으로 파일을 참조한다.

  • inode 구성
    • ls -il [디렉토리 경로] : 해당 디렉토리에 있는 파일 /디렉토리의 inode number를 포함한 inode를 출력 
    • [inode number] [유형] [허가권] [링크 수] [UID] [GID] [용량] [생성 날짜] [생성 시간] [파일/디렉토리명] 
      1. inode number : 파일 / 디렉토리 고유번호
      2. 유형 : 해당 데이터의 타입 ( - : 파일, d : 디렉토리, l : 심볼릭 링크 파일, b : 장치파일)
      3. 허가권 : 해당 파일 / 디렉토리에 적용시킬 수 있는 권한 (r : 읽기, w : 쓰기, x : 실행(파일) / 접근(디렉토리))
      4. 링크 수 : 해당 inode를 사용하는 파일의 수
      5. UID, GID : 해당 파일 / 디렉토리를 가지고 있는 계정, 그룹

 

  데이터에는 고유번호인 inode Number가 부여되며, inode Number를 통해 파일과 디렉토리가 관리된다. 그리고 inode Number를 통해 파일 링크를 할 수 있는데, 원본 파일를 지정하는 포인터를 생성하는 심볼릭 링크같은 inode Number를 지정하는 파일을 생성하는 하드 링크가 있다. 

  • 하드링크
    • 같은 inode를 공유하는 링크 방식  
      • ln [원본 파일경로 ] [링크 파일 경로] : 원본 파일과 하드링크된 링크파일 생성
    • 파일만 링크가 가능하며, 원본 파일 삭제를 하더라도 해당 하드 링크 파일의 데이터는 보존된다. 
    • 원본 파일과 링크 파일의 inode가 동일해기에, 링크 파일 권한 변경시 원본 파일 권한과 링크 파일 권한이 변경된다.
    • 같은 inode를 사용하기에 링크 수가 1 추가된다.
  • 심볼릭 링크
    • 서로 다른 inode를 사용하는 링크 방식
      • ln -s [원본 파일경로 ] [링크 파일 경로] : 원본 파일과 심볼릭 링크된 링크파일 생성
    • 파일 / 디렉토리 링크가 가능하며, 원본파일이 삭제되는 경우 심볼릭 링크 파일의 데이터는 삭제된다. 
    • 원본 파일과 링크파일의 inode가 다르며, 링크 파일 권한 변경시 원본 파일 권한이 변경된다.
    • 심볼릭 링크 파일이기에 유형을 " l "이 되며, 권한은 777이 된다.

 

 이란 사용자가 kernel과 의사소통할 수 있도록 연결해 주는 명령어 도구로,  사용자의 명령어를 OS가 인지 할 수 있도록 번역한다. 그래서 OS에 진입할 때에는 쉘을 통해 로그인 정보를 kernel에게 전달하게 되고 해당 kernel에서 로그인 정보를 비교해서 로그인의 유무를 판단한다.  이때,  사용자마다 사용하는 쉘은 /etc/passwd 파일을 통해 확인 할 수 있다. 

  • 쉘 목록 (/etc/shells 파일과 chsh -l 명령어를 통해 확인이 가능)
    • /bin/sh : 복구쉘(커널쉘) 본 쉘 → 가장 기본적인 기능만 있는 쉘
    • /bin/ksh : unix 기본 쉘
    • /bin/bash : linux : 전용 응용 쉘 ( ksh+sh ) → 리차드스톨만 발명
    • /bin/dash : 데비안전용 쉘
    • /bin/csh : c프로그램 전용 쉘  개발자들이 주로 사용하며, 컴파일에서 오류가 적음
    • /bin/tcsh : csh확장 쉘 
    • /sbin/nologin : 시스템 쉘 → 시스템 계정이 로그인 되지 않게 하기 위함
    • /bin/zsh : 칼리 쉘 (bash+ksh+tcsh)

 이때, 쉘 이름을 통해서도 쉘을 변경이 가능하며, 이전 사용했던 쉘의 설정 내용중 전역설정을 제외한 설정내용을 변경한 쉘에서 사용할 수 없다.  추가적으로, chsh 명령어을 통해 영구적으로 변경이 가능하다.

 

쉘 구동 순서

  • csh의 구동순서
    1.  /etc/csh.cshrc : 모든 csh을 대상으로 실행하는 전체 설정 환경 파일
    2. /etc/csh.login  : 로그인을 할때만 실행하는 csh 설정 환경 파일
    3. home/sevas/.cshrc : 해당 계정에만 적용되는 csh 설정 환경 파일
  • bash의 구동 순서
    1. /etc/profile : 쉘을 시작할 때 모든 쉘을 대상으로 실행하는 전체 설정 환경 파일
    2. ~[계정 명]/.bash_profile : 쉘이 시작할 때 계정의 bash 쉘을 대상으로 설정하는 개인 설정 환경파일
    3. ~[계정 명]/.bashrc : 쉘을 적용할 때  계정의 bash 쉘을 대상으로 설정하는 개인 설정 환경파일
    4. /etc/bashrc : 쉘을 적용할 때,  모든 bash 쉘을 대상으로 실행하는 전체 설정 환경 파일

 

시스템 환경 변수

  • echo : 변수 내용 출력
    • echo "변수" : 변수에 저장되어 있는 값 출력
    • echo '변수' : 변수를 출력
  • env : 시스템 환경 변수 확인
  • $ : 변수 호출 (대문자로만 설정 가능)
    • USER : 해당 계정 변수 호출
    • HOME : 해당 계정 홈디렉토리 변수 호출
    • SHELL : 해당 계정 쉘 변수 호출
    • PWD : 해당 계정이 위치한 디렉토리 호출
    • PATH : 명령어를 실행하기 위한 base경로 → 단축 경로 설정
    • PS1 : 1차 명령 프롬프트(쉘이 사용자의 명령을 수령할 수 있다는 표시) 형식 변수 
    • PS2 : 2차 프롬프트 변수
    • DISPLAY :  GUI에서 프로그램 실행 시 출력되는 창 
    • LOGNAME : 로그인 이름
    • HISTFILE  : 히스토리 파일의 절대 경로 
    • HOSTNAME : 시스템의 호스트명 
      • hostname : 시스템의 호스트 명 확인 명령어
        • hostname [변경할 호스트 이름] : 호스트 이름 변경 → 일시적 설정
        • hostnamectl set-hostname [변경할 호스트 이름] : 호스트 이름 변경   영구적 설정
    • LANG : 해당 계정에서 지원되는 언어
    •  MAIL : 도착한 메일이 저장되는 경로
  • 지역변수 : 쉘간 변수 공유 불가능
    • 생성 : 변수 = "값"
    • 확인 : set | grep [변수]
    • 삭제 : unset 변수
  •  전역 변수 : 쉘간 변수 공유 가능
    • 생성 : export 변수 = "값"
    • 확인 : set | grep [변수], export | grep [변수]
    • 삭제 : unset 변수
  • 변수 치환 : 원래 변수를 유지하면서 추가적으로 변수를 설정하는 것
    • 기존 환경 변수 = "값" : 기존 환경 변수에 해당 값으로 변경
      • ex) PATH=$PATH:[경로] → 단축경로에 경로 추가
      • ex) PS1=[내용] : 1차 프롬프트 내용 바꾸기 ( [\u@\h \W]\$ → 프롬프트 기본 내용)
      • ex) PS2=[내용] : 2차 프롬프트 내용 바꾸기
형식  설명 형식 설명
\u 현재 사용자명 표시 \$ 현재 사용자의 권한 표시 (root(#),사용자($))
\h 호스트명 표시 \H 도메인명 표시
\w 프롬프트 현위치 절대경로로 표시 \W 프롬프트 현위치 상대경로 표시
\t 24시간 형태로 표시 \T  12시간 형태로 표시
\d  '요일 월 일' 형태로 날짜 표시 \@ 12시간 형태의 시간에 오전/오후를 추가해서 표시
\s 쉘이름 표시 \\ \를 표시

 


bash의 기능

  • history
    • bash에서 입력 후 실행했던 모든 명령어들을  "/root/.bash_history"에 저장
      • history : 입력한 명령어 출력
      • !! : 가장 최근 명령어 실행 
      • history +[숫자] (==history [숫자]) : 최근 명령어중 숫자의 갯수만큼  출력
      • ![번호] : 번호열 명령 실행
      • ![명령어] : 특정문자가 들어간 가장 최근 명령 실행
      • history -c : history 내용 삭제
      • ^[문자열1]^[문자열2] : 문자열1을 문자열2로 치환
      • !-n : 최근명령어에서 n값을 뺀 번호 명령어
        !?[문자열] : 문자열이 가르키는 최근 명령어

'정보보안' 카테고리의 다른 글

디스크와 파일 시스템  (0) 2023.06.22
NCS)관리적 보안 구축  (0) 2023.06.21
특수 권한과 권한 제어  (0) 2023.06.19
권한 적용  (0) 2023.06.16
리눅스 계정과 권한  (0) 2023.06.15
Comments