기록/Beyond SW

[Beyond SW / 1, 2일차 내용 복습] Linux의 권한 관리와 기본 명령어 정리

clean01 2024. 5. 14. 19:18

사용자와 그룹, 권한 관리

  • 리눅스에서는 사용자를 여러 그룹으로 나누어 관리합니다.
  • 권한 관리를 통해서 특정 사용자나 그룹이 파일이나 디렉토리에 접근할 수 있는 권한을 지정합니다.

root 사용자와 sudo 명령어

  • 여러 사용자 중, 모든 권한이 있는 최상단에 있는 사용자를 root라고 합니다.

root 사용자로 변경하는 명령어. (su는 switch user라는 의미입니다.)
root 계정의 비밀번호를 모르면 사용할 수 없음

su -
  • 시스템 전체 보안에 영향을 미칠 수 있는 명령어는 root가 아닌 일반 사용자는 사용할 수 없습니다.
    • ex) root가 아닌 일반 사용자는 다른 user를 추가할 수가 없습니다.
    • 하지만 root 계정의 비밀번호를 모르면 root 계정으로 전환할 수도 없습니다. :(
    • 따라서 일반 사용자는 sudo라는 명령어를 통해서 root 계정의 권한을 빌려 특정 명령들을 실행할 수 있습니다.
    • sudo 명령어를 쓸 때, 시스템이 비밀번호를 요구한다면, 현재 계정의 비밀번호를 입력하면 됩니다.
    • /etc/sudoers 파일에 sudo를 쓸 수 있는 사용자와 그 명령어가 따로 정의되어 있습니다. (즉, 아무 사용자나 root 권한을 빌릴 수는 없습니다.)

리눅스의 권한 관리

  • 리눅스는 3파트로 나누어서 파일 또는 디렉토리의 권한을 관리하고 있습니다.
    • 소유자
    • 그룹
    • 그 외 사용자
    터미널이 ls -al 명령어를 입력하면 좌측에서 해당 파일 or 디렉토리의 접근 권한이 어떻게 되어있는지 확인 가능합니다.
    하나를 예시로 보면

를 의미하는데, 각각의 파트는 r, w, x로 이뤄져있고, 3개의 비트로 각각 r, w, x 권한을 표시합니다.

  • r: 읽기 권한. r 권한만 있을 시 숫자 4 (100(binary))
  • w: 쓰기 권한. w 권한만 있을 시 숫자 2 (010(binary))
  • x: 실행 권한. x 권한만 있을 시 숫자 1(001(binary))

예를 들어 모든 권한을 가지고 있다면 숫자 7로 표현합니다. (111(binary)
파일에 대한 권한은 소유자 권한 숫자, 그룹 권한 숫자, 그외 사용자 권한 숫자를 붙여서 3자리 수로 표현합니다.
ex) 764 -> 소유자는 rwx, 그룹은 rw, 그외 사용자는 r 권한을 가짐을 의미

권한 관련 명령어

  • chmod [권한] [파일이름]
    • 아주 많이 쓰이는 중요한 명령어입니다.
      • ex) chmod 764 test.sh
      • ex) chmod u+x test.txt: 소유자에게 실행 권한 추가
      • ex) chmod g-w test.txt: 그룹에게 쓰기 권한 뺏기
      • ex) chmod o=r test.txt: 그 외 사용자에게 읽기 권한만 주기
  • chown [소유자]:[소유그룹] [파일명]
    • 특정 파일의 소유자와 소유 그룹을 새롭게 부여합니다.
    • ex) chmod user2:user2 test.sh
  • su [유저이름]: 현재 유저 전환

자주 사용하는 리눅스 명령어

디렉토리 관련

  • pwd: 현재 위치 경로 출력
  • mkdir: 새로운 디렉토리 생성
  • ls: 현재 디렉토리에 있는 파일 리스트 출력
    • ls -l: 자세히 출력
    • ls -al: 숨김 파일까지 자세히 출력
  • cd: 디렉토리 이동(change directory). 절대경로, 상대경로로 디렉토리를 이동할 수 있습니다.
  • history: 지금까지 실행한 커맨드 조회 회사의 중요한 파일 rm -f로 날려버리고 안했다고 거짓말 치면 안되는 이유

