시스템 관리
1) System security
- logins 명령어
# logins -x -l user1 (user1의 로그인 상태 정보)
# logins -p (no passwd 사용자 보여줌.)
- user의 login을 임시로 disable 하기
/etc/nologin 파일 생성 or run level0으로 전환.
# vi /etc/nologin
or
# cat > /etc/nologin
** No logins permitted **
** The system will be unavailable untill 12 noon **
시스템에 /etc/nologin이 존재하면 로그인이 거부되고 nologin의 내용 출력.
- loginlog 파일 활용하기
로그인에 실패한 정보 저장. super user만 읽고/쓰기 가능.
default로 loginlog 파일이 없으므로 새로 생성해 주어야 한다.
# touch /var/adm/loginlog
# chown root:sys /var/adm/loginlog
# chmod 600 /var/adm/loginlog
# tail -f /var/adm/loginlog
(실시간으로 login 실패 정보 보여줌. 5번 이상 login 실패시 화면에 표시해준다.)
- console상에 super-user(root)로 access 제한.
# vi /etc/default/login
#CONSOLE=/dev/console ('#' 제거)
시스템 콘솔로만 root로 로그인 가능. remote 접속시 일반사용자로 로그인 후 super-user 로 변경해야 한다. rlogin 호스트명도 불가능하다.
CONSOLE=/dev/term/a (serial a로만 root로 접근 가능)
CONSOLE= (시스템 콘솔에서도 root로 로그인 불가능, 항상 일반user로 먼저 로그인)
# rlogin hostA (host로 직접 로그인 불가능.)
# rlogin -l blackbat hostA (hostA의 일반user blackbat으로 먼저 로그인.)
# telnet blackbat (일반 user로 login 후 root로 login)
- su 명령어를 사용한 사용자 관리하기
# vi /etc/default/su
#SULOG=/var/adm/sulog
==>#SULOG=/var/adm/sulog ('#' 제거)
#CONSOLE=/dev/console ('#'제거하면 CDE환경의 console에도 같은 메시지 출력)
# more /var/adm/sulog
# tail -f /var/adm/sulog (실시간 체크)
- 'stop+a'를 사용하지 못하게 막기
# vi /etc/default/kbd
#KEYBOARD_ABORT=disable ('#' 제거)
or
# vi /etc/system
set abort enable=0 (이 라인을 추가해준다.)
- 네트워크상에서의 incoming 조절하기
/etc/inet/inetd.conf or /etc/inetd.conf 파일
네트워크를 통한 access 통제 가능.
# vi /etc/inetd.conf
#ftp stream ...... (서비스 중지부분 앞에 ‘#’ 체크)
#telnet stream ..... (서비스 중지부분 앞에 ‘#’ 체크)
# ps -ef | grep inetd
# /etc/init.d/inetsvc stop
# /etc/init.d/inetsvc start
or
# kill -9 183
# /usr/sbin/inetd -s
- Port Number 설정 파일, 포트 막기
# vi /etc/services (포트 설정 or 막고 싶은 포트 앞에 ‘#’ 체크)
# ps -ef | grep inetd
# /etc/init.d/inetsvc stop
# /etc/init.d/inetsvc start
or
# kill -9 183
# /usr/sbin/inetd -s
- who 명령어
server에 접속한 사용자를 보여준다.
/var/adm/utmpx 파일을 읽어서 출력한다.
# who
user2 pts/2 ......... (192.168.0.116) (pts : /dev/pts/# 가상device)
root comsole ......... (:0) (console : system boot 과 error message 출력)
(term : /dev/term/a,b 물리적인 serial port)
# who -m (현재의 terminal 창에 대한 정보만 보여줌)
- Switching Users 확인하기
$ who am i (처음에 로그인한 사용자 보여줌)
user1
$ whoami (스위치된 사용자 보여줌. 현재 사용자 보여줌)
user1
$ su user2
$ who am i
user1
$ whoami
user2
- rusers 명령어
네트워크에 broadcast를 해서 사용자 정보를 수집한다. 전체 user수를 확인 할 수 있다.
같은 네트워크에 있는 서버와 서버에 접속한 user만 보여줌.
/usr/lib/netsvc/rusers/rpc.rusersd daemon이 enable되어 있어야 한다.
# rusers -l
- finger 명령어
local or remote의 사용자를 확인 할 수 있다.
in.fingerd daemon이 enable 되어 있어야 한다.
# finger (local에 접속한 사용자만 보여줌.)
# finger -l (local에 접속한 사용자의 자세한 정보 보여줌.)
# finger -m blackbat (해당user의 자세한 정보 보여줌.)
hostA# finger root@hostB (remote hostB에 접속한 사용자의 정보 보여줌.)
user remote host
hostA# finger -l blackbat@hostB (remote hostB의 blackbat 사용자의 정보 보여줌.)
- last 명령어
logins과 logouts 정보를 보여준다.
/var/adm/wtmpx 파일을 읽어서 출력한다.
# last (전체 login, logout 접속 정보)
# last blackbat (blackbat의 login, logout 접속 정보)
# last -n 5 reboot (reboot 정보를 최신정보로 5line만 보여줌)
# cp /dev/null /var/adm/wtmpx (wtmpx를 clear 시킨다.)
- FTP(File Transfer Protocol)
Solaris8 : /etc/ftpusers
Solaris9 : /etc/ftpd/ftpusers
이 파일에 등록이 되어 있는 ID로는 접속이 불가능하다. 접속을 가능하게 하고 싶은 ID앞에 ‘#’으로 주석처리를 해준다.
ex)
# vi /etc/ftpusers
#root (root앞에 주석처리를 해주면 root로 로그인이 가능하다.)
- .rhosts & /etc/hosts.equiv 파일
/etc/hosts.equiv or /.rhosts에 로컬정보가 들어있으면 passwd를 묻지 않는다.
hostB# cat /.rhosts
hostA root (sunA의 root만 접근 허락)
hostA + (sunA의 모든 유저에게 접근 허락)
+ root (모든 시스템의 root만 접근 허락)
+ + (모든 시스템의 모든 유저에게 접근 허락)
- rlogin 명령어 (.rhosts에 등록되어 있어야 사용 가능.) => remote login
hostA# rlogin hostB
hostA# rlogin -l blackbat hostB (blackbat 사용자로 rlogin)
inetd
/etc/inet/inetd.conf or /etc/inetd.conf
telnet, ftp, finger, rlogin 등
inetd daemon이 실행되고 있다가 요청이 들어오면 해당 daemon 실행한다.
# pkill -HUP inetd
or
# /etc/init.d/inetsvc stop
# /etc/init.d/inetsvc start
standalone
|
개별 process 작동
|
http, sendmail, nfsd, mountd 등
|
항상 daemon이 실행된다.
|
# /etc/init.d/해당daemon stop
# /etc/init.d/해당daemon start
|
- rsh 명령어 (.rhosts에 등록되어 있어야 사용 가능.) => remote shell
rlogin과 유사하다. 하지만 remote로 shell을 열어서 명령어를 실행 할 수 있다.
hostA# rsh hostB
hostA# rsh -l blackbat hostB
hostA# rsh hostB cat /etc/shadow
(hostB의 /etc/shadow파일을 읽을 수 있다. rlogin은 불가능하다.)
- rcp 명령어 (.rhosts에 등록되어 있어야 사용 가능.)
hostA# rcp ./file1 hostB:/home/user1
(hostA->hostB로 file1 복사하기)
hostA# rcp hostB:/home/user1/file0 ./
(hostB->hostA로 file0 복사하기)
**rlogin, rsh, rcp는 unix 머신사이에서만 사용된다.**
- groups 명령어
# groups
# groups blackbat (blackbat의 group을 출력한다.)
- id 명령어
# id (uid, gid 출력)
# id blackbat (blackbat의 uid, gid 출력)
# id -a blackbat (uid, gid, secondary groups 출력)
- chown 명령어
# chown user2 file7 (file7의 소유자를 user2로 변경.)
# chown -R user2:class file2 (file2의 소유자와 group 소유자 변경.)
# chown -R user2 dir4 (dir4와 directory에 포함된 모든 file의 소유자를 변경.)
# chown -R user2:class dir1
(dir1의 directory에 포함된 모든 file의 소유자와 group 소유자를 변경.)
# chgrp class file4 (file4의 group 소유자를 변경.)
2) 프로세스 구성 요소
- PID(Process Identification Number) :
프로세스 각각을 구별할 수 있는 유일한 데이터이다. 프로세스는 프로세스에 할당된 이름 이 존재하지 않기 때문에 시스템이나 사용자 모두가 PID로서 프로세스를 구별한다.
- PPID(Parent Process Identification Number) :
프로세스를 만든 부모 프로세스의 PID를 나타내는 값.
shell 프롬프트에서 명령어를 입력하여 프로그램을 실행했다면 shell이 부모 프로세스가 되어 shell의 PID가 프로세스의 PPID로 할당된다.
- UID(real User ID) & GID(Group ID) :
프로세스에 저장되는 UID와 GID는 프로세스를 실행한 사용자의 UID와 GID가 저장된다.
- EUID(effective user ID) & EGID(effective group ID) :
UID와 GID가 실행한 사용자의 정보를 담는 반면, EUID와 EGID는 프로세스가 파일에 대 해서 가지는 권한을
나타낸다. 대부분의 프로세스는 UID와 EUID, GID와 EGID가 동일한 값을 가지고 있으나, 일부 특별한 프로세스는 두
가지 값이 서로 다른 값을 가지고 있기 도 하다.
- setuid : 프로그램 실행시 프로세스가 가지는 권한은 프로그램을 실행한 사용자의 권한이 아닌 프로그램 소유자의 권한을 가진다.
$ ls -l /bin/passwd
-r-sr-sr-x 3 root sys 101744 Jan 6 2000 /bin/passwd
(passwd 명령어는 setuid와 setgid가 설정되어 있으므로 일반유저에서 파일소유자의 권한으로 실행이 가능하다.)
$ cat /etc/shadow (cat의 실행자는 일반유저이므로 shadow파일을 읽을 수 없다.)
cat: cannot open /etc/shadow
$ su -
# ls -l /etc/shadow (root 권한으로만 읽기가 가능하다.)
-r-------- 1 root sys 339 Feb 18 18:41 /etc/shadow
# ls -l /bin/cat (파일소유자는 root이다.)
-r-xr-xr-x 1 root bin 10092 Jul 10 2000 /bin/cat
# chmod 4455 /bin/cat
# ls -l /bin/cat
-r-Sr-xr-x 1 root bin 10092 Jul 10 2000 /bin/cat
(파일에 setuid권한이 있으나 실행 권한이 없을 경우는 소문자 s가 아니라 대문자 S 기호가 나타난다.)
# chmod 4555 /bin/cat (실행자의 권한이 아닌 파일소유자의 권한을 부여한다.)
# ls -l /bin/cat
-r-sr-xr-x 1 root bin 10092 Jul 10 2000 /bin/cat
# su - blackbat
$ cat /etc/shadow (cat의 실행자가 아닌 파일소유자의 권한으로 읽는다.)
root:L89niy4Uo6HtM:6445::::::
- setgid :
setuid와 유사. setuid는 실행 파일을 소유한 사용자의 권한을 가지지만, setgid 는 실행
파일을 소유한 그룹 소유주의 권한을 가진다. 즉 프로세스가 명령어를 실행한 소유자가 속한 기본 그룹의
권한을 가지지 않고 명령어의 그룹 소유주 권 한을 가지게 된다. setgid 권한을 명시할때는 기호 방법만을
사용한다.
setgid 권한이 명시된 디렉토리 밑에 새로 생성되는 모든 하위 디렉토리나 파일 도 setgid 권한을 가진다.
$ id -a
uid=107(blackbat) gid=2002(users) groups=2002(users)
$ mkdir sgid
$ ls -ld sgid
drwxr-xr-x 2 blackbat users 512 Feb 20 17:18 sgid
$ cd sgid
$ mkdir dir1
$ touch file1
$ su
# id -a
uid=0(root)gid=1(other)groups=1(other),0(root),2(bin),3(sys),4(adm),5(uucp),6(mail),7(tty),8(lp),9(nuucp),12(daemon)
# chmod g+s sgid
# ls -ld sgid
drwxr-sr-x 3 blackbat users 512 Feb 20 17:20 sgid
# mkdir dir2
# touch file2
# ls -l
total 4
drwxr-xr-x 2 blackbat users 512 Feb 20 17:20 dir1
drwxr-sr-x 2 root users 512 Feb 20 17:21 dir2
-rw-r--r-- 1 blackbat users 0 Feb 20 17:20 file1
-rw-r--r-- 1 root users 0 Feb 20 17:21 file2
(어떤 사용자든지 새로 파일이나 디렉토리를 만들어도 setgid 권한이 명시된 상위그룹과 동일한 그룹 소유자를 가진다.)
- sticky bit : 일반적으로 모든 사용자에게 변경 권한이 부여된 디렉토리이다.
시스템에 존재하는 어떠한 사용자라도 해당 디렉토리 밑에 파일이나 하위디 렉토리를 생성할 수 있고,
삭제가 가능하다. 하지만 삭제는 파일이나 디렉토 리의 소유자 or root 사용자 or 변경권한이
허락하는 경우에만 가능하다.)
# mkdir sticky
# chmod 1777 sticky
drwxrwxrwt 2 root other 512 Feb 20 17:33 sticky
- setuid, setgid list 확인
# find / -type f -perm 6000 > setuidgid.list
# find / -type f -perm 4000 > setuid.list
# find / -type f -perm 2000 > setgid.list
- ACL(Access Control List) :
사용자가 개개인의 권한이나 그룹의 권한을 설정하는 방법.
# setfacl -m u:blackbat:rw- /etc/shadow
# setfacl -m m:rw- /etc/shadow
# getfacl /etc/shadow
# file: /etc/shadow
# owner: root
# group: sys
user::r--
user:blackbat:rw- #effective:rw-
group::--- #effective:---
mask:rw-
other:---
# su - blackbat
$ more /etc/shadow
root:L89niy4Uo6HtM:6445::::::
$ su
# setfacl -d u:blackbat:--- /etc/shadow
# ls -l /etc/shadow
-r-------- 1 root sys 339 Feb 18 18:41 /etc/shadow
# su - blackbat
$ more /etc/shadow
/etc/shadow: Permission denied
setfacl :
파 일에 새로운 ACL을 추가하거나, 기존에 설정된 ACL을 바꾸거나, 새로운 ACL로 대체하거나, 기존에 설정된 ACL을 삭제하는 용도로 사용하는 명령어.
chmod
명령어에서 부여할 수 있는 권한 이외에 여러 사용자와 그룹에 대한 권한을 전통적인 권한과는 별개로 명시할 수 있다.
setfacl 명령어를 사용하기 위해서는 파일의 소유자이거나 root 사용자의 권한을 가지고 있어야 한다.
ACL 형식
u::perms
g::perms
o::perms
m::perms
u:uid:perms
g:gid:perms
의 미
|
파일 소유자의 권한을 명시
|
파일 그룹 소유자의 권한을 명시
|
그 외 사용자의 권한을 명시
|
ACL을 사용해서 추가한 사용자나 그룹이 가질 수 있는 최대 권한 명시
mask
에서 명시하지 않은 권한을 사용자나 그룹이 가질 경우 유효 권한에는 빠져 있으므로 실질적인 권한은 행사 할 수 없게 된다.
ACL mask는 별도로 명시 하지 않을 경우 파일의 그룹 소유자가 가지는 권한이 ACL mask로 사용된다.
|
파일 소유자를 제외한 나머지 사용자들의 권한을 각 사용자별로 명시할 수 있다.
|
파일의 그룹소유자를 제외한 나머지 그룹들이 파일에 대해 가질 수 있는 권한을 개별적인 그룹에 대해 따로따로 명시할 수 있다.
|
옵션
옵 션
-m
-s
-d
-f
-r
설 명
|
새로운 ACL을 추가하거나, 기존의 ACL 변경.
|
기존의 ACL을 새롭게 명시한 ACL로 대체. 추가하는 개별 사용자나 그룹은 ACL에 이미 정의된 사용자나 그룹은 명시가 불가능하다.
|
필요없는 ACL 제거.
|
ACL 명령어와 함께 입력하지 않고, 파일에 저장 내용을 참조해서 설정 할 수 있다. 대부분의 경우 이미 다른 파일에 설정된 ACL과 동일하게 ACL을 설정하는 용도로 사용한다.
# touch file1
# setfacl -m u:blackbat:rwx file1
# touch file2
# getfacl file1 | setfacl -f - file2
# ls -l file*
-rw-r--r--+ 1 root other 0 Feb 20 20:30 file1
-rw-r--r--+ 1 root other 0 Feb 20 20:31 file2
|
파일에 정의된 모든 사용자나 그룹의 ACL을 바탕으로 필요한 모든 권한을 가진 새로운 ACL mask를 만들기 때문에, ACL로 추가로 권한을 가지는 모든 사용자와 그룹은 자신의 권한을 정의된 그대로 사용 할 수 있다.
# setfacl -m u:yang:rwx shadow
# getfacl shadow
# file: shadow
# owner: root
# group: other
user::r--
user:ljs:rw- #effective:r--
user:yang:rwx #effective:r--
group::--- #effective:---
mask:r--
other:---
# setfacl -r -m u:blackbat:rwx shadow
# getfacl shadow
# file: shadow
# owner: root
# group: other
user::r--
user:blackbat:rwx #effective:rwx
user:ljs:rw- #effective:rw-
user:yang:rwx #effective:rwx
group::--- #effective:---
mask:rwx
other:---
|
3) 시스템 정보 보기
# showrev -a (가능한 모든 정보 보기)
# showrev -p (patch 정보 보기)
# hostid (호스트의 16진수 표기)
# hostname
# /usr/platform/sun4u/sbin/prtdiag -v (시스템의 전체적인 현황 보기)
# prtconf | grep Memory (시스템 메모리양 보기)
# vi /etc/motd (로그인시 보여줄 메시지 수정 가능)
- 압축 유틸리티
# tar cvf file.tar file1 file2 file3 (file.tar로 압축)
# tar tvf file.tar (file.tar의 내용보기)
# tar rvf file.tar file4 (file4를 추가)
# tar xvf file.tar (압축 해제)
# compress file.tar
# uncompress file.tar.Z
# zcat file.tar.gz | tar xvf-
# gzip file.tar
# gzip -d file.tar.gz
# gunzip file.tar.gz
'개발 > unix' 카테고리의 다른 글
solaris 정리 8 - [ 맞춤식 점프스타트, 백업과 복구 ] (0) | 2012.02.05 |
---|---|
solaris 정리 7 - [ 성능 측정 , 주기적인 작업 설정 ] (0) | 2012.02.05 |
정리 5 - [ 디스크사용관리,Software 추가/삭제,Patches ] (0) | 2012.02.05 |
solaris 정리 4 - [ Device ] (0) | 2012.02.05 |
solaris 정리 3 - [ Managing Initialization Files,Managing User Accounts ] (0) | 2012.02.05 |