마스터포유(Master4U)
Monday, 17 of January
 

제목: 시스탬관리(UNIX
분류: 리눅스
이름: 김인호 * http://www.master4u.net


등록일: 2008-01-15 01:01
조회수: 6418 / 추천수: 1
 
시스탬관리(UNIX) | ☞ SOLARIS
시스템 관리
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
standalone
/etc/inet/inetd.conf or /etc/inetd.conf
개별 process 작동
telnet, ftp, finger, rlogin 등
http, sendmail, nfsd, mountd 등
inetd daemon이 실행되고 있다가 요청이 들어오면 해당 daemon 실행한다.
항상 daemon이 실행된다.
# pkill -HUP inetd
or
# /etc/init.d/inetsvc stop
# /etc/init.d/inetsvc start
# /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
ACL을 사용해서 추가한 사용자나 그룹이 가질 수 있는 최대 권한 명시
mask에서 명시하지 않은 권한을 사용자나 그룹이 가질 경우 유효 권한에는 빠져 있으므로 실질적인 권한은 행사 할 수 없게 된다. ACL mask는 별도로 명시 하지 않을 경우 파일의 그룹 소유자가 가지는 권한이 ACL mask로 사용된다.
u:uid:perms
파일 소유자를 제외한 나머지 사용자들의 권한을 각 사용자별로 명시할 수 있다.
g:gid:perms
파일의 그룹소유자를 제외한 나머지 그룹들이 파일에 대해 가질 수 있는 권한을 개별적인 그룹에 대해 따로따로 명시할 수 있다.
옵션
옵  션
설  명
-m
새로운 ACL을 추가하거나, 기존의 ACL 변경.
-s
기존의 ACL을 새롭게 명시한 ACL로 대체. 추가하는 개별 사용자나 그룹은 ACL에 이미 정의된 사용자나 그룹은 명시가 불가능하다.
-d
필요없는 ACL 제거.
-f
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
-r
파일에 정의된 모든 사용자나 그룹의 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
       
△ 이전글: 스카시 디스크 구분(68핀,80핀(SCA))방법
▽ 다음글: [리눅스] 여러가지 팁들
Copyright 1999-2020 Zeroboard / skin by enFree