1993.01.21


SUBJECT: SunOS Administering Security,Performance and Accounting




	< PART I - Security >

Part I은 다음을 포함한다.

	* "Introduction to Security"
	* "Securing System Access"
	* "Securing Files"
	* "Securing the Network"
	* "Using ASET"

1. Introduction to Security

 1.1 Granting access to a computer system

	- maintaining physical site security
	- login and access control
	- restricting access to data in files
	- maintaining network control
	- monitoring system usage
	- correct path settings
	- setuid programs
	- root login
	- firewall

2. Securing system access

 2.1 About restricting access to your system

	- restricting login access
	
	  사용자가 시스템에 로그 인할때 로그 인 프로그램은 /etc/nsswitch.conf 화일의 정보에따른
	  적당한 데이타베이스를 참고한다.

	- the password databases

	  * the NIS password database
	  * the NIS+ password database
	  * the /etc files

	    /etc 화일은 /etc/passwd와 /etc/shadow를 포함한다.
	    사용자의 이름과 다른 정보는 /etc/passwd에 있고 암호화된 password는 /etc/shadow에 있다.

	- password protection using dial-up passwords

	  dial-up password를 만들기 위해서는 2개의 화일이 관계한다. : /etc/dialups와 /etc/d_passwd
	  /etc/dialups는 터미날 장비의 목록이다.
	  예로
		/dev/term/a
		/dev/term/b

	  /etc/d_passwd는 2개의 필드를 갖는다.
	  처음은 패스워드를 요구할 로그 인 쉘이고 두번째는 암호화된 패스워드이다
	  예로

		/usr/lib/uucp/uucico::
		/usr/bin/csh::
		/usr/bin/sh::
		/usr/bin/ksh::

	   사용자가 /etc/dialups에 있는 포트로 로그 인을 할때 로그 인 프로그램은 /etc/passwd에
	   사용자의 로그 인 엔트리를 찾고 로그 인 쉘 필드를 /etc/d_passwd의 엔트리와 비교한다.
	   이 엔트리는 사용자가 dial-up password를 요구되는 지를 결정한다.

	- restricted shell
	
	  표준 쉘은 사용자가 화일을 열고 명령을 수행하는 등등의 일을 할 수 있게 한다.
	  제한된 쉘(restricted shell)은 명령을 수행하고 디렉토리를 바꾸는 등의 일에 제한을 준다.
	  제한된 쉘(rsh)은 /usr/lib에 있다.(이것은 remote shell(/usr/sbin/rsh)이 아니다)
	  이것은 표준 쉘과 다음과 같은 면에서 다르다.
		
	  * 사용자는 홈 디렉토리에 제한된다.(디렉토리를 바꾸기 위해 cd를 사용할 수 없다)
	  * 사용자는 관리자가 지정한 PATH에 있는 명령만 수행할 수 있다.
	  * 사용자는 홈 디렉토리와 그 밑의 화일들만 접근할 수 있다.
	  * 사용자는 >>나 >로 redirect할 수 없다.

	- restricting root access

	  /etc/default/login에 있는 엔트리만 root access를 할 수 있다.
	  콘솔에서만 root login을 하게 하려면 다음과 같이 한다.

	  CONSOLE=/dev/console

	  시스템은 su 명령을 사용할때마다 누가,언제 사용했는지를 /var/adm/sulog에 기록한다.

	- maintaining a log of unsuccessful login attempts

	  컴퓨터의 성공하지 못한 시도를 기록할 수 있다.
	  어떤 사람이 5번 연속으로 시도를 하여 실패하면 /var/adm/loginlog에 기록된다.
	  이것을 하기 위해서는 /var/adm/loginlog 화일을 만들어야만 한다.
	  만약 5번 이하이면 기록되지 않고 /var/adm/loginlog 화일이 없으면 기록하지 않는다.

	- special logins

	  일반적인 로그 인에 포함하여 몇개의 특별한 시스템 로그 인에 루트 패스워드 없이
	  관리 명령을 수행할 수 있게 한다.
	  여기에는 2가지 형태의 특별한 로그 인이 있다.

	  1) 관리 로그 인(adminidtrative login) -  사용자들이 사용하는데 필요한 기능
	  2) 시스템 로그 인(system login) - 각종 시스템 기능

	  * 관리 로그 인

	    --------------------------------------------------------------
	   	Login		UID			Use
	    --------------------------------------------------------------
		setup		0	컴퓨터를 설정한다.
		sysadm		0	어떤 관리 기능을 수행한다.
		powerdown	0	컴퓨터를 끈다.
		checkfsys	0	화일 시스템 체크를 시작한다.
		makefsys	0	새로운 화일 시스템을 만든다.
		mountfsys	0	화일 시스템을 mount한다.
		umountfsys	0	화일 시스템을 umount한다.
	    --------------------------------------------------------------

	   * 시스템 로그 인

	    ------------------------------------------------------------------------------
	   	Login		UID			Use
	    ------------------------------------------------------------------------------
		root		0	
		daemon		1	시스템 daemon account는 backgrounding processing을
					제어한다.
		bin		2	bin account는 대부분의 명령을 제어한다.
		sys		3	sys account는 많은 시스템 화일을 소유한다.
		adm		4	adm account는 관리 화일들을 소유한다.
		uucp		5	이 account는 uucp의 object와 스풀된 데이타 화일을
					소유한다.
		lp		8	lp account는 프린터를 위한 스풀된 데이타 화일을
					소유한다.
		nuucp		9	nuucp account는 시스템에 로그 인하는 remote 
					machine에 의해 사용하고 화일 전송을 시작한다.
		sysadmin	13	이 account는 admintool과 같은 관리 툴을 소유한다.
	    ------------------------------------------------------------------------------

 2.2 Instructions for securing and controlling system access

	여기서는 시스템의 account의 접근을 추적하고 제어하기 위하여 passwd와 login 명령을
	어떻게 사용하는가에 대한 지시 사항을 설명한다.

   ▼ How to change,lock,or show status of passwords

	- to change your own password

	  * passwd를 친다.

		example% passwd

	- to change a user's password

	  * 루트로 passwd username를 친다.

		# passwd yhkim

	- to lock a user's password

		# passwd -n 10 -x 7 username

		min(-n 10)이 max(-x 7)보다 크기 때문에 패스워드는 lock이 걸리고 변화될 수 없다.
		사용자는 아직 그 기계에 로그 인 할 수 있으나 단지 루트만 이 패스워드를 바꿀 수
		있다.

	- to display information on passwords

		# passwd -s yhkim
		yhkim PS 6/13/92 1 90 7

		위의 보기는 만약 password againg을 할 수 있다면 yhkim에 관한 정버를 보여준다.
		만약 password againg을 하지 않는다면 단지 처음의 2필드만 나타난다.
		6개의 필드는 다음의 정보를 포함하고 lastchanged는 패스워드가 바뀐 마지막 시간을
		나타낸다.

		1) 로그 인 명(yhkim)
		2) 다음과 같은 패스워드의 상태
			
		   NP - 이 로그 인에는 패스워드가 없다.
	 	   LK - 로그 인이 lock이 되어있다.
		   PS - 어떤 다른 것

		3) 패스워드가 마지막으로 바뀐 날짜.( 6/13/92)
		4) 사용자가 passwd(1)을 바꿀 수 있기 전,lastchanged 후의 최대 날짜.
		5) 사용자가 강제로 passwd(1)을 바꿀 수 있을때까지,lastchanged 후의 최대 날짜.
		6) 패스워드가 바뀌어야만 하기 전까지의 경고 날짜.

		위의 보기는 yhkim이라는 사용자는 June 24,1992전에 패스워드를 바뀔 수 없고
		September 21,1992까지 바뀌어야만 한다.
		이 사용자는 패스워드가 소신되고 바뀌어야 한다고 경고 메세지를 볼 것이다.

		# passwd -s -a

		단지 허락된 사용자만 -a를 사용할 수 있다.

    ▼ How to enable and disable password aging

	- to enable password aging:

		# passwd -n min -x max -w warn username

		이 명령은 패스워드가 바뀌고(-n min) 패스워드가 유용한 날짜(-x max),패스워드가
		소실되기 전에 사용자가 경고를 받는 날짜들 사이의 최소 날짜를 설정한다.
		예)
		# passwd -n 1 -x 90 -w 7 yhkim

	- to diable password aging:

		# passwd -x -1 username

    ▼ How to force a user to change his password

		# passwd -f username

    ▼ How to diaplay login information

	- to display login status for a user:

		# logins -x -l username

	   예)  # logins -x -l yhkim
		yhkim           100     sunse           100     KYH
                        /usr/yhkim
                        /bin/ksh
                        PS 070592 -1 -1 -1

	- to show logins with no passwords:

		# logins -p
		woo             200     sunse           100     CHO JIN-WOO

    ▼ How to enable login logging

	# touch /var/adm/loginlog
	# chmod 600 /var/adm/loginlog
	# chgrp sys /var/adm/loginlog

    ▼ How to set up automatic account expiration

	useradd와 usermod는 단지 local machine에서 동작한다.
	네트워크에 사용자를 더하려면 admintool을 사용하라.

	- to set up expiration for a new account:

	   # useradd -e mm/dd/yy username

	   예) 다음은 July 31,1992에 소실되는 yhkim이라는 새로운 로그 인을 설정한다.

		# useradd -e 07/31/92 yhkim

	- to extend a login's expiration date:

	  # usermod -e newdate username

	  newdate는 새로운 소실될 날짜이다.

	  # usermod -e 09/10/92 yhkim

    ▼ How to disable and re-enable inactive accounts

	- to disable an inactive account:

  	  # usermod -f n username

	  예) # usermod -f 30 yhkim

	- to re-enable a disabled account:

	  # usermod -f 0 yhkim
	  # usermod -f 30 yhkim

     ▼ How to create a dial-up password

	1) # vi /etc/dialups
	2) # vi /etc/d_passwd
	3) # chown root /etc/dialups
	   # chown root /etc/d_passwd
	4) # chgrp root /etc/dialups
	   # chgrp root /etc/d_passwd
	5) # chmod 600 /etc/dialups
	   # chmod 600 /etc/d_passwd
	6) 암호화된 패스워드를 만든다.

		a. # useradd dummy
		b. # passwd dummy
		c. # grep dummy /etc/shadow > dummy.temp
		d. dummy.temp를 수정한다.
		   dummy.temp를 열고 암호화된 패스워드 필드를 제외한 모든 필드를 지운다.
		e. # userdel dummy
	7) /etc/d_passwd를 수정하라.
	   /etc/d_passwd를 열고 dummy.temp에서 암호화된 패스워드 필드를 읽는다.

    ▼ How to monitor and control su use

	- to monitor su use:
	 
	  1) # vi /etc/default/su
	  2) CONSOLE=/dev/console를 첨가한다.

	- to check the superuser log:

	  # more /var/adm/sulog

