셸 스 크 립 트 학습 안내서[6](Arnold Robbins&Nelson H.F.Beebe 저)

셸 을 배 워 서 지금까지 사람들 이 흔히 말 하 는 아주 두 번 째 문 제 를 범 하지 않 을 거 라 고 생각 했 는데 결국 이 책 은 마지막 에 10 분 의 2 의 일 을 저 질 렀 습 니 다.늦 은 시간 에 절 개 를 지 키 지 못 했 습 니 다!!테스트 파일 경로 에서 어댑터*와?그리고 또 어떤 정규 같은 것 을 사용 할 수 있 습 니까?결 과 는$HOME 에서 rm.*를 실 행 했 습 니 다.............................................그래,오후 내 내 알 이 아프다!어떤 프로필 도 찾 습 니 다.후세 사람들 에 게 절대 rm 테스트 어댑터 를 사용 하지 말 라 고 경고 합 니 다!언제든지 rm 사용 조심!
제1 4 장 셸 이식 가능 한 의제 와 확장
먼저 통독 할 수 있다이 문장.이식 가능 한 셸 을 잘 쓰 려 면 각종 셸 버 전의 차 이 를 알 아야 할 뿐만 아니 라 환경 변수 에서 필요 한 정 보 를 얻 는 등 프로 그래 밍 기법 도 많이 필요 합 니 다.
제1 5 장 안전 한 셸 스 크 립 트:시작
보안 셸 스 크 립 트 알림:1.현재 디 렉 터 리(점)를 PATH 아래 에 두 지 마 십시오.실행 가능 한 프로그램 은 표준 시스템 디 렉 터 리 아래 에 만 현재 디 렉 터 리 를 PATH 에 넣 을 수 있 을 것 입 니 다.트로이 목마(Trojan Horse)의 문 을 여 는 것 임 에 틀림없다.2.빈 디 렉 터 리 에 보호 설정.$PATH 의 모든 디 렉 터 리 는 소유자 만 쓸 수 있 고 나머지 는 아무 도 쓸 수 없 음 을 확인 합 니 다.샘플 의 이치 도 빈 디 렉 터 리 의 모든 프로그램 에 적용 해 야 한다.3.프로그램 을 쓰기 전에 지우 고 싶 습 니 다.네가 무엇 을 하려 고 하 는 지,어떻게 실행 해 야 하 는 지 를 생각 하 는 데 시간 을 좀 써 라.처음부터 텍스트 편집기 에 쓰 지 마 세 요.오류 와 실패 의 우아 한 처리 도 프로그램 에 설계 되 어야 한다.4.모든 입력 매개 변수 가 유효성 을 검사 해 야 합 니 다.숫자 를 기대한다 면 숫자 이 고 요구 하 는 범위 내 에 있 는 지 확인 하 라.다른 수요 도 이렇게 측정 한다.5.오 류 를 되 돌 릴 수 있 는 모든 명령 에 대해 오류 처리 코드 를 검사 합 니 다.예상 치 못 한 실패 상황 은 문제 가 있 는 강제 실패 로 인해 스 크 립 트 가 부당 한 행동 을 할 수 있 습 니 다.예 를 들 어 NFS 에 디스크 나 문 자 를 위 한 장치 파일 을 불 러 올 때 루트 로 실행 하 더 라 도 명령 이 실 패 했 을 수 있 습 니 다.6.들 어 오 는 환경 변 수 를 믿 지 마 세 요.다음 명령(예 를 들 어 TZ,PATH,IFS 등)에 사 용 될 경우 알려 진 값 으로 검사 하고 다시 설정 하 십시오.어떤 경우 에 도 가장 좋 은 방법 은 자신 이 필요 로 하 는 것 을 명확 하 게 설정 하 는 것 이다.(예 를 들 어 PATH 는 시스템 빈 디 렉 터 리 만 포함 하고 IFS 를 빈 칸 위치 확인 자 와 줄 바 꿈 으로 설정 하 는 것)7.이미 알 고 있 는 곳 부터 시작한다.스 크 립 트 가 시 작 될 때 알 고 있 는 디 렉 터 리 에 정확 한 cd 가 도착 합 니 다.그러면 다음 상대 경로 이름 이 알 고 있 는 위 치 를 가리 킬 수 있 습 니 다.cd 작업 성공 확인:cd app-dir|exit 18,syslog(8)를 사용 하여 감사 추적 을 유지 합 니 다.인용 날짜 와 시간,username 등 을 기록 하고 logger(1)의 사용 매 뉴 얼 을 참조 합 니 다.logger 가 없 으 면 함수 보존 로그 파일 을 만 들 수 있 습 니 다:

