Linux/리눅스 기초

리눅스 기초 ... 24.09.14 공부 임시저장

cheonjaehacker 2024. 9. 16. 08:01

Vi Text Editor? (windows에서 메모장 편집기)

# vi 

# vi [파일 이름] => 해당 이름을 가진 파일이 있으면 파일 열기.

                          없으면 해당 이름의 새로운 파일 생성 후 열기.

1) 입력 모드 => i 키를 누르면 전환

2) 명령 모드 => 종료, 저장 등 (esc 키로 전환)

:w [파일 이름] ~>파일 저장

:q ~>파일 종료

:wq ~>저장 후 종료

/[텍스트] ~> 해당 텍스트 찾기(enter 누르면 커서가 해당 텍스트 앞으로 감)

      => 해당 텍스트가 여러개일때(소문자 n 다음으로 이동, 대문자 N 이전으로 이동)

:[줄번호] ~> 해당 줄번호로 이동!!       => 에러메세지의 줄번호를 보고 이동할때 주로 쓴다~

 

커서를 특정 줄로 옮긴 후

dd => 해당 줄을 지움

[숫자] + dd => 해당 줄부터 숫자만큼 지움

 

u => 작업 취소! 

커서를 옮긴 후

U => 해당 줄에서 했던 모든 작업 취소!!

 

최소한걸 되돌리고 싶으면~ 

ctrl + r

 

#rm [파일] => 파일 삭제

 

 

 

 

 

 

 

파일 확인

# cat 

# vi /etc/passwd 도 되고 # cat /etc/passwd 도 된다!

하지만 

# cat /bin/ls 는? 파일이 깨져서 나온다. => 바이너리 파일이기 때문.

우리가 읽은 파일은 텍스트(TEXT) 파일. 

특정 데이터로 인코딩된 파일은 깨져서 나옴.

 

#file /bin/ls

ELF => 리눅스의 실행파일 (windows의 exe) 

 

우리가 지금까지 읽은 아스키코드 텍스트 파일.

 

 

# more [파일명]

파일을 위에서부터 읽고 spacebar 키로 넘어감.

 

 

 

 

 

 

 

 

복사하기~

# cp [src(소스)] [dst(목적지)] 

=> 해당 파일(src)을 dst에 복사!!

 

***목적지/[파일이름]을 지정할 수 있다!

 

#mkdir [폴더 이름] => (make directory) 해당 이름으로 폴더 생성!

 

디렉토리 복사하기~

# cp -r [디렉토리명] [목적지] 

-r => 디렉토리 복사~!

 

 

 

 

 

 

 

 

제거하기

#rm [파일] => 파일 제거

 -r => 디렉토리 제거(파일도 가능) 

 -f => 강제 삭제

root 권한이 아닌 일반 계정은 삭제 하시겠습니까? 물어봄

하지만 -f (false) 옵션은 물어보지말고 제거하게 만듬.

rm -rf ==> 무적인 옵션이지만 굉장히 위험한 옵션임.

주의사항*****

===>>> rm -rf / 최상위 디렉토리. 즉 모든 파일을 제거함. (해킹하고 이거 입력하면 서버나 컴퓨터의 파일 다 날림.)

 

 

 

 

 

 

 

 

파일 이동~?

 

복사 / 삭제 == 파일 이동 

# mv [src] [dst] ==> # cp와 매우 비슷하지만 큰 차이점은 mv는 소스파일을 복사 후 제거함. cp는 제거X

cp는 복사한 파일의 이름을 지정할 수 있었다.

mv도 가능!! ==> mv는 이름을 바꿀때도 씀.

# mv [현재 파일] [현재경로에서 바꿀 이름] ==> 현재 경로에서 이름만 바꿀 수 있음~ 즉 파일명 변경할때도 사용.

 

 

 

 

 

 

 

 

 

권한?

root => 컴퓨터는 숫자로 계정 관리.

UID : User ID          /          GID : Group ID

# id ==> 현재 계정 아이디를 보여줌.

 

GID는 여러 사람들 비슷한 권한을 필요로하는 사람들을 그룹으로 묶어서 권한 부여.

 

root => 최고 관리자 권한 == 신(GOD)

 

# useradd [계정 이름] ==> 계정 생성.

# su [계정 이름] ==> 계정 변환.

 

 ******매우 중요.

 "#"은 최고관리자. "$"는 일반 계정을 나타낸다.

exit 하면 원래 계정으로 돌아옴.

 

 

 

 

 

 

 

 

 

 

 

passwd

/etc/passwd ==> 리눅스의 사용자 정보가 들어있음!!

 

# vi /etc/passwd 

:(콜론)으로 정보를 구분.