4. Securing the network

 4.1 About network security

	- firewall machines
	- packet smashing
	- remote logins
		/etc/hosts.equiv 
		/.rhosts
	- NFS distributed computing file system
	- DES encryption
	- secure NFS
	- secure RPC
	- Kerberos

 4.2 Instructions for administering network security

     ▼ How to search for and remove .rhosts files
     ▼ How to share and mount files with DES authentication

	- to share a file system with DES authentication

	  # share -F nfs -o secure /filesystem

	- to mount a file system with DES authentication

	  # mount -F nfs -o secure server:resource mountpoint

     ▼ How to set up an NIS+ client with secure NFS

	- to create a new key for root on a client:
	  1) /etc/nsswitch.conf를 수정하여 다음을 첨가한다.

	   publickey: nisplus

	  2) # nisinit -cH hostname
	  3) cred 데이타베이스에 클라이언트를 더한다.

	   # nissaddcred local
	   # nissaddcred des
	  4) keylogin으로 확인한다.

	  예)
	   # nisinit -cH pluto
	   # nissaddcred local
	   # nissaddcred des
	   # keylogin
	- to set up secure NIS+ for a user:

	   1)cred 데이타베이스에 사용자를 더한다.

	     	# nissaddcred -p netname -p nis_principalname
	
	   2) keylogin으로 확인한다.

	   예)
	 	# nissaddcred -p unix.1234@North.Abc.com -p george.North.Abs.COM des
		# keylogin

     ▼ How to set up an NIS client for secure NIS

	- to create a new key for root on a client:

	  1) 클라이언트에 루트로 로그 인 한다.
	  2) # newkey -h earth

	- to create a new key for a user:

	  1) # newkey -u george
	  2) # chkey

     ▼ How to share and mount files with kerberos authentication

	- to share a file system with kerberos authentication:

		# share -F nfs -o kerberos /filesys

	- to mount a file systen with kerberos authentication:

		# share -F nfs -o kerberos server:resource mountpoint

     ▼ How to acquire a kerberos ticket for root on a client

	- to acquire a ticket for a not-yet-mounted file system:

		# kinit root.hostname

		hostname은 클라이언트의 이름이다.

	- to acquire a ticket for a mounted file system:

		# ksrvrtgt root.hostname

    ▼ How to log in to kerberos service

	# kinit -l username

    ▼ How to list kerberos tickets

	# klist

    ▼ How to access a directory with kerberos authentication

	# cd /mountpoint

    ▼ How to destroy a kerberos ticket

	# kdestroy