logger(){
printf "%s
" "$*" >> /var/adm/logsysfile
}
logger "Run by user " $(id -un) "($USER) at " $(/bin/date)
9.이 입력 을 사용 할 때 반드시 사용자 의 입력 을 참조 합 니 다.예 를 들 어'$1'과'$*'는 심보 가 나 쁜 사용자 의 입력 이 범 위 를 초과 하 는 계산 과 집행 을 방지 할 수 있 습 니 다.10.사용자 입력 에 eval 을 사용 하지 마 십시오.심지어 사용자 의 입력 을 인용 한 후에 도 eval 을 사용 하여 셸 에 게 맡 기지 마 십시오.사용자 가 스 크 립 트 를 읽 으 면 eval 을 사용 하면 이 스 크 립 트 를 쉽게 파괴 할 수 있 습 니 다.11.마스크 전개 결 과 를 참조 합 니 다.빈 칸,분점,역 슬 래 쉬 등 을 파일 이름 에 넣 고 까다 로 운 일 을 시스템 관리자 에 게 맡 길 수 있 습 니 다.관리 하 는 스 크 립 트 가 파일 이름 인 자 를 인용 하지 않 으 면 시스템 에 문제 가 생 길 수 있 습 니 다.12.사용자 의 입력 에 meta 문자 가 있 는 지 확인 합 니 다.eval 이나$(...)의 입력 을 사용 하면$나'와 같은 meta 문자 가 있 는 지 확인 하 십시오.13.코드 를 검사 하고 조심스럽게 읽 으 세 요.이용 가능 한 구멍 과 오류 가 있 는 지 찾 아 라.모든 나 쁜 생각 을 고려 하고 코드 를 조심스럽게 연구 하 며 파괴 하 는 방식 을 찾 아 발견 한 문 제 를 수정 해 보 세 요.14.경쟁 조건(race condition)공격 자가 스 크 립 트 에 있 는 두 명령 사이 에서 임 의 명령 을 수행 할 수 있 는 지 주의 하 세 요.이것 은 안전성 에 해 가 되 지 않 습 니까?만약 그렇다면,당신 의 스 크 립 트 를 다른 방식 으로 처리 하 세 요.15.기호 적 연결 에 대해 의심 을 가진다.chmod 파일 이나 파일 을 편집 할 때 파일 이 실제 파일 인지 확인 합 니 다.관건 적 인 시스템 파일 에 연 결 된 기호 적 연결([-L file]또는[-h file]을 이용 하여 file 이 기호 적 연결 인지 확인 합 니 다.16.다른 사람 을 찾 아 당신 의 절 차 를 다시 검사 하고 문제 가 있 는 지 확인 하 세 요.17.가능 한 한 setgid 를 사용 하고 setuid 를 사용 하지 마 세 요.이 용어 들 은 잠시 후에 토론 할 것 입 니 다.간단하게 setgid 를 사용 하면 손해 범 위 를 한 그룹 으로 제한 할 수 있 습 니 다.18.루트 가 아 닌 새로운 사용 자 를 사용 합 니 다.setuid 를 사용 하여 파일 에 접근 해 야 한다 면 루트 가 아 닌 사용자 가 이 일 을 하고 setuid 를 설정 하 는 것 을 고려 하 십시오.19.가능 한 한 setuid 코드 를 사용 하 는 것 을 제한 합 니 다.가능 한 한 setuid 코드 를 최소 화하 세 요.분 리 된 프로그램 으로 옮 긴 다음 대형 스 크 립 트 에서 필요 할 때 만 참조 합 니 다.어쨌든 스 크 립 트 가 누구 에 게 나 인 용 될 수 있 는 것 처럼 코드 보 호 를 잘 하 세 요.20.안전 셸 의 오 프 닝 멘 트:

IFS=' \t
' #
unset -f unalias # unalias
\unalias -a #unset all aliases and quote unalias so it's not alias-expanded
unset -f command # command
# , getconf 。
#get a reliable path prefix,handling case where getconf is not available.
SYSPATH="$(command -p getconf PATH 2>/dev/null))"
if [[ -z "$SYSPATH" ]];then
SYSPATH="/usr/bin:/bin"
fi
PATH="$SYSPATH:$PATH"
이 코드 는 POSIX 가 아 닌 확장 을 많이 사 용 했 으 니 주의해 야 한다.
이 책 은 마지막 으로 셸 프로그램 을 만 드 는 manual 과 유 닉 스 의 파일 과 파일 시스템 에 대한 소 개 를 해 주 었 다.이로써 이 책 은 통독 이 끝났다.

좋은 웹페이지 즐겨찾기