취코, 취하다 코딩에~
리눅스 정리 본문
가장 큰 계열 3개
debian, slackware, redhat
Desktop - Gnome
Desktop - DKE
sever
server - GUI
SSH를 통해 원격접속을 할거라면 22포트는 열어둘것
SELinux(Ssecurity Enhanced Linux) - www.nsa.gov/selinux
kdump - 시스템 커널 내용을 dump하는거
패키지 설치할거
Customize software selection* 클릭 후
- Development Libraries
- Development Tools
- Legacy software Development
Setup Agent에서 Exit
/root/install.log - 설치한 로그남김
vi /etc/initab - 부팅할 때 실행될 것들
/etc/rc.d/rc.sysint
default path설정
/etc/config/network 실행
/네트워크 설정확인 및 적용
스왑 작동
호스트 네임, 도메인네임 설정
파일시스템 점검
PnP 하드웨어 점검
/proc 파일시스템 마운트
커널 모듈로딩
시스템 시간 설정
...여러가지 잇음
CTRL + ALT + F1
F2 가상콘솔들 실행
putty 사용시 UTF-8변경(변환)
-h : shutdown시 halt실행하게 함
-f : 다음부팅시 파일시스템 검사 안함
-c : 예약종료 취소
-k : 모든 동작 수행 but 시스템 종료는 안함
halt 옵션
-w : 실제종료안하고 /var/log/wtmp에 기록만남김
-d : wtmp에 기록 안남김
-f : 강제종료
런레벨(init)
0 종료모드
1 단일 사용자
2 다중 사용자 텍스트모드(NFS사용 x)
3 다중 사용자 텍스트모드
4 사용안함
5 다중 사용자 그래픽 모드
6 재부팅 모드
명령어정리
useradd
passwd
userdel - r 홈 디렉토리제거
groupadd - g GID설정
- r 0~500번대로 가장큰수로 GID설정
id - uid, gid, group 보여줌
ls - h 소유자, 그룹, UID, GID 번호표시
- s 파일크기 큰순
- c 변경시간에 따라
mkdir - m 권한설정
- p 상위디렉토리까지 한번에 만들기
touch
cp - a 속성, 링크정보 그대로 복사
- p 소유자, 그룹, 권한, 시간정보들이 그대로 복사
- v 복사상태
- R 상위, 하위 다 복사
more - n 행수보여줌
find - name
- user
- perm
- exec 사용할 명령어
- type 디렉토리(d), 파이프(p), 심볼릭(l), 소켓(s), 블록(b), 일반파일(f)
- size
- links 링크갯
- atime 최근 액세스한 파일
- newer 최근 갱신
chmod - R 경로 하위모두 변환(권한)
chown - R 경로 하위모두 변환(소유자)
chgrn(그룹)
gzip bzip
-cvzf -cvjf
-xvzf -xvfg
RPM - U 설치
- h 설치과정 #표시
- ql 설치된 파일보기
- v 메시지출려
보통 -Uvh이렇게 씀
yum check -update 업데이트 가능한 패키지 검색
fsck 디스크 점검 <- /lost + found 디렉토리는 이때 사용한다.
mkfs 디스크 포멧
iptables 방화벽 설정
폴더 설명
bin 일반사용자들을 위한 명령어
boot 부트로더와 부팅을 위한 파일
dev 장치파일
etc 시스템 or 프로그램 환경설정
kb 라이브러리, 커널모듈
media 이동식 마운트 되는곳
mnt 파일시스템 임시로 마운트 되는곳
opt 응용프로그램 설치
sbin 시스템 관리 명령어
srv 서비스 제공 파일
tmp 임시 저장소
usr 응용프로그램
cat /proc/prartitions 파티션정보
/cpuinfo cpu정보
/devices 커널설정된 장치 정보
/filesystems 커널에 설정된 파일시스템 목록
/intrrupt
/ioports I/O포트정보
/kmsg 커널이 출력하는 메시지
/kallsyms 커널이 사요하는 심벌표
/loadvg 시스템평균 부하량
/meninfo 메모리정보
/modules 커널 모듈 수록
/uptime 켜저있는시간
/version
/net 네트워크관련
/etc/fstab - 부팅시 마운트할 파일시스템 설정
/mtab - 현재 파일시스템 마운트상황
장치(device) 마운트포인트 파일시스템종류 마운트옵션 백업 검사
LABEL = / / ext3 defaults - 옵션모두 1 - 백업 1 - 점검
auto - 부팅시 자동마운트 0 - No백업 0 - NO점검
noauto 2 - 루트파일시스템 + 예외파일시스템까지 점검
no suid uid, gid 적용안함
/etc/mtab or mount - 시스템에 마운트 되어있는 파일 시스템이나 장치들의 정보를 볼 수 있다.
fdisk -l s /dev/hda1
파티션목록 크기
fdisk [장치명] 입력시 command 창이뜬다
a:부팅가능한 플래그변경
b:bsd 디스크레이블 편집
c:도스 호환 플래그변경
d:파티션 삭제
l:리눅스에서 지원하는 파티션보기
m:메뉴
n:새로운 파티션
o:새로운 도스 파티션 테이블 생성
p:현재 파티션 상태
q:설정한 파티션을 저장하지 않고 종료
s:새로운 sun 디스크 레이블 생성
t:파티션 시스템 유형변경
u:표시/단위 변경
v:파티션 레이블 점검
w:파티션 저장
f:고급 사용자를 위한 명령어
umount -a 모든 마운트를 해제
df(하드디스크) -k KB단위
-m MB단위
-T 파일시스템 종류
-h 1K, 234M, 2G등 읽기 쉽게
du(파일 디렉토리 사용량) -b byte단위
-k
-h
-c 합계
-s 총 사용량
-D 심볼릭 링크가있다면 원본값크기 보여줌
crontab [-u 유저명] [옵션](반복적인 작업 할 때 이 명령어 사용)
-l 등록한 작업등
-r 작업삭제
-e 등록
분 시간 일 월 요일 명령
vi /etc/crontab -시스템자체에 작업(주기적으로)
안에 보면 #runpart라는게 있는데 일단위 주단위 월단위 년단위 이렇게 있다.
특정사용자 정보 "last [사용자명]"
/var/log/maillog - 어떤 메일이 오가는지
/var/log/messages - 메일 뉴스 등을 제외한 전체적인 로그
/var/log/secure - 유저접속로그
/var/log/lastlog - 마지막으로 로그인한 정보
/var/log/boot.log - 부팅시 서비스 데몬들의 상태
/var/log/dmesg - 시스템이 부팅될때 출력되는 메시지 기록
/var/log/cron - cron과 관련된 메시지
/var/log/wtmp - 사용자들이 접속한 정보기록
/var/log/xferlog - FTP 서버데이터 전송관련 로그
syslogd - 리눅스의 시스템 로그를 기록하는 프로그램
/etc/syslog.confy - 환경설정인데 위의 것들의 로그에 관한 설명을 볼 수 있다.
logrotate - 로그를 정기적으로 잘라 보관
rsync를 이용한 원격 백업
rpm - qa | grep rsync
| grep yinetd
두개 설치
vi /etcxinetd.d/rsync
disable:no로 바꿔줌
방화벽에서 873포트 오픈
vi /etc/sysconfig/iptables
-A RH.Firewall -1 -INPUT -m state --state NEW -m tcp -p tcp --dport 873 -j ACCEPT
/etc/init.d /iptables restart
vi /etc/rsyncd.conf
path:백업할 경로
comment:설명
uid:root
gid:root
use chroot:위의 path를 root 디렉토리로 사용
readonly:읽기 전용
hosts allow:호스트별 접속허용
max connections:동시접속자수
timeout: 타임아웃시간
rsync -avz 192.168.1.250::home/backup/ - 백업함(변경된 파일만)
메모리 관리
free [옵션]
프로세스관리
ps -l:자세한 정보
-u:프로세스 이름 시작 시간
-j:작업 중심
-s:시그널 중심
-v:가상 메모리 중심
-m:메모리 정보
-x:로그아웃 하고 난 뒤에도 동작하는 프로세스들을 볼 수 있게
-e:환경을 보여줌
-w:긴 형태로 출력
-r:현재 실행중인 프로세스
-f:process pull format
주로 ps -ef이렇게 쓴다. & -aux
pstree -n:PID순으로 정렬
-p:프로세스명과 PID같이 출력
kill -9 id
프로세스 전반적인 상황 보기
top -d:시간
-q:화면 계속 갱신
-c:명령행 전체 보여줌
-i:idle상태와 좀비 프로세스 무시
top 실행중일 때 명령어
k:kill
r:nice값 변경
l:top 맨윗줄의 항목 on/off
m:메모리 on/off
t:프로세스 CPU on/off
c:command line on/off
q:프로그램 종료
서비스 관리
ntsysv:부팅시 시작할거
chkconfig:런레벨에 따라 데몬과 서비스 추가 수정
--level:런레벨 선택
--add:데몬 추가
--del:데몬 삭제
--list:현재 데몬들의 목록 출력
데몬제어
service명령어나 /etc/rc.d/init.d에서 제어가능
serviec [데몬] [상태]
상태명령어로 start,stop,restart,status가 있음
setup - 리눅스 설정 유틸리티
ifconfig 항목 설명
Link encap:Ethernet을 사용함
inet addr:IPv4기반 IP주소
UP:인터페이스 활성됌
RUNNIG:동작중
MTU:Maximum Transmission Unit약자로 한번에 전송할 수 있는 최대패킷 크기
Metric:라우팅할 때 참조되는 거리
RX/TX:받은패킷/전송 패킷 총 개수 손실된 패킷개수 overruns로 표시
interrupt:Ehternet카드가 현재 사용중인 IRQ값
Base address:Ethernet 카드가 현재 사용중인 주소값
system-config-netwrok - 네트워크 장치 설정 툴
netstat -a:연결된 모든 소켓
-n:호스트나 포트이름, 유저이름 대신 숫자로 표시
-p:소켓에 대한 PID/프로그램을 출력
-r:라우팅 테이블 출력
-i:인터페이스 테이블 출력
-s:SNMP와 같은 네트워크 통계 출력
-c:계속되는 리스트 출력
-t:TCP
-u:UDP
vi /etc/sysconfig/network - 호스트네임 변경할 때, 호스트네임은 OS정보를 유출시킨다. 따라서 변경 필요가 있다.
커널 - 자원을 관리하고 할당
uname -a : 커널 버젼 확인하기, 메이저.마이너.패치레벨 이렇게 나옴
메이저:커널에 매우 큰변화가 생겼을때 숫자 올라감
마이너:중요한 기능에 변화, 짝수 번호이면 안정성이 입증된 버젼
패치레벨:새로운 기능 계획이 추가되면 패치레벨이 증가
컴파일
make mrproper: 이전 커널 옵션등을 정리
make clean:이전에 컴파일 한 것이 있다면 이 명령어 입력
make config:초기 컴파일 옵션 설정 방법
make xconfig:X윈도우에서 설정할 수 있는 방법
make menuconfig:메뉴 별로 정리된 항목을 보면서 원하는 항목들을 선택 또는 제거
커널 이미지 생성
make zlimage:GNU zip형식으로 압축, 사이즈가 크지 않을 때
make bzimage:bzip형식으로 압축하여 만듬
make zlilo:커널 이미지 만든후 커널 이미지를 /boot 디렉토리에 복사하고 바뀐 커널 이지로 부트로더인 LILO에 등록
커널 모듈 생성
make modules
make modules_install - 생성된 오브젝트 파일들을 /lib/modules/커널버전 디렉토리로 복사
커널 관련파일 복사
/boot 디렉토리에 복사하고 새 커널로 부팅하기 위해 부트로더인 GRUB에 추가해야한다.
make install
reboot
리눅스 보안
기본적인 컴파일러 속성을 root만 사용할 수 있도록 퍼미션 변경
ls -l /usr/bin/gcc
ls -l /usr/bin/g++
이렇게 해서 확인하면 모두 사용가능하게 되있다
chmod 100 /usr/bin/gcc /usr/bin/gcc++
chattr +i /usr/bin/gcc /usr/bin/g++
이렇게 권한을 바꿔준다.
주요 환경 설정파일 압축 보관
tar -cvzf etc.tgz /etc
네임서버를 운영하고 있다면 /var/named디렉토리를 백업
tar -cvzf named.tgz /var/named
qmial 메일서버를 운영하고 있다면 /var/qmial 디렉토리 백업
tar -cvzf qmail.tgz /var/qmail
chkconfig --list로 런레벨별 시작스크립트 활성화 상황을 분석하고 재정의
ssh로 접속시 root 제한하기
vi /etc/ssh/sshd.conf
PermitRootLogin no
proftpd 접속시 root 제한
vi /usr/local/server/proftpd/etc/proftpd.conf
su 명령어는 wheel 그룹 사용자만 실행 권한 부여
chown root.whell /bin/su
chmod 4750 /bin/su
chattr +i /bin/su
사용자 관련 명령어 파일속성 변경금지 설정
chmod 750 /usr/binuseradd
chmod 750 /usr/bin/top
chmod 750 /sbin/fdisk
chmod 750 /sbin/mkfs*
chmod 750 /sbin/fsck*
root 소유의 SetUID, SetGID 파일 검색 후 퍼미션 조정하기
find / -user root -perm -4000 -print
그런데 ping같은 명령어는 굳이 root로 실행할 필요가 없다. 그래서 밑과 같이 해준다,
chmod 100 /bin/ping
chmod 100 /bin/ping6
리눅스서버에서는 설치 후 커널정보등을 알려주는 파일이 있다. 이 파일들을 빈파일로 변경 또는 다른 문자로 대체
/etc/issue - 콘솔로 로그인 시도시 보여주는 메시지 설정파일
/etc/issue.net - 원격에서 로그인 시도시 보여주는 메시지 설정파일
/etc/redhat-release - 원격에서 로그인 시도시에 리눅스배포판 정보를 보여주는 메시지
/etc/motd - 로그인을 성공한 다음 보여주는 메시지
/proc파일 시스템에 존재하는 여러가지 설정 값들을 수정함으로써 커널상에서 지원하는 여러가지 보안사항을 설정할 수 있다.
이걸 정적으로 설정할 수 있는게 /etc/sysctl.conf이다. 이 파일의 설정값을 수정하면 재부팅시 커널 옵션 설정값을 적용할 수 있게 되는 것
proc을 보면 용량이 거의 없는데 물리적이 아니라 논리적으로 되어있기 때문
proc 파일시스템의 설정값을 변경한 후 재부팅시에도 적용이 되도록하려면 각 옵션들 값들을 /etc/sysctl.conf파일에 정의해 주어야 한다.
호스트네임 알아보기
cat /proc/sys/kernel/hostname
호스트 네임 변경
hostname명령어로 호스트네임을 변경해도 재부팅되면 다시 원상복귀다 따라서
vi /etc/sysconfig/network에 들어가서 바꿔야한다.
특정 네트워크의 브로드캐스트 주소를 대상으로 하는 ping 테스트 막기
cat /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts 하면
0이 출력 된다 이걸
sysctl -w net.ipv4.icmp_echo_ignore_broadcasts=1 을 입력해 1로 바꿔준다.
tcp 연결 세션 유지시간(텔넷이나 ftp)
cat /proc/sys/net/ipv4/tcp_fin_timeout을 입력해보면 60초로 설정되어있다.
tcp keep alive 시간(tcp 연결상태를 유지하는 시간 설정)
cat /proc/sys/net/ipv4/tcp_keepalive_time 을 입력해보면 7200초(2시간)으로 설정 되있다.
sysctl -w net.ipv4/tcp_keepavlice_time=1200 으로 변경
서버내에서의 로컬 포트 범위를 지정하고 있는 파일
cat /proc/sys/net/ipv4/ip_local_port_range
ip포워딩을 지정하는 파일
cat /proc/sys/net/ipv4/ip_forward
SYN Flooding 공격 막기
ACK패킷을 기다리는 Backlog Queue 사이즈를 늘려주거나 tcp_syncookies값을 1로 성정한다
cat /proc/sys/net/ipv4/tcp_syncookies
cat /proc/sys/net/ipv4/tcp_max_syn_backlog
ICMP redirect의 변조된 accept 패킷 차단
기본값을 0으로 바꿔줌
cat /proc/sys/net/ipv4/conf/default/accept_redirects
ICMP redirect의 변조된 send 패킷 차단
기본값 0으로 변경
cat /proc/sys/net/ipv4/conf/default/send_redirects
DOS공격의 소스서버로 사용을 차단(IP 스푸핑 방지)
cat /proc/sys/net/ipv4/conf/default/rp_filter 값을 1로 설정
스푸핑 패킷에 로그 생성
cat /proc/sys/net/ipv4/conf/default/log_martians 기본값을 1로 설정
source rote 패킷허용 막기
source route를 허용하게 되면 이것ㄷ을 이용해 해킹한 서버의 IP가 신뢰성있는 호스트인 것처럼 위장할 수 있다.
cat /proc/sys/net/ipv4/conf/default/accept_source_route 설정값을 0으로 변경
커널에서 사용할 수 있는 최대 파일의 수 설정
cat /proc/sys/fs/file-max
cpu 정보보기
cat /proc/cpuinfo
서버의 메모리 정보 보기
cat /proc/meminfo
서버의 디바이스 장치 알아보기
cat /proc/devices
커널에서 인식할 수 있는 파일시스템 알아보기
cat /proc/filesystems
현재 사용되고 있는 메모리 번지값 알아보기
cat /proc/iomem
서버에 장착된 입출력 포트들의 번지값 알아보기
cat /proc/ioports
커널에 로드되어있는 모듈들 알아보기
cat /proc/modules
현재의 리눅스시스템에 마운트된 장치디바이스 정보 알아보기
cat /proc/mounts
파티션 정보 알아보기
cat /proc/partitions
커널 버전 알아보기
cat /proc/version
장치들의 IRQ값 알아보기
cat /proc/interrupts
-rwsr-xr-x
여기서 보이는 s라고 적힌 퍼미션은 퍼미션 SetUID라고 부른다.
예로들면 /usr/bin/passwd /etc/shadow가 동시에 바뀌는 현상
4xxx:SetUID 퍼미션 부여하기 ex) chmod 4755 파일이름, 앞에 4가 옴으로써 s퍼미션이 붙게 된다.
2xxx:SetGID 퍼미션 부여하기
1xxx:Stickybit 퍼미션 부여하기 - 이건 t 퍼미션이 붙는다.
Stickybit란 자신이 생성한 파일은 누구나 읽을 수 있으며 자신과 root 이외의 유저들은 삭제할 수 없게 되는 것
파일검색
find / -used 2 -exec ls -{} \; - 2일 동안 변경된 파일등
find / -newer /root/test.txt -exec ls -l {} \;
{} - find에서 찾은 파일을 나타내는 변수 역할.
\; - -exec 다음부분에 나와있는 명령어를 실행하라는 명령어, 일종의 공식이라 생각하면 됌
리눅스 서버내의 백도어 파일 검색
find /dev -type f -exec ls -l{} \;
서버 내부의 .rhost파일 검색
.rhost파일은 외부에서 아무 제한없이 로그인 할 수 있도록 접근허용이 설정된 파일
find / -name .rhosts -exec ls -l {} \;
.bash_history파일(사용했던 명령어들이 저장되있는 곳) 검색
find / -name .bash_history -exec ls -l {} \;
소유자가 없는 파일 또는 소유그룹이 없는 무적파일 검색
find / -nouser -o nogroup -print
root 관리자 명령어와 일반 사용자 명령어 존재하는 경로(PATH) 설정
해당 유저 접속
echo $PATH - 일단 경로확인
cat .bash_profile
해커가 침입하고 어떠한 실행파일을 만들어 놓고 나갔는데 rm 명령어로 삭제가 안된다면 chattr을 설정해 놓았음을 의심해볼 수 있다.
chattr -R 전체
-a 속성을 지닌 파일은 추가모드만 허용
-c 속성을 지닌 파일은 커널에 의해 디스크 상에 압축 상태로 저장된다. 파일로부터 읽기 작업을 하면 압축이 풀린 자료가 반환된다. 쓰기 작업은 디스크 상에 저장하기 전에 자동으로 압축 된다.
-d 속성을 지닌 파일은 dump(8)명령 수행시 백업되지 않음
-i 속성을 지닌 파일은 수정할 수 없다. , 오로지 수퍼유저 만이 다시 이 속성을 제거한 다음 지울 수 있다.
-s 속성을 가진 파일이 지워질때는 일단 블럭들이 모두 0으로 되고 다시 디스크상에 쓰여짐
-u 속성을 가진 파일이 지워지면 그 내용이 저장된다. 복구 가능
lsattr - chattr속성 보는 명령어
사용 예제
chattr +i test.txt - 속성 추가
lsattr test.txt
chattr -i test.txt - 속성 없앰
lsattr test.txt
TCP Wrapper를 이용한 호스트 접근 제어(/etc/host.deny, /etc/host.allow)
이 접근제어방식은 단 한가지 xinetd수퍼데몬으로 관리하는 서비스 데몬만 제어 가능하다. standalone방식으로 서비스하는 데몬은 TCP Wrapper로 접근제어가 불가능하다.
실시간 포트 스캔 방어 - portsenrty
portsentry 스크립트를 작성해야함
rookit탐지 or 백도어 탐지 - chkrootkit, rootkithunter
시스템상 데몬으로 동작하면서 지속적으로 시스템의 주요파일 및 로그들을 확인하고, 외부공격에 대해 바로 대응 할 수 있도록 설정이 가능한 유틸리티, 관리자에게 실시간으로 메일 발송 - OSSEC
iptables를 이용한 방화벽 설정하기 - www.netfilter.org
명령어
-A 새로운 규칙 추가(--apend)
-D 규칙을 삭제(--delete)
-C 패킷을 테스트(--check)
-I 새로운 규칙 삽입(--insert)
-R 새로운 규칙으로 교체(--replace)
-L 새로운 규칙을 출력(--list)
-F 체인의 모든 규칙 삭제(--flush)
-Z 모든 체인의 패킷과 바이트 카운터 값을 0으로 만든다(--zero)
-N 새로운 체인을 만듬 (--new)
-X 체인을 삭제(--delete-chain)
-P 기본정책을 변경(--policy)
옵션들
-p 패킷의 프로토콜의 포토번호 또는 이름 명시(--proto)
-s 패킷의 발신지 명시(--source)
-d 패킷의 도착지 명시(--destination)
-i 패킷이 수신되는 인터페이스와 일치하는지 확인(--in-interface)
-o 패킷이 송신되는 인터페이스와 일치하는지 확인
-j 규칙에 맞는 패킷을 어떻게 처리할것인가 명시(--jump)
-y 접속 요청 패킷인 SYN패킷을 허용하지 않는다(--syn)
-f 두 번째 이후의 조각에 대해서 규칙 명시(--fragment)
--state state 연결 상태와 일치하는지 확인하며 state에는 밑의 4가지 상태를 지정할 수 있다.
-ESTABLISHED:상대방과 양방향 간 소켓 연결이 구축된 상태
-INVALID:패킷이 연결되지 않았거나 ICMP 에러를 수신한 상태
-NEW:새로운 연결이 생성되거나 또는 양방향 연결이 완료되지 않은 상태
-service.RELATED:연결된 상태에서 기존 연결과 관련된 새로운 연결이 생성된 상태로 FTP의 경우 제어포트(21)로 명령을 보내고 전송 시에는 별도의 포트를 생성하므로 이때 RELATED 상태가 된다.
설정이 다 끝나으면 COMMIT 명령어를 실행해야 iptalbes 정책에 반영된다.
lokkit
명령줄 기반 iptalbes 설정 유틸리티, 간단한 작업으로만 사용할 것
--list-services lokkit가 변경할 수 있는 전체 서비스 목록을 본다.
사용예시)
lokkit -s ssh -s http -s https ssh와 http/https를 사용할 포트들을 연다.
--------------> Server -------------->
INPUT OUTPUT
| |
| |
|____________________|
FORWARD
마운트 된 정보 확인
mount
텍스트모드에서 마운트하는법
mkdir /media/cdrom
mkdir /media/usb
mount /dev/cdrom /media/cdrom
mount /dev/sdb1 /mmedia/usb
DVD에서 rpm패키지 설치
일단 dvd를 마운트
cd /media\Fedora\blabla - rpm패키지가 있는곳으로 이동
rpm -Uvh
rpm -qi - 설치한 프로그램의 정보확인
rpm -e - 삭제
rpm은 의존성 문제가 있다 그래서 나온게 yum이다.
yum을 설치할려면 인터넷에서 다운받아올 URL을 지정(저장소)해줘야 한다. 이것은 /etc/yum.repos.d/디렉토리에 저장되어 있다.
yum으로 설치해야 트랜잭션(패키지가 변경되는 명령을 실행한것을 데이터베이스처럼 해놓은거) 관리를 할 수 있다. 그래서 별도로 yum 저장소를 제공하지 않는 패키지라도 rpm으로 설치하지 말고 yum localinstall을 이용해 설치하는게 좋다.
yum history list - 트랜잭션 목록 보기
Action
D 최소 한 개의 패키지가 예전 버전으로 다운그레이드됨
E 최소 한 개의 패키지가 삭제됨
I 최소 한 개의 패키지가 설치됨
O 최소 한 개의 패키지가 obsolete로 표시됨
R 최소 한 개의 패키지가 재설치됨
U 최소 한 개의 패ㅣ키지가 새로운 버전으로 업데이트 됨
Altered
< 트랜잭션이 완료되기 전에 rpmdb 데이터베이스가 yum이 아닌 외부에서 변경됨
> 트랜잭션이 완료된 후에 rpmdb 데이터베이스가 yum이 아닌 외부에서 변경됨
* 트랜잭션을 종료하지 못함
# 트랜잭션이 성공적으로 종료됐지만 yum이 0이 아닌 종료 코드를 전달함
E 트랜잭션이 성공적으로 종료됐지만 에러나 경고가 표시됨
P 트랜잭션이 성공적으로 종료됐지만 rpmdb 데이터베이스에 문제가 계속 존재함
s 트랜잭션이 성공적으로 종료됐지만 --skip-broken 옵션을 사용했으므로 어떤 패키지는 건너뜀
yum history info 4(id) - 트랜잭션 자세한 정보 보기
yum history undo 4 - 트랜잭션 되돌리기
yum history redo 4 - 되살리기
네트워크 설정관련파일
/etc/sysconfig/network - 네트워크의 기본적인 정보
/etc/sysconfig/network-scripts/ifcfg-ethx
/etc/resolv.conf - DNS 서버의 정보 및 호스트 이름
/etc/hosts - 호스트 이름
yum install bind-utils - nslookup 설치
netstat -anp | grep 80 몇번포트 열렸는지 확인
centos설치 할 때 minimal이 아닌 basic으로 설치 할 것
배시를 로그인 셸로 사용할 경우 파일에서 설정을 불러온다.
/etc/bashrc를 읽고 그 안에 명령어가 있으면 실행하고 ~/.bashrc, ~/.bash_profile순으로 처리된다.
그러다 사용자가 로그아웃하면 ~/.bash_logout과 /etc/bash.bash_logout파일이 있는지 확인해 이 파일들이 있을 경우 해당 파일의 내용을 처리한다.
환경변수
배시는 다양한 환경변수를 통해 동작을 제어한다. .bash_profile을 설정하는 거
VISUAL 환경변수 - 사용할 편집기를 지정하는 환경변수
export VISUAL=/usr/bin/vim
PS1 - 배시의 프롬프트 모양을 지정하는 변수
ex) 폴더경로 색깔지정
PATH - 배시가 실행 프로그램을 찾는 경로를 지정하는 변수, (:)으로 구분해 여러개를 설정할 수 있다. 프로그램을 /usr/bin이나 /usr/local/bin이 아닌 경로에 설치했다면 해당 경로를 PATH변수에 지정해야 절대경로를 입력하지 않고 사용할 수 있다.
export PATH=$PATH:/opt/myprog/bin
LD_LIBRARY_PATH - 프로그램 실행에 필요한 동적 라이브러리(확장자가 .so다)를 찾는 경로, 기본설정은 /lib, /usr/lib, /usr/local/lib로 설정돼 있다.
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/myprog/lib
LANG - 어떤 언어(로캘)을 사용할지 설정하는 변수
export LC_MESSAGE=en_US.utf8 - 표시언어만 영어로
export LANG=en_US.utf8 - 전체 로캘 변경
export LANG=C - 전체 로캘을 끄겠다., 아스키 문자만 입출력이 가능
현재 설정된 로캘은 locale명령을 실행하면 확인할 수 있다.
리눅스에서 C나 C++로 개발할 때 GNU getopt를 알아야 한다.
리눅스의 커맨드 기반 프로그램들이 GNU getopt를 이용해 옵션을 처리하도록 개발돼 있다.
예시)
rpm -i package.rpm
rpm --install package.rpm
/etc/inittab - 런레벨 설정
service --status-all 서비스의 모든 상태를 출력
/etc/sysconfig/iptables - iptables 설정파일
cron은 보안 이슈 때문에 사용자의 셸초기화 파일(.bashrc, .bash_profile)을 읽지 않는다. 그러므로 /usr/bin이나 /bin 같이 일반적인 경로에 두지 않아야 한다.
만약 /etc/cron.allow 파일이 있다면 이 파일에 등록된 사용자만 cron을 사용할 수 있다.
만약 /etc/cron.allow가 없고 /etc/cron.deny파일이 있다면 이 파일에 등록되지 않은 사용자만 cron을 사용할 수 있다.
kill을 사용할 때 두세 번 정도 TERM(15) 시그널을 보내고, 그래도 종료되지 않을 경우 KILL 시그널을 전송하는 것이 좋다.
리눅스나 유닉스를 관리할 때 좋은 습관 중 하나는 루트로 작업하는 것을 최소화 하는 것이다. 불편하더라도 일반 사용자로 로그인해서 작업하고 꼭 루트 권한이 필요한 경우에만 루트 권한을 획득해서 작업한다. 로그를 볼 때 계속 번거롭게 접속할 때 빼곤 말이다.
ACL 설정
setfacl -m u:lesstif:rx /project/config - 이 폴더경로에 lesstif사용자를 명명하고 읽기 권한을 줌
setfacl -m g:devel:rw /project/config - 이 폴더경로에 그룹 devel라고 명명하고 읽고 쓰기 권한을 줌
o:다른 사용자 권한 지정
setfacl -x u:lesstif /etc/sysconfig/iptables - lesstif사용자 권한 삭제
getfacl /var/log - /valr/log에 설정되있는 권한 보기
Devian계열 - 우분투
sudo su 하면 root로 업글
env - 환경변수 보기
centos에서는 chkconfig 우분투에서는 sysv-rc-conf 이다.
'프로그래밍 > 리눅스' 카테고리의 다른 글
한번에 끝내는 Ubuntu 웹서버세팅 (우분투 서버세팅) (0) | 2018.02.08 |
---|---|
WGET 명령어 (0) | 2018.02.08 |
리눅스 설치, 백업, 잡오류 (0) | 2018.02.08 |
ubuntu에서 java 환경변수 설정 (0) | 2018.02.08 |
profile,bashrc차이점 (0) | 2018.02.08 |
Comments