5. Monitoring and controlling security using ASET

	SunOS 5.0은 Automated Security Enhancement Tool(ASET)을 포함한다.
	ASET은 손으로 해야할 일을 자동으로 함으로 시스템 보안을 조절하고 살필 수 있도록 하는데
	도움이 된다.

 5.1 about ASET

	ASET은 시스템의 보안을 살피고 제어할 수 있게 하는 관리 툴이다.
	사용자는 ASET이 수행할 보안 수준(security level) - low,medium과 high -을 지정한다.
	각 수준에서 ASET의 file-control 기능은 화일의 접근을 감소시키기 위하여 증가하고
	시스템의 보안을 강화한다.
	ASET은 시스템 화일들의 특정한 검사와 조정을 위한 7가지의 일(task)로 구성되어 있다.
	ASET은 허가를 강화하고 보안의 약점이 있는 화일의 내용을 검사하고 중요한 지역을 살핀다.
	ASET은 게이트 웨이(gateway)를 firewall machine의 기본적인 요구 사항을 적용함으로
	네트워크의 파수꾼이 되게 할 수 있다.
	ASET은 configuration을 위하여 master file들을 사용한다.
	Master files,reports와 다른 ASET 화일들은 /usr/aset에 있다.
	이 화일들은 당신 사이트의 요구에 맞도록 수정할 수 있다.
	각 일은 발견한 보안의 약점과 시스템 화일에 수정이 가해진 일을 보고한다.
	보다 높은 수준의 보안을 수행하면 ASET은 모든 시스템 보안의 약점을 수정할 것이다.
	만약 보안 문제를 수정할 수 없다면 그 문제를 보고한다.
	다음과 같이 ASET session을 시장할 수 있다.

	# aset

	또한 crontab에 넣어 주기적으로 수행할 수 있다.
	다음과 같은 것을 보다 자세히 설명할 것이다.

	* The ASET security level
	* The ASET task
	* The ASET reports
	* The ASET files
	* Configuring ASET
	* Restoring the system
	* Network operation using the NFS system

   1) The ASET security levels

	1. low security
	2. medium security
	3. high security

   2) The ASET tasks

	ASET tasks and Reports generated
	-------------------------------------------+-------------------------
		Task				   |	Report
	-------------------------------------------+-------------------------
	Set system files permissions		   | tune.rpt
	-------------------------------------------+-------------------------
	System files checklist			   | cklist.rpt
	-------------------------------------------+-------------------------
	User/Group checks			   | usrgrp.rpt
	-------------------------------------------+-------------------------
	System configuration files check	   | sysconf.rpt
	-------------------------------------------+-------------------------
	Environment check			   | env.rpt
	-------------------------------------------+-------------------------
	eeprom check				   | eeprom.rpt
	-------------------------------------------+-------------------------
	Firewall				   | firewall.rpt
	-------------------------------------------+-------------------------

    3) The ASET reports

	모든 보고서 화일들은 /usr/aset/reports에 있다.

	- ASET reports directory structure

	
					/usr/aset
					    |
		---------------------------------------------------------
		|			    |				|
	  masters			reports			      util
					    |
				-------------------------
				|           |		|
			0124_01:00   0123_01:00 <-----latest
					    |
					    |
		        -------------------------------------------------
			|	|	|	|	|	|	|
		firewall.rpt	| sysconf.rpt	| usrgrp.rpt	|   env.rpt
				|		|		|
			  tune.rpt	  eeprom.rpt	   cklist.rpt
		
	  두개의 보고서 디렉토리가 위의 보기에 있다.
	  
	  * 0124_01:00
	  * 0123_01:00

	  이것은 보고서가 만들어질때의 시간과 날짜를 가르킨다.
	  각 디렉토리의 이름은 다음의 형태이다.

		monthdate_hour:monite

	  각 디렉토리는 ASET을 수행한 보고서를 포함한다.
	  latest는 항상 가장 최근의 보고서를 포함항 디렉토리에 symbolic link되어 있다.

	- The report files format

	   다음은 usrgrp.rpt의 보기이다.

	   # more /usr/aser/latest/usrgrp.rpt

	   *** Begin User And Group Checking ***

	   Checking /etc/passwd ...

	   Checking /etc/shadow ...

	   Warning!  Shadow file, line 15, no password:
        	   woo::8202::::::

	   ... end user check.

	   Checking /etc/group ...

	   ... end group check.

	   *** End User And Group Checking ***

	4) The ASET files

	   ASET이 수행할때 파라메터를 설정하고 보안 수준을 정의하는데 사용하는 화일들은 
	   master file들과 환경 화일들이다.

	   * master files

		master file들은 tune files,alias files,checklist files이다.
		이 화일들은 /usr/aset/masters에 있다.

	   * tune file

		ASET은 보안 수준을 정의하기 위하여 3개의 master file들을 유지한다.
		- tune.low, tune.medium, tune.high
		이 화일들은 시스템 화일의 속성과 비교나 참조를 위해 사용한다.

	   * aliases file

		aliases file은 같은 ID를 공유하는 여러개의 사용자 account의 목록을 포함한다.
		사용자는 aliases file를 지정하기 위하여 UID_ALIASES 환경 변수를 사용할 수 있다.
		기본은 /usr/aset/masters/uid_aliases에 있다.

	   * checklist files 

		checklist comparison task(System Files Chaecklist)에 의해 사용되는 master file들은
		처음 ASET을 실행하거나 보안 수준을 바꾼 후에 ASET을 수행할때 만들어진다.
		System Files Chaecklist task는 선택된 시스템 디렉토리들안의 화일의 속성을 검사한다.
		이 일에 의해 검사되는 화일들은 다음의 환경 변수에 의해 정의된다.
		- CKLISTPATH_LOW, CKLISTPATH_MED와 CKLISTPATH_HIGH

	   * The environment file, asetenv

		환경 화일 , asetenv,는 ASET의 동작에 영향을 끼치는 파라메터를 정의하는 변수의
		목록을 포함한다.
		이 변수들은 ASET의 동작을 수정하기 위하여 바꿀 수 있다.	

	5) Configuring ASET

	   여기서는 ASET과 그것이 동작하는 환경을 어떻게 configure하는 가를 설명한다.
	   ASET은 그것의 행동을 제어하기 위하여 4개의 configuration 화일에 의존한다.

	   * 환경 화일:
		
		/usr/aset/asetenv

	   * master files:

		/usr/aset/tune.low
		/usr/aset/tune.med
		/usr/aset/tune.high

	  - modifying the environment file, asetenv

	    /usr/aset/asetenv는 2개의 주요 부분을 갖는다.
		
	    1. A user-configurable parameter section
	    2. A internal environment variables section

	    ASET을 설정하기 위하여 사용자는 user-configurable parameter section을 바꿀 수 있다.
	    그러나 internal environment variables section의 설정은 단지 내부에서 사용하기 위한 
	    것이고 수정될 수 없다.
	    사용자는 다음의 일로 user-configurable parameter section 안의 엔트리를 바꿀 수 있다.

	    * 어떤 일을 수행할 것인가를 선택.
	    * checklist task를 위한 디렉토리를 지정.
	    * ASET 실행을 스케줄한다.
	    * aliases 화일을 지정한다.
	    * NIS+ 테이블을 검사.

	   - choose which tasks to run: TASKS

		TASK="firewall env sysconf usrgrp tune cklist eeprom"

	   - specify directories for checklist task: CKLISTPATH

		* CKLISTPATH_LOW
		* CKLISTPATH_MED
		* CKLISTPATH_HIGH

	   - schedule ASET execution: PERIODIC_SCHEDULE
	   - specify an aliases file: UID_ALIASES
	   - extend checks to NIS+ tables: YPCHECK

	   ASET은 이런 일을 수행하기 위하여 3개의 master 화일들에 의존한다.
	   이 화일들은 tune file,aliases file,checklist file이다.
	   이것들은 /usr/aset/masters에 있다.

	   - modifying the tune files

	     3개의 master tune 화일들 - tune.low, tune.med, tune.high -은 주요한 시스템 화일에
	     접근을 쉽게(ease)하거나 조이기(tighten) 위하여 사용된다.
	     이것들은 사용자의 환경에 맞추기 위하여 수정할 수 있다.
	     이것은 사용자의 필요가 가장 맞는 보안을 성취하기 위하여 master tune-file setting을
	     바꾸거나,지우고,더하므로 수행된다.

	6) Restoring the system

	   aset.restore는 /usr/aset에 있다.
	   이것은 ASET에 의해 영향 받은 시스템 화일들은 전의 ASET(pre-ASET) 내용으로 복구한다.
	   ASET이 처음 실행될때 이것은 원래의 시스템 화일들을 저장한다.
	   aset.restore는 이 화일들은 원 상태로 놓는다.

	7) Network operation using the NFS system

	   일반적으로 ASET은 standalone에서 사용하나 네트워크의 부분인 기계에서도 사용할 수 있다.
	   또한 NFS distributed environment에서도 사용할 수 있다.

 5.2 Instruction for using ASET

    ▼ How to run ASET interactively

	- to initiate an ASET session:

		# /usr/aset/aset

	- to set the ASET security level:

		# /usr/aset/aset -l level

	- to name an ASET working directory:

		# /usr/aset/aset -d pathname

	예)
	
		# /usr/aset/aset -l med -d /usr/etc/aset

    ▼ How to use environment variables to set options

	ASET을 대화적으로(interactively) 수행할때 ASET 작업 디렉토리와 보안 수준을 지정하기
	위하여 ASETDIR과 ASETSECLEVEL이라는 환경 변수를 사용할 수 있다.

	- to set variables from a C shell

		# setenv VARIABLE value

	- to set variables from a Bourne shell or a Korn shell

		# VARIABLE=value
		# export VARIABLE

	예)
		# setenv ASETDIR /usr/etc/asetdir
		# setenv ASETSECLEVEL med
		# aset

    ▼ How to set up ASET to run periodically

	ASET 스케줄은 crontab에서 결정한다.

	- to start ASET running periodically

		# aset -p

	- to confirm the schedule

		# crontab -l root

	- to remove the crontab entry

		# crontab -e root

	- to change the default setting

		1. /usr/aset/aserenv를 연다.
		2. PERIOD_SCHEDULE 환경 변수를 갖는 줄에 새로운 스케줄을 넣는다.
		3. # /usr/aset/aset -p
			-p 옵션은 crontab에 엔트리를 넣는다.
		4. # crontab -e root
		5. 원하지 않는 엔트리를 지운다.

	  asetenv안의 다음의 엔트리는 매 월,수,토요일,아침 1시에 수행되도록 한다.

		PERIOD_SCHEDULE=0 1 * * 1,3,5

    ▼ How to manage the ASET reports

	# cd /usr/aset/reports/latest
	# more *.rpt

    ▼ How to collect reports on a server

	1. server에 디렉토리를 설정한다.

		a. # cd /usr/aset
		b. # mkdir rptdir
		c. # cd rptdir
		d. # mkdir client_rpt

	2. 클라이언트의 서브 디렉토리를 export하라.

		a. /etc/dfs/dfstab을 수정하라.
	3. # shareall
	4. 각 클라이언트에서 다음의 명령을 수행하라.

		# mount server:/usr/aset/client_rpt /usr/aset/masters/reports


 5.3 Reference material for using ASET

	여기서는 환경 변수와 보고서 화일의 형태를 보여준다.

	Environment variables and their meanings
	--------------------------------+--------------------------------------
	Environment variable		| 	specifies
	--------------------------------+--------------------------------------
	ASETDIR(use shell)		| ASET working directory
	--------------------------------+--------------------------------------
	ASETSECLEVEL(use shell)		| security level
	--------------------------------+--------------------------------------
	PERIOD_SCHEDULE			| periodic schedule
	--------------------------------+--------------------------------------
	TASKS				| tasks to run
	--------------------------------+--------------------------------------
	UID_ALIASES			| aliases file
	--------------------------------+--------------------------------------
	YPCHECK				| extends check to NIS and NIS+
	--------------------------------+--------------------------------------
	CKLISTPATH_LOW			| directory lists for low security
	--------------------------------+--------------------------------------

