데이터베이스 연구실.log

파일 권한과 기본 권한

권한 문자열 읽기, 파일과 디렉터리의 rwx 차이, 기호, 숫자 방식 chmod, 보안 점검과 표준 권한 맞추기, umask와 야간 백업 스크립트 장애 진단

chmodumaskrwxfind -permchmod --reference

#핵심 요약

ls -l의 맨 앞 10자리는 종류 1자리와 소유자, 그룹, 기타 사용자 권한 3자리씩임

파일의 x는 실행, 디렉터리의 x는 들어가서 안의 파일에 접근하는 권한이라 디렉터리에 x가 없으면 파일 권한이 맞아도 읽지 못함

chmod u+x처럼 기호 방식은 필요한 권한만 더하거나 빼고, chmod 640처럼 숫자 방식은 전체를 정확히 고정함

새 파일의 기본 권한은 umask로 정해지며 Oracle 실무에는 027(파일 640, 디렉터리 750)이 자주 권장됨

#개념과 동작 원리

자리 파일에서 디렉터리에서
r (4) 내용 읽기 안의 이름 목록 보기
w (2) 내용 고치기 안에 만들기, 지우기, 이름 바꾸기
x (1) 실행 들어가기(cd), 안의 파일에 접근
umask 새 파일 새 디렉터리 성격
0002 664 rw-rw-r-- 775 그룹 공동 작업
0022 644 rw-r--r-- 755 일반적인 서버 표준
0027 640 rw-r----- 750 Oracle 실무 권장
0077 600 rw------- 700 개인 전용

새 파일은 666, 새 디렉터리는 777에서 umask 자리를 빼서 정해지므로 umask로는 파일에 실행 권한이 붙지 않음

파일 소유자, 그룹 변경은 OS 사용자와 소유권에서 다룸

#필수 명령어 또는 SQL

#실행이 거부될 때 (소유자 x 추가)

Linux Bash (~/dba_ops)객체 또는 설정을 변경함
./script/rman_full.sh
ls -l script/rman_full.sh
chmod u+x script/rman_full.sh
./script/rman_full.sh

결과 해석:

-rw-r--r--(644)는 소유자에게 x가 없어 Permission denied가 남
u+x로 소유자 실행 권한만 더하면 다른 권한은 그대로임

chmod +x처럼 대상을 빼면 소유자, 그룹, 기타 모두에 x가 붙으므로 필요한 대상만 지정함

#파일은 멀쩡한데 읽지 못할 때 (디렉터리 x)

Linux Bash (~/dba_ops)객체 또는 설정을 변경함
cat secure/note.txt
ls -ld secure
chmod u+x secure
cat secure/note.txt

결과 해석:

secure 디렉터리에서 소유자 x를 뺀 상태라 cat과 cd가 모두 거부됨
디렉터리에 r만 있으면 이름 목록은 보여도 안의 파일을 열 수 없음

디렉터리를 확인할 때는 안의 목록이 아니라 디렉터리 자체를 보는 ls -ld를 씀

#보안 점검과 표준 권한 맞추기