파일 관련

  • rm [파일 이름] : 파일 또는 디렉토리 삭제
    • rm -f: 강제 삭제(지울건지 되묻지 않음)
    • rm -r: 디렉토리 하위에 있는 모든 것을 재귀적으로 삭제
  • cp [src] [dest] : 파일, 디렉토리를 복사
    • cp -r: 디렉토리 하위의 것들을 모두 재귀적으로 복사
  • mv [src] [dest]: 파일, 디렉토리를 이동. 이름 바꾸기, 잘라내기 시에 사용
  • touch [파일 이름] : 빈 파일 생성
  • cat [파일 이름]: 파일 전체보기
  • head, tail: 파일의 위, 아래에서 10행까지 보기

찾기, 검색과 관련한 명령어

grep

  • 파일 내에서 특정 패턴이나 문자열을 검색합니다.
grep [옵션] [패턴] [파일명]
  • -r 옵션: 디렉토리 내 모든 파일에서 검색
  • -i 옵션: 대소문자 구분 안함
  • -n 옵션: 라인 수(어느 라인에 위치해있는지) 출력

ex)
현재 디렉토리에서 하위에 있는 모든 파일(하위 디렉토리도 포함) 내용 중, "hello"가 포함된 파일의 부분과 그 라인 수를 출력하기

grep -rni "hello"

grep이 유용하게 쓰이는 것은 '|'와 같이 쓰일 때입니다.
'|'는 왼쪽 커맨드를 실행한 결과를 오른쪽으로 넘기고, 그 안에서 오른쪽 커맨드를 실행한 결과를 출력하도록 합니다.
아래 예시는 현재 실행 중인 모든 프로세스 중에서, 이름에 "nginx"라는 단어가 포함된 프로세스 목록을 찾는 명령어입니다.
ex)

ps -ef | grep "nginx"

find

  • 파일이나 디렉토리를 검색하여 위치를 출력합니다.
find [경로] [옵션] [행동]
  • name 옵션: 파일명으로 검색
  • f, -d 옵션: 파일 타입으로 검색 (파일 또는 디렉토리)
  • exec, , {}:
    • exec: find로 찾은 결과에 대해 실행 명령
    • : exec의 종료 지점
    • {}: find로 찾은 대상이 담기는 곳

ex) 현재 경로에서 이름이 ".sh"로 끝나는 파일 찾기

  find . -name "*.sh"

ex) 현재 경로에서 이름이 ".sh"로 끝나는 파일 중에, 이름에 "hello"가 들어가는 파일 찾기

  find . -name "*.sh" | grep "hello"

ex) 현재 경로에서 이름이 ".sh"로 끝나는 파일들 중, 그 파일의 내용 중 "hello"가 포함되어있다면 그 부분을 라인수와 함께 출력

  find . -name "*.sh" | xargs grep -n "hello"

프로세스 관련 명령어

  • ps -ef: 실행 중인 모든 프로세스 출력
    • e 옵션: 모든 프로세스
    • f 옵션: full format
  • kill -9 [프로세스 아이디]: 프로세스 강제 종료
    • -9 옵션: 강제 종료
    • -15 옵션: 정상 종료

네트워크 관련

nslookup

특정 도메인의 IP 주소 매핑을 조회할 때 사용.
즉, 도메인을 던져주고 이 도메인의 퍼블릭 아이피가 뭐냐를 묻는 것입니다.

nslookup naver.com

ifconfig

IP 정보 등 네트워크의 설정 정보를 출력합니다.

ping [호스트네임 또는 퍼블릭 아이피]

네트워크 연결상태를 확인할 때 사용하지만, 많은 서비스가 보안상의 문제로 막아두고 있습니다.

nc -zv (netcat) 또는 telnet

nc -zv [도메인 또는 아이피] [포트번호]

위와 같은 형식으로 사용하며, 특정 아이피의 특정 포트까지 열려있는지를 확인합니다.

ex)

nc -zv naver.com 443

ssh

원격 호스트와의 터미널 세션을 제공합니다. (=다른 호스트에 원격 접속)

[유저이름]@[호스트 네임 또는 퍼블릭 아이피]

scp

원격으로 파일을 전송할 수 있는 명령어입니다.

scp [source] [destination]

Beyond SW에서 배운 내용들 중 몰랐거나 활용도가 높을 것 같은 내용을 위주로 복습해보았습니다. :)

Reference

  • Beyond SW 7기 수업 및 수업 자료