6. Introduction to performance

 6.1 About performance

    6.1.1 Managing system resources

	* CPU
	* I/O devices
	* Memory

	- Managing processes

	  timex 명령

	  # timex sleep 20
	  real 	20.60
	  user 	0.04	
	  sys  	0.37

	  이 보기에서 명령을 수행하는데 20.60의 시간이 걸렸으나 실제 CPU 시간은 0.41이다
	  - 코드를 실행하는데 0.04,O/S에 의해 사용된 0.37이 걸렸다.

	- the at command

	   # at 0330
	   command1
	   command2
	   command3
	   CTRL-D

	   # at -f script
	   # at -l
	   # at -r
	   
    6.1.2 Monitoring tools

	* sar와 sadc
	* ps
	* performance meter
	* vmstat & iostat
	* swap
	* netstat & nfsstat

   6.1.3 Kernel parameters

	몇개의 커널 파라메터들은 maxusers의 값에따라 그들의 기본 값을 설정한다.
	maxusers가 영향을 끼치는 파라메터는 다음과 같다.

	----------------------------------------------------------------------
	ncallout	the size of the callout table
	ufs_ninode	the size of the inode table
	ncsize		the size of the directory name lookup cache
	max_procs	the size of the process table
	ndquot		the number of disk quota structures
	maxuprc		the number of user processes
	----------------------------------------------------------------------


	Default setting for kernel parameters
	----------------------------------------------------------------------
	kernel table	variable	default setting
	----------------------------------------------------------------------
	Callout		ncallout	16 + max_nprocs
	Inode		ufs_ninode	max_nprocs + 16 + maxusers + 64
	Name cache	ncsize		max_nprocs + 16 + maxusers + 64
	Process		max_nprocs	10 + 16 * maxusers
	Quota table	ndquot		(maxusers * NMOUNT)/4 + max_nprocs
	User process	maxuprc		max_nprocs - 5
	----------------------------------------------------------------------

