본문 바로가기

개발/unix

solarsi 정리 6 - [ 시스템 관리 ]

시스템 관리
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