1. 계정 이름 (ID)

2. 비밀번호 => 옛날에는 비밀번호가 저장되어 있었음. 하지만 etc파일은 누구나 읽을 수 있음.

            => 그래서 비밀번호 파일을 옮겼고 그 위치는 /etc/shadow

3. UID

4. GID

5. 사용자의 별명? 코멘트? (보통 ID를 그대로 적음)

6. 홈 디렉토리

7. 로그인 쉘 => 로그인 했을 때 어떤 쉘을 제공할 것인가?

내가 만든 normaltic 계정은 /bin/sh을 사용중.

==> /usr/bin/nologin => 로그인해서 쓰지 마라. ==> 리눅스에서 사용하는 프로그램들의 로그인 쉘은 이렇게 나옴.

 

 

 

 

 

 

 

 

리눅스의 3가지 권한

rwx

 

r : read , 읽기 권한

 => 파일이면? 파일을 읽을 수 있는지!

 => 디렉토리면? 디렉토리 안에 어떤 파일이 있는지!

 

w: write , 쓰기 권한

 => 파일이면? 파일을 수정할 수 있는지!

 => 디렉토리면? 디렉토리 안에 파일, 디렉토리를 생성할 수 있는지!

 

x : execute , 실행 권한

 => 파일이면? 파일을 실행할 수 있는지!

 => 디렉토리면? 디렉토리에 접근 (cd) 할 수 있는지!

 

-rw- r-- r-- 1 root root

rw- r-- r--    소유자  그룹

1. 소유자 권한 => 소유자는 이 파일을 읽고(r) 수정(w)할 수 있으나 실행X

2. 그룹 권한 => 그룹은 파일을 읽을 수만 있음.

3. 기타 사용자 권한 : 소유자도 아니고, 그룹 멤버도 아닌 사람.

 

kali 계정으로 해당 파일을 들어가니! 

readonly 라서 읽기만 가능~

:q! ==> 느낌표는 강제로 종료하겠다는 뜻.

 

 

 

 

 

 

 

 

 

 

특수 권한

 

1. setuid

 => 그 파일을 실행할 때, 파일의 소유주의 권한으로 실행한다!

 => s가 setuid.

 여기서 x 실행권한은 어떻게?

 rws => s가 소문자면 실행권한O

 rwS => S가 대문자면 실행권한X

즉, 위 파일은 실행권한 있음.

 /usr/bin/passwd => 비밀번호를 변경하는 명령어.

 ==> setuid로 해석하면. 이 명령어를 실행할 때는 실행하는 계정이 누구든지 root(소유주)의 권한으로 실행된다!

 ==> 일반 사용자가 비밀번호를 바꿀순 있어야함.

   ==> 바꿀려면 비밀번호가 저장된 /etc/shadow에 접근할 수 있어야함. 하지만 접근하면? 비밀번호 다 보여지잖아.

     ==> 그래서 이 명령어를 실행할 때는 root, 소유주의 권한으로 실행할 수 있게 만듬!!!(나중에 해킹할때 굉장히 중요)

                                                                       => 굉장히 위험함. 주의해서 설정 => 잘못설정해서 *권한 상승 취약점 생김.

 

2. setgid

 => 그 파일을 실행할 때, 파일의 그룹의 권한으로 실행한다!

 r-s ==. 실행권한O           /          r-S == 실행권한X 

 

3. sticky bit

 => 디렉토리에 설정함.

 => 설정된 디렉토리는 누구나 파일을 생성할 수 있다! (but, 다른사람 파일 삭제X)

   ==> /tmp 요놈이 sticky bit 설정되어 있음.

요놈은 디렉토리고 

rwxrwxrwt

rwt  맨끝에 표시 

rwt == 실행권한O           /            rwT == 실행권한X 

 

 

 

 

 

 

 

 

 

권한 변경 방법~!

# chmod []

 

u(소유자)                                                                             r

g(그룹)                                                + , -                          w                  

o(other 외 다른 사용자들)                                                   x

 

요런 조합으로 명령어 만듬.

Ex) chmod u-r permission_test ==> 소유자의 읽기 권한 제거.

요렇게 other의 읽기 권한, 쓰기 권한을 추가한 모습!

 

* 권한을 숫자로 표현할 수 있다?!

r  w  x

4  2  1 (비트)

 

rwxr--r-- == 744로 표현가능!!(권한 숫자를 더함)

요렇게 숫자로도 권한을 편하게 바꿀 수 있다~! (훨씬 편한듯)

 

특수 권한을 부여할때는

+, - s,t 로 부여하거나

setUID : 4

setGID : 2

sticky bit: 1

 

rwsr--r-- == 4744로 표현가능~!