7. Managing process

 7.1 About monitoring processes

	ps 명령은 시스템에서 실행되는 프로세서의 실행 상태를 살필 수 있다.
	여러가지 옵션으로 다음의 정보를 볼 수 있다.

	* 프로세서의 현재 상태
	* 프로세서의 ID
	* 부모(parent) 프로세서의 ID
	* 사용자 ID
	* scheduling class
	* priority
	* 프로세서의 주소
	* 사용된 메모리
	* 사용된 CPU 시간

	다음은 ps에 의해 보고되는 각 필드를 설명한다.

	-----------------------------------------------------------------------------
	Field			Description
	-----------------------------------------------------------------------------
	F	프로세서의 현재 상태를 가르킨다.
		00	프로세서가 끝마쳐지고 프로세서 테이블을 자유롭게 놓는다.
		01	프로세서가 시스템 프로세서이고 항상 메모리에 있다.
		02	프로세서가 그것의 부모에 의해 추적(trace)된다.
		04	프로세서가 그것의 부모에 의해 추적되고 멈춰진다.
		08	프로세서가 시스널에 의해 깨워지지 않는다.
		10	프로세서가 현재 메모리에 있고 event가 끝날때까지 잠귄다(locked)
		20	프로세서가 swap되어 질 수 없다.
	S	다음 문자중 하나를 가르키며 프로세서의 현재 상태
		O	프로세서가 현재 실행된다.
		S	프로세서가 잠잔다;I/O event가 끝날때까지 기다린다.
		R	프로세서가 수행할 준비가 된다.
		I	프로세서가 idle 상태다
		Z	이것은 zombie 프로세서이다.
		T	부모가 이 프로세서를 추적하기 때문에 멈춰진다.
		X	프로세서가 더 많은 메모리를 쓰기위해 기다린다.
	UID	프로세서 소유자의 사용자 ID
	PID	프로세서의 구별 번호
	PPID	부모 프로세서의 구별 번호
	C	이것은 스케줄링에 대한 프로세서의 사용을 보여준다.
	CLS	프로세서가 속해 있는 스케줄링 급수(scheduling class)를 보여준다.
	PRI	이것은 프로세서의 스케줄링 우선 순위를 보여준다.
	NI	프로세서의 nice 번호이다.
	ADDR	프로세서의 메모리 주소
	SZ	프로세서에 의해 요구된 가상 메모리의 양을 보여준다.
	WCHAN	프로세서가 잠자고 있을때 event의 주소를 보여준다.
	STIME	프로세서의 시작 시간.
	TTY	프로세서가 시작한 터미날.	
	TIME	프로세서가 시작한 이후,프로세서에 의해 사용된 전체 CPU 시간.
	COMD	프로세서를 만든 명령.
	-----------------------------------------------------------------------------

	- Changing the priority of a timesharing process with nice

		# nice [+|-n] command

 7.2 Instruction for controlling processes

    ▼ How to change the priority of a process

	- to lower the priority of a process

	  * 다음 명령중 하나를 사용하라.

	    nice command_name
	    nice +4 command_name
	    /usr/bin/nice command_name
	    /usr/bin/nice -10 command_name

	- to raise the priority of a process

	  nice -10 command_name
	  /usr/bin/nice --10 command_name

    ▼ How to get basic information about process classes

	- to display process class and scheduling parameters

	   # priocntl -l
	   CONFIGURED CLASSES
	   ==================

	   SYS (System Class)

	   TS (Time Sharing)
        	   Configured TS User Priority Range: -20 through 20

	- ti display the global priority of a process

	   # ps -ecl

    ▼ How to designate priority with priocntl

	- to start a process with a designated priority

	  # priocntl -e -c TS -p 20 file -name core -print

	- to change the scheduling parameters of a running timeshare process

	  priocntl -s [-m userlimit] [-p userpriority] -i idtype idlist

	  # priocntl -s -m 20 -i pid 951

    ▼ How to change the class of a process

	priocntl -s -c class -i idtype idlist

	# priocntl -s -c RT -i uid 15249