Linux Bash (~/dba_ops)객체 또는 설정을 변경함
find migrate -type f -perm /o=rwx -printf "%M %p\n"
find migrate -type d -exec chmod -c 750 {} \;
ls migrate/conf/*.ora
chmod -c 640 migrate/conf/*.ora
chmod -c 750 migrate/bin/*.sh
find migrate -type f -perm /o=rwx -printf "%M %p\n"

결과 해석:

-perm /o=rwx는 기타 사용자에게 r, w, x 중 하나라도 있는 파일을 찾음
준비 상태에서는 arch_purge.sh, listener.ora, sqlnet.ora가 모두 -rwxrwxrwx로 적발됨

chmod -R 750 migrate처럼 한 번에 바꾸면 설정 파일에도 실행 권한이 붙으므로, 디렉터리 750, .ora 640, .sh 750으로 나눠 맞춤

-c는 실제로 바뀐 항목만 출력하고 -v는 바뀌지 않은 것까지 모두 출력함

마지막에 같은 find로 적발 건수가 0인지 다시 확인함
수업 자료에는 이 과제의 정답이 없어 위 명령은 문제의 힌트(find -type d, -exec, 변경분 출력 옵션)에 맞춘 것임

#기준 파일 따라 하기와 정확히 고정하기

Linux Bash (~/dba_ops)객체 또는 설정을 변경함
ls -l netconf
chmod --reference=netconf/listener.ora netconf/tnsnames.ora
chmod u=rw,g=r,o= netconf/passwd_memo.txt
ls -l netconf

결과 해석:

--reference는 권한 숫자를 계산하지 않고 기준 파일(listener.ora, rw-r-----)과 같게 맞춤

u=rw,g=r,o=는 지금 권한과 관계없이 rw-r-----로 정확히 고정하며, 숫자 방식 chmod 640과 같음

비밀번호 메모 같은 파일은 기타 사용자 권한을 모두 없애고, 가능하면 서버에 두지 않음

#umask 설정과 확인

Linux Bash (oracle)객체 또는 설정을 변경함
umask
echo 'umask 022' >> ~/.bash_profile
source ~/.bash_profile
umask
ls -l $ORACLE_BASE/diag/rdbms/<db_name>/<SID>/trace/alert_<SID>.log
ls -ld $ORACLE_HOME

결과 해석:

로그인할 때마다 umask를 정하려면 .bash_profile에 넣음
수업 과제는 022였으며, 표의 기준대로 Oracle 파일을 그룹, 기타에서 더 막으려면 027을 씀

수업 자료에는 umask 저장 명령과 alert 로그, Oracle 홈 권한 확인 결과가 적혀 있지 않음(확인 불가)
위 ls -l, ls -ld는 그 확인에 쓰는 명령임

umask는 이미 있는 파일의 권한을 바꾸지 않고 이후 새로 만드는 파일에만 적용됨

#야간 백업 스크립트 장애 (권한, 디렉터리, 환경)

Linux Bash (~/night_batch)객체 또는 설정을 변경함
./db_backup.sh
ls -l db_backup.sh
chmod u+x db_backup.sh
./db_backup.sh
ls -ld log
chmod u+x log
./db_backup.sh
cat batch.env
파일 (~/night_batch/batch.env, 고친 뒤)객체 또는 설정을 변경함
export ORACLE_HOME=/u01/app/oracle/product/19c/db_1
export ORACLE_SID=orcl
export PATH=$ORACLE_HOME/bin:$PATH

결과 해석:

리눅스 이수자 평가 6번 문제이며 막히는 곳이 셋임
스크립트에 실행 권한이 없음(644), log 디렉터리에 소유자 x가 없어 로그 파일을 열 수 없음, batch.env가 ORACLE_SID를 export하지 않고 PATH를 $ORACLE_HOME/bin 하나로 덮어씀

PATH=$ORACLE_HOME/bin처럼 덮어쓰면 date, which 같은 기본 명령도 찾지 못하므로 기존 $PATH를 뒤에 이어 붙임

예상값: log/backup.log에 시작 시각, .../db_1/bin/sqlplus 경로, SID=orcl이 찍힘

고칠 때마다 ls -l(파일), ls -ld(디렉터리)로 확인하고 다음 오류로 넘어감

#사용 조건과 주의사항

chmod -R 777은 점검에서 바로 적발되는 설정이며, 문제를 풀려고 임시로 열었다면 반드시 되돌림

Oracle 홈 아래 실행 파일 일부(oradism, extjob 등)는 설치 때 root 소유, 특수 권한으로 설정되므로 홈 전체에 chmod -R이나 chown -R을 하지 않음

SEO_HKabsumveritas@gmail.comBuilt with Claude Code & Codex

마지막 갱신 개인 학습 기록이며 운영 환경 적용 전 공식 문서 확인 필요

두 글자 이상 입력, 위아래 화살표로 이동하고 Enter로 열기