7. Monitoring performance

 7.1 About monitoring performance

   - The vmstat command

	# vmstat 5
	procs     memory              page               disk       faults     cpu
 	r b w  swap  free  re  mf  pi  po  fr  de sr s3 -- -- --  in  sy  cs us sy id
 	0 0 3 28116   660   0   3   2   1   2   0  1  1  0  0  0  15  52  85  3  3 94
 	1 0 5 24400   260   0   3   4   0   0   0  0  1  0  0  0  11  40  75  3  3 95
 	1 0 5 24400   260   0   0   0   0   0   0  0  0  0  0  0   3  41  75  4  2 94
 	1 0 5 24400   260   0   0   0   0   0   0  0  0  0  0  0   1  60  81  6  3 91

	vmstat의 필드는 다음과 같은 의미를 갖는다.

	procs는 다음 상태 각각에 대한 프로세서의 수를 보고한다.

		* r	in the run queue
		* b 	blocked,자원을 기다린다.
		* w	swapped,자원의 이용이 끝나기를 기다린다.

	memory는 실제와 가상 메모리의 사용을 보고한다.

		* swap	현재 이용할 수 있는 swap의 공간.
		* free	free list의 크기

	page는 초당 page fault와 paginf activity를 보고한다.

		* re	pages reclaimed
		* mf	minor faults
		* pi	kilobytes paged in
		* po	kilobytes paged out
		* fr	kilobytes freed
		* de	short-term memory shortfall(anticipated)

	disk는 초당 디스크 동작의 수이다.
	faults는 trap/interrupt율을 보고한다.(초당)
		
		* in	device interrupts(not from the clock)
		* sy	system faults per second
		* id	idle time

	cpu는 CPU 시간의 사용을 보고한다.

		* us	user time
		* sy	system time
		* id	idle time


	# vmstat -s

	swapping은 vmstat -s를 사용한다.

	# vmstat -c

	cache flushing은 vmstat -c를 사용한다.

	# vmstat -i

	interrupts는 vmstat -i를 사용한다.

   - The iostat command

	iostat 명령은 디스크의 입,출력에 관한 정보를 보여준다.

	# iostat 5
	      tty          sd3          cpu
 	tin tout bps tps serv  us sy wt id
   	1   19   6   1   52   3  3  1 92
   	0    7  22   2   45  16  9  2 74
   	2   10   0   0    0   8  5  0 86
   	2  311   0   0    0   8  5  0 87

	처음 줄은 부팅 이후의 통계를 보여준다.
	각 디스크에 대해 다음의 정보를 보여준다.

		* bps	blocks per second
		* tps	transactions per second
		* mps	milliseconds per seek

	확장된 디스크 통계를 갖기 위해서는 iostat -xtc를 사용한다.

	# iostat -xtc
	                                 extended disk statistics       tty         cpu
	disk      r/s  w/s   Kr/s   Kw/s wait actv  svc_t  %w  %b  tin tout us sy wt id
	sd3       0.5  0.2    3.6    2.2  0.0  0.0   51.8   1   2    1   20  3  3  1 92

		* r/s	reads per second
		* w/s	writes per second
		* Kr/s	kilobytes per second
		* wait	number of transactions waiting for service(queue length)
		* actv	average number of transactions avtively services
		* svc_t	average service time,in millisecond
		* %w	percentage of time the queue is not empty
		* %b	percentage of time the disk is busy

	- The df command

		# df -k

	- The profil command
	- The performance meter
	- Automatic collection of system activity data

	  3개의 명령,sadc,sa1와 sa2가 있다.
	  sadc는 주기적으로 시스템의 활동에 대한 데이타를 모우고 binary format으로 저장한다.
	  - 24시간 간격으로 하나의 화일
	  사용자는 주기적으로 실행하기 위하여 sadc를 설정할 수 있고 시스템이 멀티 사용자 모드로
	  들어갈때마다 수행할 수 있다.
	  이 데이타 화일은 /usr/adm/sa에 놓는다.
	  이 명령의 형태는 다음과 같다.

	  /usr/lib/sa/sadc [t n] [ofile]

	  * running sadc when booting up

	    부팅시에 sadc를 수행하기 위하여 /etc/inet.d/perf 화일에 매일의 데이타를 기록하는 
	    다음의 줄을 포함해야만 한다.

		su sys -c "/usr/lib/sa/sadc /usr/adm/sa/sa`date +5d`

	  * running sadc periodically with sa1

	     주기적으로 기록하기 위하여 규칙적으로 sadc를 수행할 필요가 없다.
	     이것을 하는 가장 간단한 방법은 sa1이라는 shell script를 /var/spool/cron/sys에
	     넣는 것이다.
	     이 스크립트는 sadc를 부르고 매일의 데이타를 /var/adm/sa/sa[dd]에 쓴다.
	     이것은 다음의 형태를 갖는다.

	     /usr/lib/sa/sa1 [t n]

	  * producing reports with sa2

	     sa2라는 또 다른 shell script는 binary data file보다는 보고서를 만든다.
	     sa2는 sar 명령을 부르고 ASCII 출력을 보고서 화일에 쓴다.

	- collecting system activity data with sar

	  sar 명령은 시스템 활동 데이타 그 자체를 모우고 sadc에 의해 만들어진 매일의 활동 화일에서
	  모아진 것을 보고하는데 사용한다.
	  sar 명령은 다음의 형태를 갖는다.

	  sar [-abcdgkmpqruvwxyADSC] [-o file] t [n]
	  sar [-abcdgkmpqruvwxyADSC] [-s time] [-e time] [-i sec] [-f file]

	  # sar 10 2

	
	  sar의 옵션과 행동은 다음과 같다.

	  ------+------------------------------------------------------------------
	 Optione|	Operation
	  ------+------------------------------------------------------------------
	  -a	| checks file access operations
	  ------+------------------------------------------------------------------
	  -b	| checks buffer activity
	  ------+------------------------------------------------------------------
	  -c	| checks system calls
	  ------+------------------------------------------------------------------
	  -d	| checks disk activity
	  ------+------------------------------------------------------------------
	  -g	| checks page-out and memory freeing
	  ------+------------------------------------------------------------------
	  -k	| checks kernel memory allocation
	  ------+------------------------------------------------------------------
	  -m	| checks interprocess communication
	  ------+------------------------------------------------------------------
	  -p	| checks page-in and fault activity
	  ------+------------------------------------------------------------------
	  -q	| checks queue activity
	  ------+------------------------------------------------------------------
	  -r	| checks unused memory
	  ------+------------------------------------------------------------------
	  -u	| checks CPU utilization
	  ------+------------------------------------------------------------------
	  -v	| checks system table status
	  ------+------------------------------------------------------------------
	  -x	| reports remote file-sharing activity
	  ------+------------------------------------------------------------------
	  -w	| checks swapping and switching volume
	  ------+------------------------------------------------------------------
	  -y	| terminal terminal activity
	  ------+------------------------------------------------------------------
	  -A	| reports overall system performance;same sa entering all options
	  ------+------------------------------------------------------------------
	  -C	| reports RFS buffer-caching overhead
	  ------+------------------------------------------------------------------
	  -D	| reports CPU utilization by RFS and local activity(same as -Du)
	  ------+------------------------------------------------------------------
	  -Db	| reports buffer-cache use for RFS and local activity
	  ------+------------------------------------------------------------------
	  -Dc	| reports system calls separately for RFS and local activity
	  ------+------------------------------------------------------------------
	  -Du	| reports CPU utilization by RFS and local activity
	  ------+------------------------------------------------------------------
	  -S	| reports RFS server and request status
	  ------+------------------------------------------------------------------

	- Checking file access with sar -a
	- Checking buffer activity with sar -b
	- Checking system calls with sar -c
	- Checking disk activity with sar -d
	- Checking page-out and memory with sar -g
	- Checking kernel memory allocation with sar -k
	- Checking interprocess communication with sar -m
	- Checking page-in activity with sar -p
	- Checking queue activity with sar -q
	- Checking unused memory with sar -r
	- Checking CPU utilixation with sar -u
	- Checking system table status with sar -v
	- Checking swapping with with sar -w
	- Checking terminal activity with sar -y
	- Checking overall system performance with sar -A

 7.2 Instruction for minitoring performance

    ▼ How to set up automatic data collection

	1. /etc/init.d/perf 화일을 연다.
	2. 다음줄을 uncomment한다.

		# su sys -c "/usr/lib/sa/sadc /var/adm/sa/sa`date +%d`"

	3. /var/spool/cron/crontab/sys를 연다.
	4. 다음줄을 uncomment한다.

		# 0 * * * 0-6 /usr/lib/sa/sa1
		# 20,40 8-17 * * 1-5 /usr/lib/sa/sa1

    ▼ How to display statistics with vmstat

	# vmstat 5
	# vmstat -S
	# vmstat -c

    ▼ How to display I/O statistics with iostat

	# iostat 5

9. A guide to network performance

	- The ping command

		# ping elvis
		# ping -s pluto

	- The spray command

		# spray -c 100 -d 20 0 -l 2048 pluto

	- The snoop command
	- The netstat command

		# netstat -i
		# netstat -s
		# netstat -r

	- The nfsstat command

		# nfsstat -c
		# nfsstat -m 

10. Setting up and maintaining accounting

 10.1 Overview of accounting

	이것이 설정되면 system accounting은 대부분 자체로 수행된다.
	accounting 보고서를 만드는 쉘 스크립트는 /usr/adm/acct와 /usr/lib/acct에 만든다.
	자동적으로 수핸하는 것은 crontab에 설정한다.
	다음은 accounting이 어떤 일을 하는가를 설명한다.

	* 시스템이 시작하고 끝나는 사이에 시스템 사용에 관한 원초적 데이타(raw data)가
	  accounting 화일에 모아진다.
	* 주기적으로,보통 하루에 한번,/usr/lib/acct/runacct는 각종 accounting 화일에서
	  데이타를 모우고 prdaily는 이 데이타를 프린트한다.
	* monacct는 매달의 데이타를 만들고 제공한다.

   10.1.1 Types of accounting

	1) Connect accounting

	  /var/adm/wtmp에 저장한다.
	  wtmp 화일의 엔트리는 다음의 정보를 포함한다: 사용자의 로그 인 이름,디바이스 이름,
	  프로세서 ID,엔트리의 형태(type),엔트리가 만들어질때의 time stamp

	2) process accounting

	  프로세서가 죽울때마다 exit 프로그램이 데이타를 모우고 그것을 /var/adm/acct에 쓴다.
	  acct 화일은 ckpacct에 의해 기본 500 blocks의 크기를 갖는다.
	  만약 ckpacct가 /var/adm/acct 화일이 500 blocks보다 크다면 이것을 /var/adm/pacct[n]으로
	  옮긴다.

	3) disk accounting

	  이 데이타는 dodisk라는 쉘 스크립트에 의해 모아진다.
	  dodisk는 시스템에서 각 화일의 정보를 모우기 위하여 acctdusg와 diskusg를 부른다.
	  acctdusg는 모든 디스크 accounting 정보를 모운다.

	  경고: dodisk에 의해 저장된 정보는 /var/adm/acct/nite/disktacct에 저장된다.
	        이 정보는 다음에 dodisk를 수행할때 overwrite된다.

	4) fee calculations

	  만약 화일보구와 remote 프린팅같은 특별한 서비스에 가격을 매긴다면 chargefee를 사용 할 
	  수 있다.
	  이 데이타는 /var/adm/fee에 기록한다.

   10.1.2 accounting program

	/usr/luib/acct에 있다.
	acctcom은 /usr/bin에 있다.
	/usr/lib/acct/startup은 시스템이 multi mode에서 accounting 프로세서를 초기화한다.
	
 10.2 Setting up accounting

	시스템이 multi mode에서 accountin을 설정하기 위하여 다음의 화일들을 수정하거나
	만들어야 한다.

	* /etc/rc0.d/K22acct(create)
	* /etc/rc2.d/S22acct(create)
	* /var/spool/cron/crontab/adm(modify)
	* /var/spool/cron/crontab/root(modify)

	만약 shutdown동안 accounting을 마치기를 원한다면 /etc/rc0.d/K22acct를 /etc/init.d/acct와
	링크하라.

	# ln -s /etc/init.d/acct /etc/rc0.d/K22acct

	만약 multi mode에서 accounting을 시작하려면 /etc/rc2.d/S22acct와 /etc/init.d/acct를
	링크하라.

	# ln -s /etc/init.d/acct /etc/rc2.d/S22acct

	accounting에 필요한 대부분의 엔트리는 /var/spool/cron/crontabs/adm에 넣는다.
	이 데이타베이스에서 주기적으로 ckpacct,매일 runacct,monacct를 수행한다.

	#ident  "@(#)adm        1.3     89/12/12 SMI"   /* SVr4.0 1.2   */
	#
	# The adm crontab file should contain startup of performance collection if
	# the profiling and performance feature has been installed.
	#
	#
	# more adm
	#ident  "@(#)adm        1.3     89/12/12 SMI"   /* SVr4.0 1.2   */
	#
	# The adm crontab file should contain startup of performance collection if
	# the profiling and performance feature has been installed.
	#-------------------------------------------------------------------------
	0 * * * * /usr/lib/acct/ckpacct
	30 2 * * * /usr/lib/acct/runacct 2> /var/adm/aacct/nite/fd2log
	30 9 * * 5 /usr/lib/acct/monacct

	dodisk는 root crontab인 /var/spool/cron/crontabs/root에 첨가한다.

	#ident  "@(#)root       1.3     89/12/12 SMI"   /* SVr4.0 1.1.3.1       */
	#
	# The root crontab should be used to perform accounting data collection.
	#
	0 2 * * 0,4 /etc/cron.d/logchecker
	5 4 * * 6   /usr/lib/newsyslog
	#------------------------------------
	30 22 * * 4 /usr/lib/acct/dodisk

 10.3 Daily accounting

	여기에는 SunOS system accounting가 어떻게 작동되는 가를 한단계 한단계 요약했다.

	1) multiuser mode로 갈때 /usr/lib/acct/startup를 수행한다.
	   startup은 accounting을 하기 위하여 여러개의 다른 프로그램은 수행한다.
	2) acctwtmp 프로그램은  /var/adm/wtmp에 "boot"라는 기록을 한다.
	   다음은 어떻게 raw accounting data를 모우고 어디에 저장하는 가를 보여준다.

	   -------------------------------------------------------------------------
	   File(in /var/adm)	Information		Written By	Format
	   -------------------------------------------------------------------------
	   wtmp			connect sessions	login,init	utmp.h
	   			changes			date
				reboots			acctwtmp
				shutdowns		shutacct shell
	   pacctn		processes		kernel(when	acct.h
							process end)

							turnacct switch(create a new
							file when the old one reaches
							500 blocks)
	   fee			special charges		chargefee	acct.h
	   acct/nite/disk	disk space used		dodisk		tacct.h
	   tacct
	   -------------------------------------------------------------------------

	3) on 옵션과 함께 turnacct는 process accounting을 시작한다.
	    특별히 turnacct는 /var/adm/pacct를 아규먼트로 accton을 실행한다.
	4) remove 쉘 스크립트는 저장된 pacct와 runacct에 의해 sum 디렉토리에 남아있는 wtmp
	   화일을 "clean up"한다.
	5) login과 init는 /var/adm/wtmp에 connection session들을 기록한다.
	   어떤 날짜의 변화는  /var/adm/wtmp에 쓴다.
	   reboot과 shutdown도 /var/adm/wtmp에 기록된다.
	6) 프로세서가 끝나면 커널은 프로세서당 하나의 기록을 /var/adm/pacct에 acct.h의 형식으로
	   기록한다.

	두개의 프로그램은 로그 인에 의해 디스크의 사용을 추적한다.: acctdusg와 diskusg
	이것들은 dodisk라는 쉘 스크립트에 의해 불려진다.
	매 시간 cron은 ckpacct를 수행하여 /var/adm/pacct가 500 blocks을 초과하는 가를 검사한다.
	만약 초과하면 turnacct switch가 수행된다.(이 프로그램은 pacct를 옮기고 새로운 것을
	만든다)
	만약 shutdown을 사용하여 shutdown을 하면 shutacct가 자동적으로 실행된다.
	shutacct는 process accounting가 끝난 이유를 /var/adm/wtmp에 기록한다.
	다음에 runacct가 다시 수행되면 이 새로운 기록이 취해지고 전체 accounting 기록과 합쳐진다.
	
	1) runacct는 cron에 의해 매일 밤 실행된다.
	   runacct는 accounting 화일을 다룬다: /var/adm/pacct[n],/var/adm/wtmp,/var/adm/fee,
	   /var/adm/acct/nite/disktacct
	2) /usr/lib/acct/prdaily는 runacct에 의해 모아진 매일의 accounting 정보를 
	   /var/adm/acct/sum/rprt.MMDD에 쓰기 위하여 runacct에 의해 하루 단위로 수행된다.
	3) monacct는 한달 단위로 수행된다.

 10.4 The runacct program

	runacct는 주로 한가한 시간에 cron에 의해 불려진다.
	runacct는 accounting 화일을 다루고,연결,디스크,fee를 취급한다.
	이것은 또한 prdaily와 monacct에 의해 사용될 매일의 정보와 축적된 정보를 제공한다.
	runacct 쉘 스크립트는 에러가 발생하면 화일이 손상되지 않도록 주의 하여야 한다.
	일련의 보호 장치가 에러를 인식하기 위하여 사용되고 단시간에 다시 시작할 수 있도록 한다.
	이것은 active라는 화일에 메세지를 씀으로 그것의 과정을 기록한다.(runacct에 의해 사용되는
	화일들은 달리 지정하지 않는다면 /var/adm/acct/nite에 있다고 가정한다.)
	runacct가 실행하는 동안 모든 진단 출력은 fd2log에 쓴다.
	runacct가 불려질때 이것은 lock과 lock1이라는 화일을 만든다.
	이 화일들은 동시에 runacct를 수행하지 않도록 한다.
	만약 이 화일들이 runacct가 불려질때 있으면 에러 메세지를 발생한다.
	lastdate 화일은 runacct가 마지막으로 불려진 달과 날짜를 포함하고 하루에 한번 이상 수행 할
	수 없도록 한다.
	만약 runacct가 에러를 발견하면 메세지는 콘솔에 쓰고 root와 adm에 메일을 보내고 lock들을
	지우고 diagonostic 화일들을 저장하고 실행을 끝낸다.

   10.4.1. Reentrant states of the runacct script

	runacct가 다시 시작하기 위하여 processing은 여러개의 상태(state)로 나누어 질 수 있다.
	statefile은 끝마친 마지막 상태를 추적하기 위하여 사용된다.
	각 상태가 끝나면 statefile은 다음 상태를 반영하기 위하여 갱신된다.
	상태에 대한 프로세싱이 끝난 후,statefile 읽혀지고 다음 상태가 수핸된다.
	runacct가 CLEANUP 상태에 도달하면 lock들이 지워지고 끝난다.
	상태는 다음과 같이 수행된다.

	SETUP		이 명령,turnacct switch,은 새로운 pacct 화일을 만들기 위하여 수행된다.
	WTMPFIX		wtmpfix 프로그램은 정확성을 위하여 nite 디렉토리에 wtmp.MMDD를 검사한다.
	CONNECT		accton은 cpacct에 connect accounting record를 기록하기 위하여 사용한다.
	PROCESS		acctprc는 /var/adm/Spacctn.MMDD(process accounting file)를 전체 accounting
			기록 화일인 ptacctn.MMDD로 변환하는데 사용된다.
	MERGE		process accounting 기록을 connect accounting 기록과 합쳐 dayacct를 반든다.
	FEES		화일,fee,로부터 ASCII tacct 기록을 dayacct에 합친다.
	DISK		만약 dodisk를 수행하면 diskacct를 만들고 화일을 dayacct에 합치고 diskacct를
			/tmp/disktacct.MMDD로 옮긴다.
	MERGETACCT	dayacct를 sum/tacct와 합친다.
	CMS		acctcms는 몇번 실행한다.
			acctcms는 Spacct[n]을 사용하여 명령 요약을 만들기 위해 처음 실행되고 이것을
			sum/daycms에 쓴다.
			acctcms는 sum/daycms을 sum/cms에 합친다.
			마지막으로 acctcms는 sum/daycms와 sum/cms로부터 각각 nite/daycms와 
			nite/cms(ASCII command summary file)를 만들기 위하여 실행된다.
			lastlogin은 /var/adm/acct/sum/loginlog를 만든다.
	USEREXIT	어떤 installation-dependent(local) accounting program은 이 시점에 포함될 수
			있다.
			runacct는 /usr/lib/acct/runacct.local로 불려질 수 있다.
	CLEANUP		임시 화일을 지우고 prdaily를 수행하고 출력을 sum/rpt.MMDD에 저장하고 lock을
			지우고 빠져나온다.

   10.4.2. Files produced bu runacct

	runacct가 만든 다음의 화일( /var/adm/acct에 있는)들은 관심을 가져야 한다.

	nite/lineuse	라인의 사용을 보고하기 위하여 이 화일을 사용한다.
	nite/dayacct	전체 accounting 화일.
	sum/tacct	각 날짜의 nite/dayacct을 합친 화일.
	sum/daycms	한 날에 사용된 명령을 저장.
	sum/cms		각 날에 사용된 명령을 합친 화일.
	sum/loginlog	로그 인을 저장.
	sum/rprt.MMDD	각 날의 보고서를 저장.

 10.5 Fixing corrupted files

	- Fixing wtmp errors

	  ▼ How to fix wtmp errors

		1) # cd /vat/adm/acct/nite
		2) # fwtmp wtmp.MMDD xwtmp
		    fwtmp는 이진 화일인 wtmp.MMDD를 ASCII 화일인 xwtmp로 변환 시킨다.
		3) xwtmp를 수정한다.
		   망가진 화일을 지우거나 날짜가 바뀌고 시작한 모든 기록을 지운다.
		4) # fwtmp -ic xwtmp wtmp.MMDD

	- Fixing tacct errors

	   ▼ How to fix tacct errors

		1) # cd /var/adm/acct/sum
		2) # acctmerge -v tacct.MMDD xtacct
		3) xtacct를 수정한다.
		   잘못된 기록을 제거하고 중복된 기록을 다른 화일에 쓴다.
		4) # acctmerge - xtacct tacct.MMDD
		5) # acctmerge tacctprv tacct.MMDD

 10.5 Restarting runacct

	- to start runacct

		# nohup runacct 2> /var/adm/acct/nite/fd2log

	- to restart runacct

		# nohup runacct 0601 2> /var/adm/acct/nite/fd2log

	- to restart runacct in a specific state

		# nohup runacct 0601 WTMPFIX 2> /var/adm/acct/nite/fd2log

 10.6 Billing users

	chargefee는 file restore와 같은 사용자에게 특정한 서비스에 요금을 부과하기 위해 fee라는
	화일에 저장한다.
	이 화일은 매일 runacct에 의해 만들어진다.

	- to register special fees

		# chargefee login_name amount

 10.7 Daily accounting reports

	- daily report

		p168 ~ p169

	- daily usage report

		p169 ~ p170

	- daily command summary

		p171 ~ p173

	- total command summary

		p174 

	- last login report

		p175

 10.8 Looking at the pacct file with acctcom

	acctcom를 사용하여 /var/adm/pacct[n]의 내용을 살펴볼 수 있다.

 10.9 Accounting files

	/var/adm은 실제 데이타를 모운 화일을 포함하고 adm에 의해 소유된다.

 10.10 Quick reference to accounting

	- to start accounting
		
		# /usr/lib/acct/startup

	- to turn off accounting

		# /usr/lib/acct/shutacct

	- to switch the pacct file to the pacct[n] file

		# /usr/lib/acct/ckpacct

	- to examine the contents of pacct

		# /bin/acctcom

	- to charge a fee

		# /usr/lib/acct/chargefee login_name amount

	- to process accounting files into a daily summary

		# /usr/lib/acct/runacct 2 > /var/adm/acct/nite/fd2log

	- to do disk accounting

		# /usr/lib/acct/dodisk

	- to create a monthly accounting report

		# /usr/lib/acct/monacct fiscal_number

	- to print tacct.h file in ASCII format

		# /usr/lib/acct/prtacct filename


Revision History
Created        on Jan  21 ,1993