UID, uid (유저아이디) : OS가 각 사용자에게 부여한 번호

GID, gid (그룹아이디) : OS가 각 그룹에게 부여한 번호

슈퍼유저(관리자) : root

시스템유저 : 서비스나 기타 OS에 운영에 필요한 사용자

일반유저   : 로그인하는 사용자  UID >= 500 /etc/login.defs


사용자를 생성할 때 저장되는 파일 : 

/etc/{passwd,shadow,group}


사용자를 생성할 때 변화되는 내용 : 

1. /etc/{passwd,shadow,group} 한 줄 추가

2. /home/사용자명 디렉토리가 생성

3. /var/spool/mail/사용자명  메일 스풀파일이 생성


/etc/defaults/useradd, /etc/login.defs 정의 


/etc/shells 


bin:x:1:root,bin,daemon


사용자명은 OS 전혀 상관없다. 오로지 UID 사용자를 판단한다.

/etc/passwd 비밀번호 필드의 x 를 지우면 비밀번호가 있어도 자동로그인 확인


UID : 0 

username : abc

passwd : 1234 


# useradd -o -u 0 abc

# echo 1234 | passwd --stdin abc

# ssh abc@localhost

# vipw

ksw:x:0:0:root:/root:/bin/bash


ksw:$6$YMrkwzHL$L ...



'OS > [Linux] CentOS' 카테고리의 다른 글

[CentOS] 14. 패키지 관리  (0) 2016.07.10
[CentOS] 13-2. 사용자 생성  (0) 2016.07.10
[CentOS] 13. 사용자관리  (0) 2016.07.10
[CentOS] 12. HDD 추가하기  (0) 2016.07.10
[CentOS] 11. vi 편집  (0) 2016.07.10

#############################################

## 주제 : 사용자와 그룹                    ##

#############################################


o 사용자의 종류

슈퍼유저(관리자) : 로그인 O, 시스템을 관리하는 사용자           (uid 0)

시스템유저 : 로그인 X, 데몬이나 특정 프로그램을 실행하는 사용자 (uid 1 ~ 100)

일반유저 : 로그인 O, 자신의 디렉토리에 자료를 관리하는 사용자   (uid 500 ~ 65534)


Linux 관리자 계정: root  root

Windows 관리자 계정: administrator administrators


시스템유저 : root 가 생성하지 않아도 설치시에 이미 만들어져 있다.

일반유저   : root 가 반드시 만들어야 한다.


사용자마다 번호를 부여받는다 : UID (유저아이디라고 읽는다.)


로그인 여부 : /bin/false , /sbin/nologin  X

로그인 여부 : /bin/bash, /bin/sh, /bin/ksh, /bin/csh O


로그인 여부는 /etc/passwd 의 마지막 필드에 정의되어 있다.


o 사용자를 생성하면

/etc/passwd, /etc/group, /etc/shadow 파일이 업데이트된다.


o 관련 파일들 

- 리눅스에 존재하는 모든 사용자들은 반드시 하나 이상의 그룹에 포함되어 있다.

/etc/passwd : 사용자의 정보가 담겨있는 파일 

/etc/group  : 그룹의 정보가 담겨있는 파일 

/etc/shadow : 사용자의 비밀번호 정보가 담겨있는 파일 

/etc/passwd- : 사용자의 정보가 담겨있는 이전 passwd 파일 (백업용)

/etc/group-  : 그룹의 정보가 담겨있는 이전 group 파일 (백업용)

/etc/shadow- : 사용자의 비밀번호 정보가 담겨있는 이전 shadow 파일 (백업용)


/etc/shells : 쉘의 종류가 있는 파일

/etc/default/useradd :  사용자를 생성할 때 사용하게 되는 기본정보가 있는 파일

/etc/login.defs : 사용자를 생성할 때 기본값이 저장되어 있는 파일 (설정파일)

-  MAIL_DIR : 메일을 받을 디렉토리

-  PASS_MAX_DAYS : 패스워드 변경없이 사용할 수 있는 최대일자

-  PASS_MIN_DAYS : 패스워드 변경없이 사용할 수 있는 최소일자

-  PASS_MIN_LEN : 패스워드의 최소 바이트 수

-  PASS_WARN_AGE

-  UID_MIN : 생성할 수 있는 UID 시작번호

-  UID_MAX : 생성할 수 있는 최대 GID 번호 

-  GID_MIN : 새로 생성되는 그룹의 GID 시작번호

-  GID_MAX : 새로 생성되는 그룹에서 지정 할 수 있는 최대 GID번호

-  CREATE_HOME : 홈디렉토리 생성 여부


/etc/skel   : 뼈대 디렉토리로 사용자를 생성할 때 이 디렉토리의 모든 파일들을 복사


- 리눅스 시스템 프로그래밍을 하기 위해서 필요한 파일들

/etc/passwd에 대한 구조가 담겨있는 파일 : /usr/include/pwd.h 에서 passwd 구조체 참고

/etc/group에  대한 구조가 담겨있는 파일 : /usr/include/grp.h 에서 group 구조체 참고

/etc/shadow에 대한 구조가 담겨있는 파일 : /usr/include/shadow.h 파일에서 spwd 구조체 참고


o rpm 으로 관련 명령어 알아보기

# which useradd

/usr/sbin/useradd

# rpm -qf /usr/sbin/useradd 

shadow-utils-4.0.17-20.el5

# rpm -qi shadow-utils

# rpm -ql shadow-utils | grep bin

# rpm -qc shadow-utils 

# rpm -qd shadow-utils 


o 사용자관련 명령어

디렉토리 : /usr/bin 

chage faillog gpasswd lastlog newgrp sg


디렉토리 : /usr/sbin

adduser chpasswd groupadd groupdel groupmod grpck grpconv grpunconv

newusers pwck pwconv pwunconv useradd userdel usermod



###########################

## /etc/passwd 파일 구조 ##

###########################

- 발음 : 패스워드

- 각 필드의 구분자는 : 으로 구분되어 있다.

username:password:uid:gid:comment:homedirectory:shell

    1        2     3   4    5        6            7


1. 사용자 이름 (OS가 사용자에게 부여한 계정명)

2. 암호화된 비밀번호 (현재는 사용하지 않고 단순 x 문자가 들어있다.)

3. 사용자의 UID (OS 가 사용자에게 부여한 번호)

4. 사용자의 GID (기본그룹 : main그룹, OS가 사용자가 속한 그룹에 부여한 번호)

5. 설명문 (사용자에 대한 기본 정보를 넣는다.)

6. 사용자의 홈디렉토리 (자신만의 공간)

7. 실행할 프로그램 (일반적으로 사용자의 로그인 쉘이 저장된다.)


e.g.) /etc/passwd

root:x:0:0:root:/root:/bin/bash

bin:x:1:1:bin:/bin:/sbin/nologin

daemon:x:2:2:daemon:/sbin:/sbin/nologin

adm:x:3:4:adm:/var/adm:/sbin/nologin

lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

sync:x:5:0:sync:/sbin:/bin/sync


##########################

## /etc/group 파일 구조 ##

##########################

- 각 필드의 구분자는 : 으로 구분되어 있다.

groupname:password:gid:members

   1        2       3    4

1. 그룹명

2. 그룹 비밀번호 (단순히 x 문자가 있고 /etc/gshadow 에 비번이 담겨있다.)

3. 그룹 번호  GID ( 기본그룹의 번호 )

4. 그룹 멤버리스트 (여러 멤버가 존재할 때 , 로 구분한다.)


e.g.) /etc/group

root:x:0:root

bin:x:1:root,bin,daemon

daemon:x:2:root,bin,daemon

sys:x:3:root,bin,adm

adm:x:4:root,adm,daemon

tty:x:5:

disk:x:6:root

lp:x:7:daemon,lp

mem:x:8:

kmem:x:9:



- 기억해야할 그룹

root, wheel, users


root  : 슈퍼유저 root가 속해있는 그룹

wheel : 관리자 권한을 가진 그룹

users : 일반 유저의 권한을 가진 그룹


- 3개의 그룹을 egrep 으로 출력한다.

# egrep '^root|wheel|users' /etc/group

root:x:0:root

wheel:x:10:root

users:x:100:


# cat /etc/group | egrep '^root|wheel|users'

root:x:0:root

wheel:x:10:root

users:x:100:



###########################

## /etc/shadow 파일 구조 ##

###########################

- 각 필드의 구분자는 : 으로 구분되어 있다.

- username:password:lastchange:mindays:maxdays:warndays:inactive:expire:flag

     1       2         3        4       5       6        7       8     9


1. 사용자명   ***

2. 암호화된 비밀번호 ***

3. lastchange : 최근 비밀번호 변경일 (1970년 1월 1일 0시 0분 0초 기준의 날짜 수 : timestamp)

4. mindays : 비밀번호 변경 후, 재설정을 위한 대기일 수

5. maxdays : 비밀번호 유효기간 ***

6. warndays : 비밀번호 변경 경고 시간

7. inactive : 비밀번호 유효 기간  (5일이면, 5일에 한번은 들어가야 된다.)

8. expire : 비밀번호 만료 기간 이후 계정을 사용할 수 없게 되는 기간

9. flag :  예약으로 세팅되어 있고 현재는 사용되지 않는다.


e.g.) /etc/shadow

# head -5 /etc/shadow

root:$1$TDIRqvvY$jZWHAuWVqrxtWYhl33QUq/:16542:0:99999:7:::

bin:*:16512:0:99999:7:::

daemon:*:16512:0:99999:7:::

adm:*:16512:0:99999:7:::

lp:*:16512:0:99999:7:::


- 왼쪽의 프로세스의 출력을 파이프를 통해서 오른쪽 프로세스의 입력으로 

  들어간다.

# cat /etc/shadow | head -5

root:$1$TDIRqvvY$jZWHAuWVqrxtWYhl33QUq/:16542:0:99999:7:::

bin:*:16512:0:99999:7:::

daemon:*:16512:0:99999:7:::

adm:*:16512:0:99999:7:::

lp:*:16512:0:99999:7:::


o 비밀번호 변경

- 아래 사용자는 비밀번호가 막혀있는(lock) 사용자를 의미한다.

testuser2:!!:16626:0:99999:7:::

          ~~

# passwd -d testuser2

Removing password for user testuser2.

passwd: Success

# tail -1 /etc/shadow


- 아래 사용자는 비밀번호가 없는 사용자를 의미한다.

testuser2::16626:0:99999:7:::

         ~~

# passwd testuser2

Changing password for user testuser2.

New UNIX password:          <-- 비번은 보이지 않는다.

Retype new UNIX password:   <-- 비번은 보이지 않는다.

passwd: all authentication tokens updated successfully.


- 아래 사용자는 비밀번호가 있는 사용자를 의미한다.

#  grep testuser2 /etc/shadow

testuser2:$1$l.6b5XGD$euIvSXsvAGAqf6FKU8Irj1:16626:0:99999:7:::


o 비밀번호 알고리즘을 변경하는 방법

- 비밀번호는 5.x 까지는 md5로 설정되어 있고 CentOS 6.5 는 sha512로 설정되어 있다.

- md5 알고리즘은 약하고 sha512는 강력하다는 특징이 있다. 따라서 5.x 로 설치했다면

  authconfig 명령어로 암호 알고리즘을 변경해주면 좋다.

authconfig --passalgo=md5 --update       username:$1$salt$.....:

authconfig --passalgo=sha256 --update    username:$5$salt$.....:

authconfig --passalgo=sha512 --update    username:$6$salt$.....:


o 레드햇계열의 배포판에서 사용되는 사용자 목록이 담겨있는 파일

# vi /usr/share/doc/setup-2.5.58/uidgid 

  :

  :

NAME            UID     GID     HOME                    SHELL           PACKAGES

  :

  :

nobody          99      99      /                       /sbin/nologin   setup

apache          48      48      /var/www                /bin/false      apache

mysql           27      27      /var/lib/mysql          /bin/bash       mysql

  :

  :


o 사용자의 홈디렉토리 

- 사용자의 홈디렉토리는 사용자가 시스템에 로그인을 사용하는 공간이다.

- 관리자가 사용자를 생성하면 시스템에 일반 사용자가 자료를 저장할 수 있는

  공간이 생성된다.

- 특히 시스템에서는 오직 root(UID 0)만이 일반 사용자를 생성할 수 있다.


o 사용자의 홈디렉토리 경로

- 관리자의 홈디렉토리 경로 : /root

- 일반유저의 홈디렉토리 경로 : /home/사용자명 

사용자의 홈디렉토리가 /home 디렉토리에 위치하는 것은 아니고 다른 디렉토리에

위치할 수 있다. e.g.) /home1/ksw

사용자의 디렉토리를 /home 이 아닌 다른 디렉토리에 위치시키는 이유

- 사용자의 디렉토리 공간이 풀이 났을 때 


o 사용자의 디렉토리를 이동하는 방법

- 사용자의 홈 디렉토리는 ~ 문자를 이용해서 이동한다.


root : /root

linux : /home/linux

unix : /home/unix

windows : /home/windows

freebsd : /home1/freebsd


# cd /home/linux O

# cd /home/freebsd  X

# cd /home1/freebsd  O


# cd ~linux O

# cd ~freebsd  O


==============================================================================

LAB> 사용자를 생성하고 확인해보자.


Usage: useradd [options] LOGIN


!!! 기본값은 UID, GID 이전 사용자의 다음 번호로 부여받는다. !!! 

!!! 이 부분의 기본값은 옵션을 변경함으로써 변경할 수 있다.  !!!


- 사용자를 생성한다.

# useradd user1

# useradd user2

# useradd user3


- 생성된 사용자를 /etc/passwd 파일에서 검색한다.

# alias grep='grep --color'

# grep ^user /etc/passwd

user1:x:500:500::/home/user1:/bin/bash

user2:x:501:501::/home/user2:/bin/bash

user3:x:502:502::/home/user3:/bin/bash


- 생성된 사용자를 /etc/passwd, /etc/group, /etc/shadow 파일에서 동시에

  검색한다.

# grep ^user[1-3] /etc/{passwd,group,shadow}

/etc/passwd:user1:x:500:500::/home/user1:/bin/bash

/etc/passwd:user2:x:501:501::/home/user2:/bin/bash

/etc/passwd:user3:x:502:502::/home/user3:/bin/bash

/etc/group:user1:x:500:

/etc/group:user2:x:501:

/etc/group:user3:x:502:

/etc/shadow:user1:!!:16682:0:99999:7:::

/etc/shadow:user2:!!:16682:0:99999:7:::

/etc/shadow:user3:!!:16682:0:99999:7:::

==============================================================================

==============================================================================

LAB> 사용자를 삭제하고 확인해보자.

Usage: userdel [options] LOGIN

 -r, --remove remove home directory and mail spool


-- 삭제 조건 --

1. user1 : 몽땅 삭제

2. user2 : 몽땅 삭제

3. user3 : home directory & mail spool 은 남겨두고 삭제

-- 삭제 조건 --


- -r 옵션을 주고 삭제한다.

  -r 옵션은 user1, user2 는 홈디렉토리, mail spool 파일까지 삭제된다.

# userdel -r user1

# userdel -r user2


- -r 옵션 생략하고 삭제한다.

  -r 옵션을 생략하고 삭제하면 홈디렉토리, mail spool 파일은 남아있게 된다.

# userdel user3


- 홈디렉토리가 남아있는 것을 확인한다.

# ls /home

user3


- mail spool 파일도 남아있는 것을 확인한다.

# ls -l /var/spool/mail 

total 20

  :

-rw-rw---- 1  502 mail    0 Sep  4 22:16 user3


- 만약 홈디렉토리를 삭제하고자 할 때는 rm 명령어로 개별적으로 

  user3 사용자의 홈디렉토리를 삭제한다. 

# rm -rf /home/user3


- mail spool 파일도 삭제하고자 할 때는 rm 명령어로 개별적으로 

  삭제한다. mail spool 파일은 메일을 받을 수 있는 파일이다.

# rm -fv /var/spool/mail/user3


==============================================================================


==============================================================================

LAB> 사용자를 생성하고 삭제해보자.


useradd,adduser : 사용자를 생성하는 명령어

userdel : 사용자를 삭제하는 명령어

/etc/passwd : 사용자의 정보가 들어있는 DB (text 형태로 저장)

/etc/shadow : 사용자의 정보가 들어있는 DB (text 형태로 저장)

/etc/group  : 그룹에 대한 정보가 들어있는 DB (text 형태로 저장)


Usage: useradd [options] LOGIN

options : -r  (홈디렉토리를 삭제한다.)


!!! 사용자 생성시 /etc/passwd, /etc/group, /etc/shadow 파일에 한 줄이 추가된다 !!!

!!! 사용자 삭제시 /etc/passwd, /etc/group, /etc/shadow 파일에 한 줄이 삭제된다 !!!


- 3명의 사용자를 생성하고 정보를 확인한다.

# useradd linux

# useradd unix

# useradd windows

# tail -3 /etc/passwd

# tail -3 /etc/group

# tail -3 /etc/shadow


- 3명의 사용자를 삭제하고 정보를 확인한다.

# userdel -r linux

# userdel -r unix

# userdel -r windows

# tail -3 /etc/passwd

# tail -3 /etc/group

# tail -3 /etc/shadow


==============================================================================


==============================================================================

LAB> 사용자를 생성하고 로그인을 시켜보자.


- user1 사용자를 생성한다.

# useradd user1

# tail -1 /etc/passwd

user1:x:500:500::/home/user1:/bin/bash

# tail -1 /etc/shadow

user1:!!:16682:0:99999:7:::


# passwd user1

Changing password for user user1.

New UNIX password: 

Retype new UNIX password: 

passwd: all authentication tokens updated successfully.

# tail -1 /etc/shadow

user1:$1$TAXID/dw$tr72OfoXRTLFErmK0FdOl1:16682:0:99999:7:::


# ssh user1@localhost

The authenticity of host 'localhost (127.0.0.1)' can't be established.

RSA key fingerprint is 2f:16:00:24:97:4f:b5:b4:99:d4:f3:08:85:48:80:cf.

Are you sure you want to continue connecting (yes/no)? yes

Warning: Permanently added 'localhost' (RSA) to the list of known hosts.

user1@localhost's password: 


$ id

uid=500(user1) gid=500(user1) groups=500(user1) context=user_u:system_r:unconfined_t


==============================================================================


==============================================================================

LAB> 아래 조건에 해당하는 사용자를 생성하고 비밀번호를 부여한 후

     시스템에 로그인 시키시오.


-- 조건 --

---------+--------------

사용자명 |  비밀번호

---------+--------------

user2    |   korea^^

---------+--------------

user3    |   linux^^

---------+--------------

-- 조건 --


# useradd user2

# useradd user3

# passwd user2

# passwd user3

# ssh user2@localhost

# ssh user3@localhost

==============================================================================


==============================================================================

LAB> user4 사용자의 쉘을 top 으로 변경해서 생성해보자.


# useradd user4

# userdel -r user4

# useradd -s /usr/bin/top user4

# tail -1 /etc/passwd

user4:x:503:503::/home/user4:/usr/bin/top

# passwd user4

Changing password for user user4.

New UNIX password: 

Retype new UNIX password: 

passwd: all authentication tokens updated successfully.

# ssh user4@localhost


  user4로 로그인 후 top이 실행된다.


==============================================================================


==============================================================================

LAB> 사용자에게 메일 보내기


# /etc/init.d/sendmail start

Starting sendmail:                                         [  OK  ]

Starting sm-client:                                        [  OK  ]

[root@localhost ~]# ls -l /var/spool/mail/user1 

-rw-rw---- 1 user1 mail 0 Sep  4 23:11 /var/spool/mail/user1

[root@localhost ~]# mail user1

Subject: Hello

Hi ^^*


.

Cc: 

[root@localhost ~]# ls -l /var/spool/mail/user1 

-rw-rw---- 1 user1 mail 650 Sep  5 00:59 /var/spool/mail/user1

==============================================================================

==============================================================================

LAB>  사용자 홈디렉토리 변경하기 


# mkdir /home1

# useradd -D -b /home1

# useradd user100

# ls /home1

user100

# grep user100 /etc/passwd

user100:x:504:504::/home1/user100:/bin/bash

# ls /home1

user100


# userdel -r user100


# useradd -D -b /home


==============================================================================


============================================================================

LAB>  md5 알고리즘을 sha512 로 변경하기

# authconfig --passalgo=sha512 --update 

# grep ^root /etc/shadow

root:$1$NbYqO/vr$VAti5rjkpasKwPK5DIXLg1:16681:0:99999:7:::

# passwd

Changing password for user root.

New UNIX password: 

Retype new UNIX password: 

passwd: all authentication tokens updated successfully.

# grep ^root /etc/shadow

root:$6$YMrkwzHL$LPGnz41DTA8loXoYrJ0cTZaCHH0WVnoVwSnBl.CWbfCrvH4Z1/VGO52FB4b/Op7SVMBIB8DI9sh8Jgs47do9X/:16682:0:99999:7:::

============================================================================


============================================================================

LAB> 다양한 옵션을 이용해서 사용자를 생성하자.


!!! 사용자를 생성할 때 반드시 그룹이 먼지 만들어져 있어야 한다. !!!


# groupadd -g 8000 testgroup

# useradd -u 5000 -g 8000 -c testuser -d /tmp/testuser -s /bin/csh testuser

# tail -1 /etc/passwd

testuser:x:5000:8000:testuser:/tmp/testuser:/bin/csh

# tail -1 /etc/group

testgroup:x:8000:


- userdel 로 사용자를 삭제해도 그룹은 지워지지 않는다. 

  이때는 groupdel 로 그룹을 삭제해야 한다.

# userdel -r testuser

# tail -1 /etc/passwd

user5:x:504:504::/home/user5:/bin/bash

# tail -1 /etc/group

testgroup:x:8000:

# groupdel testgroup

# tail -1 /etc/group

user5:x:504:


============================================================================


                -------- 여기까지 -------- 


==============================================================================

LAB> 현재 Linux Box (현재 시스템) 에 사용자와 그룹의 개수를 확인해보자.


-- wc 연습하기 --

# wc /etc/passwd

  38   64 1802 /etc/passwd

# echo 1234 > a.txt

# ls -l a.txt 

---------- 1 root root 5 Apr 24 12:53 a.txt

# wc a.txt 

1 1 5 a.txt

# echo 5678 >> a.txt 

# ls -l a.txt 

---------- 1 root root 10 Apr 24 12:53 a.txt


# wc a.txt 

 2  2 10 a.txt

# echo 0000 1111 >> a.txt 

# ls -l a.txt 

---------- 1 root root 20 Apr 24 12:54 a.txt

# wc a.txt 

 3  4 20 a.txt

# cat a.txt 

1234

5678

0000 1111


# wc -l a.txt 

3 a.txt

-- wc 연습하기 --


- Linux Box 에 38명의 사용자가 있는 것을 알 수 있다.

# wc -l /etc/passwd

38 /etc/passwd

# cat /etc/passwd | wc -l

38


- Linux Box 에 54개의 그룹이 있는 것을 알 수 있다.

# wc -l /etc/group

54 /etc/group


==============================================================================


==============================================================================

LAB> 슈퍼유저 root 의 정보를 확인해보자.


# alias grep='grep --color'

# grep ^root /etc/passwd

root:x:0:0:root:/root:/bin/bash


# awk /^root/ /etc/shadow

root:$1$e5ngkd97$VHmsVHxJ0W9WZgld/xXdX.:15959:0:99999:7:::


# head -1 /etc/group

root:x:0:root

==============================================================================



==============================================================================

LAB> useradd의 다양한 옵션을 이용해서 사용자를 생성해보자.


형식 : 

# useradd

Usage: useradd [options] LOGIN


# LANG=C

# groupadd -g 507 user2

# groupdel user2



- 사용자를 처음 생성하면 자동으로 UID : 500 GID : 500 으로 생성된다.

- 그 다음 사용자를 생성하면 /etc/passwd 마지막 사용자 다음번호로 UID가 부여된다.

- GID UID를 따른다.

- 참고로 다른 UNIX, LINUX 에서는 다를 수 있다.

# useradd -u 507 user2

# grep user2 /etc/{passwd,shadow,group}

/etc/passwd:user2:x:507:507::/home/user2:/bin/bash

/etc/shadow:user2:!!:15959:0:99999:7:::

/etc/group:user2:x:507:


# useradd  user3

# grep user3 /etc/{passwd,shadow,group}

/etc/passwd:user3:x:508:508::/home/user3:/bin/bash

/etc/shadow:user3:!!:15959:0:99999:7:::

/etc/group:user3:x:508:


- /etc/passwd 필드의 옵션을 부여해서 사용자를 생성한다.

- username:password:uid:gid:comment:homedirectory:shell  

- user4:x:5000:5000:testuser:/home/linuxuser4:/bin/sh

-          -u   -g    -c          -d             -s

# groupadd -g 5000 user4

# useradd -u 5000 -g 5000 -c testuser -d /home/linuxuser4 -s /bin/sh  user4

# grep user4 /etc/{passwd,shadow,group}

/etc/passwd:user4:x:5000:5000:testuser:/home/linuxuser4:/bin/sh

/etc/shadow:user4:!!:15959:0:99999:7:::

/etc/group:user4:x:5000:


# grep user4 /etc/shadow

user4:!!:15959:0:99999:7:::


# LANG=ko_KR.eucKR

# chage -l user4

마지막으로 열쇠글을 바꾼 날 : 4월 24, 2015

열쇠글 만료 :안함

열쇠글이 비활성화 기간 :안함

계정 만료 :안함

열쇠글을 바꿀 수 있는 최소 날 수 : 0

열쇠글을 바꿔야 하는 최대 날 수 : 99999

열쇠글 만료 예고를 하는 날 수 : 7


LANG=C

# chage -l user4

Last password change : Sep 11, 2013

Password expires : never

Password inactive : never

Account expires : never

Minimum number of days between password change : 0

Maximum number of days between password change : 99999

Number of days of warning before password expires : 7


# chage user4

Changing the aging information for user4

Enter the new value, or press ENTER for the default


Minimum Password Age [0]: 1

Maximum Password Age [99999]: 30

Last Password Change (YYYY-MM-DD) [2013-09-11]: 2015-05-20

Password Expiration Warning [7]: 5

Password Inactive [-1]: 20

Account Expiration Date (YYYY-MM-DD) [1969-12-31]: 2015-09-30   


- 바뀐 정보를 볼 수 있지만 비밀번호는 아직 없다.

# grep user4 /etc/shadow

user4:!!:16575:1:30:5:20:16708:


# chage -l user4

마지막으로 열쇠글을 바꾼 날 : 5월 20, 2015

열쇠글 만료 : 6월 19, 2015

열쇠글이 비활성화 기간 : 7월 09, 2015

계정 만료 : 9월 30, 2015

열쇠글을 바꿀 수 있는 최소 날 수 : 1

열쇠글을 바꿔야 하는 최대 날 수 : 30

열쇠글 만료 예고를 하는 날 수 : 5


# passwd --stdin user4

Changing password for user user4.

12345

passwd: all authentication tokens updated successfully.


# grep user4 /etc/shadow

user4:$1$9iw1g.9x$MkwNjI9Icanzq.Y7NV4gF/:16549:1:30:5:20:16708:


# chage -l user4

마지막으로 열쇠글을 바꾼 날 : 4월 24, 2015

열쇠글 만료 : 5월 24, 2015

열쇠글이 비활성화 기간 : 6월 13, 2015

계정 만료 : 9월 30, 2015

열쇠글을 바꿀 수 있는 최소 날 수 : 1

열쇠글을 바꿔야 하는 최대 날 수 : 30

열쇠글 만료 예고를 하는 날 수 : 5



==============================================================================


==============================================================================

LAB> usermod 를 이용해서 사용자 정보를 수정해보자.


usermod 는 사용자의 /etc/passwd 정보를 수정하는 명령어다.

옵션은 useradd 옵션과 거의 동일하다.


!!! 사용자 정보가 담겨있는 /etc/passwd 파일을 수정할려면 반드시 usermod, vipw 

!!! 명령어를 사용한다. vi 로는 /etc/passwd 를 수정하지 말고 가급적이면

!!! usermod, vipw 명령어를 이용하는 것이 좋다.


- user4 계정을 삭제한다. (-r 옵션이 있으므로 홈디렉토리까지 모두 삭제한다.)

# userdel -r user4


- uid 5000 에 해당하는 사용자 계정 user4를 생성한다.

# useradd -u 5000 user4

# grep user4 /etc/passwd

user4:x:5000:5000::/home/user4:/bin/bash


- user4 계정의 쉘을 /bin/bash -> /bin/sh 로 변경한다.

# usermod -s /bin/sh user4

# grep user4 /etc/passwd

user4:x:5000:5000::/home/user4:/bin/sh

                               ~~~~~~~~


- user4 계정의 설명문을 변경한다. 

# usermod -c 010-4064-9225 user4

# grep user4 /etc/passwd

user4:x:5000:5000:010-4064-9225:/home/user4:/bin/sh


- user4 계정의 기본그룹을 5000 -> 100 으로 변경한다.

# usermod -g 100 user4

# grep user4 /etc/passwd

user4:x:5000:100:010-4064-9225:/home/user4:/bin/sh

# su - user4

$ id

uid=5000(user4) gid=100(users) groups=100(users) ...

                ~~~~~~~~~~~~~~

$ exit


# usermod -g 5000 user4


$ id

uid=5000(user4) gid=5000(user4) groups=5000(user4) 

                ~~~~~~~~~~~~~~~


- user4 계정의 홈디렉토리를 /tmp 디렉토리로 변경한다.

# usermod -d /tmp user4

# grep user4 /etc/passwd

user4:x:5000:100:010-4064-9225:/tmp:/bin/sh

# su -

$ pwd

/tmp

==============================================================================


==============================================================================

LAB> 위 LAB 을 이용해서 아래 조건에 해당하는 사용자를 생성하시오.


-- 조건 --

-----------+------

 groupname | gid

-----------+------

infosec    | 9000

gangnam    | 8000

-----------+------

---------+------+------+-----------+----------------+-----------

 account | uid  | gid  | comment   | homedir        | shell

---------+------+------+-----------+----------------+-----------

bluesky  | 7000 | 9000 | testuser1 | /home1/bluesky | /bin/sh

hiseoul  | 7005 | 8000 | seouluser | /home2/hiseoul | /bin/bash

---------+------+------+-----------+----------------+-----------

-- 조건 --


# mkdir /home1

# groupadd -g 9000 infosec

# useradd -u 7000 -g 9000  -c testuser1 -d /home1/bluesky -s /bin/sh bluesky

# tail -1 /etc/{passwd,group,shadow}

# ls /home1

# su - bluesky

$ id

$ pwd


# mkdir /home2

# groupadd -g 8000 gangnam

# useradd -u 7005 -g gangnam -c seouluser -d /home2/hiseoul -s /bin/bash hiseoul

# tail -1 /etc/{passwd,group,shadow}

# ls /home2

# su - hiseoul

$ id

$ pwd

==============================================================================


==============================================================================

LAB> 사용자의 정보를 구하는 프로그래밍을 해보자.


# vi struct.c

-- struct.c --

#include <stdio.h>


struct test

{

  int i;

  int j;

};


int main()

{

  struct test abc;

  abc.i = 10;

  abc.j = 20;


  printf("abc.i = %d, abc.j = %d \n", abc.i, abc.j);


  return 0;

}

-- struct.c --


# gcc -o struct struct.c 

# ./struct 

abc.i = 10, abc.j = 20 


# cp struct.c struct2.c

# vi struct2.c

-- struct2.c --

#include <stdio.h>


struct test

{

  int i;

  int j;

};


int main()

{

  struct test abc, *p;

  p = &abc;

  p->i = 10;

  p->j = 20;


  printf("p->i = %d, p->j = %d \n", p->i, p->j);


  return 0;

}


# cat /usr/include/pwd.h

  :

struct passwd

{

  char *pw_name;    /* Username.  */  

  char *pw_passwd;    /* Password.  */  

  __uid_t pw_uid;   /* User ID.  */  

  __gid_t pw_gid;   /* Group ID.  */  

  char *pw_gecos;   /* Real name.  */  

  char *pw_dir;     /* Home directory.  */  

  char *pw_shell;   /* Shell program.  */  

};

  :

  :


# vi userinfo.c

-- userinfo.c --

#include <stdio.h>       // /usr/include/stdio.h

#include <unistd.h>      // /usr/include/unistd.h

#include <pwd.h>         // /usr/include/pwd.h

#include <sys/types.h>   // /usr/include/sys/types.h


int main()

{

  char username[] = "bluesky";

  struct passwd *userpw;

  

  userpw = getpwnam(username);


  printf("account : %s \n", userpw->pw_name);

  printf("uid : %d \n", userpw->pw_uid);

  printf("gid : %d \n", userpw->pw_gid);

  printf("comment : %s \n", userpw->pw_gecos);

  printf("home dir : %s \n", userpw->pw_dir);

  printf("shell : %s \n",  userpw->pw_shell);

  

  return 0;

}

-- userinfo.c --


# gcc -o userinfo userinfo.c 

# ./userinfo 

account : bluesky 

uid : 7000 

gid : 9000 

comment : 148201500 

home dir : /home1/bluesky 

shell : /bin/sh


# usermod -g 100 bluesky

# grep bluesky /etc/passwd

bluesky:x:7000:100:testuser1:/home1/bluesky:/bin/sh

# ./userinfo 

account : bluesky 

uid : 7000 

gid : 100 

comment : 157347867 

home dir : /home1/bluesky 

shell : /bin/sh 


==============================================================================


==============================================================================

LAB> /etc/{passwd-,group-,shadow-} 파일을 살펴보자.

# cd /etc; for i in passwd group shadow

> do

>   tail -1 $i

> done

test123456:x:5008:5008::/home/test123456:/bin/bash

test123456:x:5008:

test123456:!!:16794:0:99999:7:::

[root@localhost etc]# userdel -r test123456

[root@localhost etc]# for i in passwd group shadow; do   tail -1 $i; done

test12345:x:5007:5007::/home/test12345:/bin/bash

test12345:x:5007:

test12345:!!:16794:0:99999:7:::

[root@localhost etc]# for i in passwd- group- shadow-; do   tail -1 $i; done

test123456:x:5008:5008::/home/test123456:/bin/bash

test123456:x:5008:

test123456:!!:16794:0:99999:7:::

==============================================================================


==============================================================================

LAB> 그룹의 비번 설정하기


그룹의 쉐도우 파일 (원래는 없다. gpasswd 명령어로 그룹에 비번을 설정해야만 생긴다. )

/etc/gshadow  



# groupdel ccnagroup

# groupadd ccnagroup

# gpasswd ccnagroup

Changing the password for group ccnagroup

New Password:                <-- 비번입력

Re-enter new password:       <-- 비번입력


# useradd -g ccnagroup cdy

# useradd -g ccnagroup ldw


# useradd user1

# useradd user2


# gpasswd -A user1 ccnagroup

# gpasswd -A user2 ccnagroup


# grep ccnagroup /etc/group

ccnagroup:x:2014:

# su - user1

$ id

uid=508(user1) gid=508(user1) groups=508(user1) 


$ newgrp ccnagroup  <-- ccnagroup 으로 변경한다.

Password: 

$ id

uid=508(user1) gid=2014(ccnagroup) groups=508(user1),2014(ccnagroup) 

==============================================================================



==============================================================================

LAB> 특정 파일에서 문자를 찾아보자.

!!! awk, grep, egrep, fgrep !!!

!!! grep 3형제는 약간의 차이가 존재한다. !!!



# awk /user1/ /etc/{passwd,shadow,group}

user1:x:506:2014::/home/user1:/bin/bash

user1:!!:15959:0:99999:7:::

user1:x:2014:


# grep user1 /etc/{passwd,shadow,group}

/etc/passwd:user1:x:506:2014::/home/user1:/bin/bash

/etc/shadow:user1:!!:15959:0:99999:7:::

/etc/group:user1:x:2014:


# egrep user1 /etc/{passwd,shadow,group}

/etc/passwd:user1:x:506:2014::/home/user1:/bin/bash

/etc/shadow:user1:!!:15959:0:99999:7:::

/etc/group:user1:x:2014:


# fgrep user1 /etc/{passwd,shadow,group}

/etc/passwd:user1:x:506:2014::/home/user1:/bin/bash

/etc/shadow:user1:!!:15959:0:99999:7:::

/etc/group:user1:x:2014:


- symbolic link & hard link 

# ls -li `which grep`

196654 -rwxr-xr-x 1 root root 85060  9월 27  2009 /bin/grep

# ls -li `which egrep`

196629 lrwxrwxrwx 1 root root 4  3월  9  2015 /bin/egrep -> grep

# ls -li `which fgrep`

196630 lrwxrwxrwx 1 root root 4  3월  9  2015 /bin/fgrep -> grep

# ls -li `which mke2fs`

983119 -rwxr-xr-x 3 root root 47300  7월 22  2011 /sbin/mke2fs

# ls -li `which mkfs.ext2`

983119 -rwxr-xr-x 3 root root 47300  7월 22  2011 /sbin/mkfs.ext2

# ls -li `which mkfs.ext3`

983119 -rwxr-xr-x 3 root root 47300  7월 22  2011 /sbin/mkfs.ext3

==============================================================================


==============================================================================

LAB> 사용자를 보조그룹에 포함시켜보자.


- -g 옵션과 -G 옵션에 대해서 알아볼 것!!!

- -G 옵션은 보조그룹에 포함시키는 옵션이다.

# grep users /etc/group

users:x:100:


# useradd cdy  

# useradd ldw

# usermod -G users cdy  

# usermod -G users ldw

# useradd user100

# usermod -G users user100

# grep users /etc/group

users:x:100:cdy,ldw,user100

# egrep 'cdy|ldw' /etc/group

users:x:100:cdy,ldw,user100

# egrep 'cdy|ldw' /etc/passwd

cdy:x:5008:6001::/home/cdy:/bin/bash

ldw:x:5009:6001::/home/ldw:/bin/bash

==============================================================================

==============================================================================

LAB> 다양하게 그룹을 만들어서 사용자를 생성해보자.


- -g 옵션과 -G 옵션을 이용해서 다양하게 사용자를 생성해보자.


# groupadd -g 3000 hack

# grep hack /etc/passwd

# grep hack /etc/group

hack:x:3000:

# grep hack /etc/shadow


# useradd -u 9000 -g hack hackuser1

# grep hack /etc/passwd

hackuser1:x:9000:3000::/home/hackuser1:/bin/bash

# grep hack /etc/group

hack:x:3000:

# grep hack /etc/shadow

hackuser1:!!:16794:0:99999:7:::



# useradd -u 9002  hackuser2

# grep hack /etc/passwd

hackuser1:x:9000:3000::/home/hackuser1:/bin/bash

hackuser2:x:9002:9002::/home/hackuser2:/bin/bash

# grep hack /etc/group

hack:x:3000:

hackuser2:x:9002:

# grep hack /etc/shadow

hackuser1:!!:16794:0:99999:7:::

hackuser2:!!:16794:0:99999:7:::



# useradd -u 9003 -G users  hackuser3

# grep hack /etc/passwd

hackuser1:x:9000:3000::/home/hackuser1:/bin/bash

hackuser2:x:9002:9002::/home/hackuser2:/bin/bash

hackuser3:x:9003:9003::/home/hackuser3:/bin/bash

# grep hack /etc/group

users:x:100:cdy,ldw,user100,hackuser3

hack:x:3000:

hackuser2:x:9002:

hackuser3:x:9003:

# grep hack /etc/shadow

hackuser1:!!:16794:0:99999:7:::

hackuser2:!!:16794:0:99999:7:::

hackuser3:!!:16794:0:99999:7:::

==============================================================================


==============================================================================

LAB> 명령어를 이용해서 사용자를 추가해보자.


**************************************************************************

o 사용자를 생성할 때 시스템에서 변경되는 내용들 

1. /etc/passwd : 사용자에 대한 정보가 반드시 한 줄 추가된다.

2. /etc/group  : 사용자가 속한 그룹에 대한 정보가 한 줄 추가된다.

- 상황에 따라서 생성될 수도 있고 생성이 안될 수도 있다.

- (-g 옵션이 없다면 사용자의 UID 와 같은 GID가 한 줄 추가된다.)

- (-g 옵션을 주고 사용자의 GID가 이미 /etc/group에 존재하면 생성되지 않는다.)

- (-G 옵션이면 기존 그룹에 사용자가 포함된다.)

3. /etc/shadow : 사용자에 대한 정보가 반드시 한 줄 추가된다.

4. /home 디렉토리에 사용자의 홈디렉토리가 생성된다.

- /home/username 에 해당하는 권한으로 홈디렉토리가 변경된다.

6. /etc/skel 디렉토리의 모든 파일들을 사용자 홈디렉토리에 복사한다.

7. /var/spool/mail 디렉토리에 메일이 저장되는 사용자 메일 스풀 파일이 생성된다.

**************************************************************************


사용자 : testuser

비번   : 12345


# echo testuser:x:7000:7000::/home/testuser:/bin/bash >> /etc/passwd

# echo testuser:x:7000: >> /etc/group

# echo 'testuser:!!:15477:0:99999:7:::'  >> /etc/shadow

# mkdir -m700 /home/testuser

# cp /etc/skel/.*  /home/testuser

# chown -R testuser.testuser /home/testuser

# touch /var/spool/mail/testuser

# chmod 660 /var/spool/mail/testuser

# chown testuser.testuser /var/spool/mail/testuser

# echo "12345" | passwd --stdin testuser 

# grep testuser /etc/passwd 

testuser:x:7000:7000::/home/testuser:/bin/bash


# grep testuser /etc/shadow 

testuser:$1$PN6Supt1$7jbChpjT6hBlyysc3L.nh/:15484:0:99999:7:::


# ssh testuser@localhost

     <-- 12345 입력 후 로그인이 되면 성공!!!

==============================================================================


LAB > /etc/passwd, /etc/shadow 파일을 cat 명령어를 이용해서

       출력하는데 아래 사용자로 변경해서 출력해보자.


1. testuser 출력 

# su - testuser

$ whoami

$ id

$ head -1 /etc/passwd  <-- 볼 수 있다.

root:x:0:0::/root:/bin/bash

$ head -1 /etc/shadow  <-- 못본다.

$ exit


LAB> /etc/passwd 파일에 암호가 들어있게 변경해보자.


 pwunconv : shadow 파일을 사용안함

 pwconv : shadow 파일을 사용함


# pwunconv  <-- shadow 시스템을 해제

# ls -l /etc/shadow  <-- 파일이 존재하지 않음

# grep testuser /etc/passwd

# su - testuser

$ grep testuser /etc/passwd

testuser:$1$PN6Supt1$7c3L.nh/:501:501::/home/testuser:/bin/bash

$ exit

# pwconv    <-- shadow 시스템으로 전환


존더리퍼로 비번을 크랙으로 깰 수 있어서 요즘의 모든 

시스템에서는 shadow 시스템으로 구동되고 있다.


A  --->  B


/etc/passwd    /etc/shadow

user1      --->  user1 비번

user2      --->  user2 비번

user3

user4


...

user5000   --->  user5000 비번



user200 ~ user500

user1500 ~ user2300




# cat /etc/default/useradd


LAB> 사용자를 생성하는데 /home2 밑에 홈디렉토리가 만들어지도록

      사용자를 생성하시오.


사용자 : usa1, usa2


바꾸는 방법 두가지가 존재

1. 옵션을 주는 방법 : useradd 명령어에서 -d 옵션을 사용

2. 파일을 수정하는 방법 : /etc/default/useradd 를 편집


1번은 useradd 명령어를 칠때마다 매번 -d 옵션을 써야한다.

2번은 영구적으로 사용할 수 있다.


1번으로 실행

# useradd -d /home2/usa1 usa1

# ls -F /home2


2번으로 실행

# vi /etc/default/useradd 

HOME=/home2  <-- 변경

# useradd usa2  

# ls -F /home2



LAB> 사용자를 만들면서 아래에 나오는 그룹에 포함시키시오.


사용자 1 : testuser1  그룹 : testuser1, users

사용자 2 : testuser2  그룹 : users

사용자 3 : testuser3  그룹 : webuser

사용자 4 : testuser4  그룹 : boanin, users


groupadd : 그룹을 생성하는 명령어

useradd 옵션 : -g -G  그룹에 포함시키는 옵션

 -g : 기본그룹, -G : 보조그룹


*** 참고로 리눅스를 설치하면 users 라는 그룹이 만들어진다. ***

*** 그룹을 생성할때 그룹이 /etc/group 에 없다면 먼저 그룹을

*** 생성해줘야 한다. 단!!! 그룹이 생성되는 사용자의 이름과 

*** 같은 그룹명이라면 생성시켜주지 않아도 된다.

*** 그룹을 생성하는 조건 : 사용자명과 틀릴 경우이다. ***


# useradd -G users testuser1

# grep testuser1 /etc/group

users:x:100:testuser1

testuser1:x:507:  <-- 출력된다.


# useradd -g users testuser2

# grep testuser2 /etc/group

   <-- 출력이 안된다.

# groupadd webuser

# useradd -g webuser testuser3

# grep testuser3 /etc/group

   <-- 출력이 안된다.

# groupadd boanin

# useradd -g boanin -G users testuser4

# grep testuser4 /etc/group

users:x:100:testuser1,testuser4  <-- 출력된다.




옵션을 확인 ( 확실히 알아둘 것!!! )

# usermod

# useradd 


o 변경하는 방법 

1. vi 편집기를 이용하는 방법

# grep linux /etc/passwd   <-- linux GID 확인하고 변경하는 연습

 


# usermod -L linux  <-- linux 사용자의 비번을 Lock 을 건다.

# awk /linux/ /etc/shadow

linux:!$1$zrHR/B5H$qf./WNP2UCTh6.FsIEk.e0:15490:0:99999:7:::

# usermod -U linux  <-- Unlock

# awk /linux/ /etc/shadow

linux:$1$zrHR/B5H$qf./WNP2UCTh6.FsIEk.e0:15490:0:99999:7:::


o 사용자를 로그인 시킬려면

1. 사용자 생성    useradd -> /etc/shadow 비밀번호 필드에 !! 가 들어가 있다.

2. 비밀번호 부여  passwd 


===============================================

비밀번호 없이 접근하는 방법

# passwd -uf testuser4

# vi /etc/ssh/sshd_config 

PermitEmptyPasswords yes

# /etc/init.d/sshd restart

자신의 IP로 testuser3 , testuser4 로그인


# useradd -o -u 0 r00t

# passwd -uf r00t

자신의 IP로 r00t 로그인

id 실행

===============================================


==============================================================================

LAB> 사용자를 생성하는데 2015년 12월 25일 까지만 사용하는 사용자를 생성하시오.


!!! 시스템에 시간을 설정하는 방법은 두 가지가 존재한다.

!!! 1. 타임서버에 접속해서 시간을 동기화하는 방법

!!! 2. 사용자가 date 명령어로 직접 세팅하는 방법


!!! date 명령어로 시간을 설정하는 방법

!!! 사용법 : date 월일시분년도.초

!!!

!!! e.g.)

!!! - 2015년 4월 27일 09:47 30초 로 설정

!!! #  date 042709472015.30

!!!

!!! - Mon Apr 27 09:47:30 KST 2015

!!! # 2016년 1월  7일  18:30:20 

!!! # date 010718302016.20


# date

Fri Apr 24 16:21:41 KST 2015

# useradd -e 2015-12-25 xmasuser

# passwd xmasuser


- xmasuser 로 로그인한다.

# ssh xmasuser@localhost                 

$ id

$ exit


# chage -l username


- 현재시간을 date 명령어로 변경한다.

# date 122823592015

Mon Dec 28 23:59:00 KST 2015


- xmasuser 로 로그인하면 사용기간이 만료되었으므로 접속이 안되는 것을 알 수 있다.

# ssh xmasuser@localhost

xmasuser@localhost's password:           

Your account has expired; please contact your system administrator

Connection closed by 127.0.0.1


==============================================================================


==============================================================================

LAB> 사용자를 생성하는데 생성일 부터 10일까지만 사용하는 사용자를 생성하시오.


# rdate -s time.bora.net

# route -n

# cat /etc/resolv.conf

-- /etc/resolv.conf --

nameserver 168.126.63.1

nameserver 168.126.63.2

-- /etc/resolv.conf --


# useradd user1

# useradd -f 10 user11

# chage -l user1

# chage -l user11

# tail -2 /etc/shadow

user1:!!:16510:0:99999:7:::

user11:!!:16510:0:99999:7:10::


==============================================================================


==============================================================================

LAB> 아래 조건에 해당하는 사용자 3명을 생성하고 로그인을 설정하시오.


-- 조건 --

1. 기존 사용자가 존재하면 삭제하고 다시 생성한다.


2. 사용자에 대한 정보

ACCOUNT     UID     기본그룹   보조그룹    설명문       디렉토리      쉘

mysqld       27           27               mysql user   /mysqldata    /sbin/nologin

qmail                  qmail               qmail user   /var/qmail    /bin/false

khuser      8000        8000       100                  /home2/khuser /bin/bash

-- 조건 --


- mysqld 사용자 생성

# useradd -u 27 -c "mysql user" -d /mysqldata -s /sbin/nologin mysqld

useradd: UID 27 is not unique

# grep 27 /etc/passwd

mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/bash

# userdel -r mysql

# useradd -u 27 -c "mysql user" -d /mysqldata -s /sbin/nologin mysqld

# grep 27 /etc/passwd

mysqld:x:27:27:mysql user:/mysqldata:/sbin/nologin


- qmail 사용자 생성

# useradd -c "qmail user" -d /var/qmail -s /bin/false qmail

# tail -1 /etc/{passwd,group,shadow}


- khuser 사용자 생성 


# ls -ld /home2

ls: /home2: No such file or directory

# echo $?

2  

- ls 리턴값 $? 이 0 이 아니면 /home2 디렉토리가 없으므로 이때는 /home2

  디렉토리를 생성하고 사용자를 생성한다.

  있다면 디렉토리 생성만 한다.

# mkdir /home2

# useradd -u 8000 -G 100 -d /home2/khuser -s /bin/bash khuser


==============================================================================

'OS > [Linux] CentOS' 카테고리의 다른 글

[CentOS] 13-2. 사용자 생성  (0) 2016.07.10
[CentOS] 13-1. 사용자관리체크  (0) 2016.07.10
[CentOS] 12. HDD 추가하기  (0) 2016.07.10
[CentOS] 11. vi 편집  (0) 2016.07.10
[CentOS] 10-2. suidtest  (0) 2016.07.10

- 간단한 명령어 살펴보기

df

df -i

free

mount

ifconfig

hostname

uname -a

fdisk -l

e2label /dev/sda1

e2label /dev/sda5

e2label /dev/sda6

e2label /dev/sda7

e2label /dev/sda8

e2label /dev/sda9

cat /etc/fstab

cat /etc/mtab

tune2fs -l /dev/sda1  ~ tune2fs -l /dev/sda9


==========================================================================

LAB> Linux 에서 HDD 추가하기


-- 작업 순서 --

1. HDD 추가

2. HDD 파티션 분할

3. 파일시스템 생성(포맷)

4. 마운트 디렉토리 생성

5. 마운트(HDD 장치 연결)

6. 마운트 연결 유지

-- 작업 순서 --


1. HDD 추가

- 시스템을 종료한다.

  init 0, halt, poweroff, shutdown -h now 

- SATA hdd 추가한다.

- 시스템을 부팅한다.


2. HDD 파티션 분할

- fdisk -l 명령어로 추가된 hdd를 확인한다.

- fdisk로 hdd 의 파티션을 분할한다.


ex) 추가된 hdd를 primary partition 으로 분할해보세요.

# fdisk /dev/sdb

n -> p -> 1 -> 엔터 -> 엔터 -> p -> w


# fdisk -l /dev/sdb


Disk /dev/sdb: 8589 MB, 8589934592 bytes

255 heads, 63 sectors/track, 1044 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes


   Device Boot      Start         End      Blocks   Id  System

/dev/sdb1               1        1044     8385898+  83  Linux


3. 파일시스템 생성(포맷)

- mkfs, mke2fs, mkfs.ext2, mkfs.ext3 명령어를 이용해서 포맷한다.

- 리눅스 파일시스템 : ext -> ext2 -> ext3 -> ext4 

                                     ~~~~

- 아래 둘 중 하나를 선택해서 실행하면 된다.

# mkfs.ext2 -j /dev/sdb1

# mkfs.ext3 /dev/sdb1


4. 마운트 디렉토리 생성

- /data 디렉토리에 새로운 HDD를 연결한다.

# mkdir /data

# ls /

... data ...


5. 마운트(HDD 장치 연결)

- 새로운 HDD의 첫 번째 파티션과 /data 디렉토리를 마운트(연결)한다.

- # mount --help  or # man mount

- 장치 연결 : 

  mount 명령어를 사용한다.

  형식 : mount -t 파일시스템타입  연결할장치명 연결할디렉토리

- 장치 해제 : 

  umount 명령어를 사용한다.

  형식 : umount 연결된장치명   or umount 연결된디렉토리

- 참고로 파일시스템이 ext3일 경우에는 -t 옵션을 생략할 수 있다.


# cat /etc/mtab

# mount -t ext3 /dev/sdb1 /data

# df

# mount

# cat /etc/mtab


# umount /dev/sdb1

  or

# umount /data


# df

  :

/dev/sdb1              8254240    149628   7685320   2% /data


- 100M 짜리 파일을 생성한다.

# dd if=/dev/zero of=/data/testfile bs=1024 count=100000

# df

  :

/dev/sdb1              8254240    249736   7585212   4% /data


6. 마운트 연결 유지

- 장치에 lable 명을 지정하고 /etc/fstab 을 편집한다.

# e2label /dev/sdb1 /data

# vi /etc/fstab

-- /etc/fstab --

  :

  :

LABEL=/boot             /boot                   ext3    defaults        1 2

LABEL=/data             /data                   ext3    defaults        1 2

  :

-- /etc/fstab --


- 시스템을 재부팅해서 /data 디렉토리의 마운트된 정보를 df로 확인한다.

  init 6, reboot, Ctrl + Alt + Del, shutdown -r now 

# df

  :

  :

/dev/sdb1              8254240    249736   7585212   4% /data

==========================================================================


==========================================================================

LAB> LABEL명이 틀려서 부팅중 마운트가 안되는 것을 해결하는 방법


!!! 아래처럼 LABEL명에 오타가 발생되면 부팅중에 마운트가 안되고

!!! 중간에 멈추는 현상이 발생된다.

!!! 정상적인 LABEL명 : /data

!!! 테스트 LABEL명   : /data222


-- /etc/fstab --

  :

LABEL=/data222         /data                  ext3    defaults        1 2

  :

-- /etc/fstab --


해결방안


-- 작업 순서 --

1. root 비밀번호 입력

2. / 를 rw(read, write) 상태로 변경

3. /etc/fstab 편집

4. 재부팅

-- 작업 순서 --


1. root 비밀번호 입력

- root 비밀번호를 입력해서 로그인한다.


2. rw(read, write) 상태로 /를 변경

# mount -o remount,rw /


3. /etc/fstab 편집

# vi /etc/fstab

-- /etc/fstab --

  :

LABEL=/data         /data                  ext3    defaults        1 2

  :

-- /etc/fstab --


4. 재부팅

# reboot

==========================================================================


==========================================================================

LAB> 아래 조건에 맞는 HDD 더 추가해서 각 디렉토리에 장치를 마운트 하시오.


-- 조건 --

1. satahdd1(8G)  -> /data 

- 이전 랩에서 이미 작업했으므로 여기서는 생략


2. 장치명을 이용해서 마운트


3. HDD 정보

컨트롤로   : SATA

HDD 파일명 : satahdd2 (/dev/sdc)

용량 : 10G

파티션 정보 :    |---------|----------|  

용량   :             5g         5g

장치명 :          /dev/sdc1  /dev/sdc2     

                     |           |

마운트 디렉토리 : /backup     /data2

-- 조건 --



-- 작업 순서 --

1. HDD 추가

- 리눅스서버를 종료한다.


2. HDD 파티션 분할

- fdisk -l 로 추가된 HDD를 확인한다.

# fdisk -l

  :

  :

Disk /dev/sdc: 8589 MB, 8589934592 bytes

255 heads, 63 sectors/track, 1044 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes


Disk /dev/sdc doesn't contain a valid partition table


# fdisk /dev/sdc

Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel

Building a new DOS disklabel. Changes will remain in memory only,

until you decide to write them. After that, of course, the previous

content won't be recoverable.



The number of cylinders for this disk is set to 1044.

There is nothing wrong with that, but this is larger than 1024,

and could in certain setups cause problems with:

1) software that runs at boot time (e.g., old versions of LILO)

2) booting and partitioning software from other OSs

   (e.g., DOS FDISK, OS/2 FDISK)

Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)


Command (m for help): p


Disk /dev/sdc: 8589 MB, 8589934592 bytes

255 heads, 63 sectors/track, 1044 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes


   Device Boot      Start         End      Blocks   Id  System


Command (m for help): n

Command action

   e   extended

   p   primary partition (1-4)

p

Partition number (1-4): 1

First cylinder (1-1044, default 1): 

Using default value 1

Last cylinder or +size or +sizeM or +sizeK (1-1044, default 1044): +5g


Command (m for help): n

Command action

   e   extended

   p   primary partition (1-4)

p

Partition number (1-4): 2

First cylinder (610-1044, default 610): 

Using default value 610

Last cylinder or +size or +sizeM or +sizeK (610-1044, default 1044): 

Using default value 1044


Command (m for help): p


Disk /dev/sdc: 8589 MB, 8589934592 bytes

255 heads, 63 sectors/track, 1044 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes


   Device Boot      Start         End      Blocks   Id  System

/dev/sdc1               1         609     4891761   83  Linux

/dev/sdc2             610        1044     3494137+  83  Linux


Command (m for help): w

The partition table has been altered!


Calling ioctl() to re-read partition table.

Syncing disks.


# fdisk -l /dev/sdc


Disk /dev/sdc: 8589 MB, 8589934592 bytes

255 heads, 63 sectors/track, 1044 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes


   Device Boot      Start         End      Blocks   Id  System

/dev/sdc1               1         609     4891761   83  Linux

/dev/sdc2             610        1044     3494137+  83  Linux


3. 파일시스템 생성(포맷)

- ext3 파일시스템을 생성한다.

# mke2fs -j -L/backup /dev/sdc1

# mke2fs -j -L/data2 /dev/sdc2


# e2label /dev/sdc1

/backup

# e2label /dev/sdc2

/data2


4. 마운트 디렉토리 생성

# mkdir /backup /data2


5. 마운트(hdd 장치 연결)

# mount -t ext3 /dev/sdc1 /backup

# mount -t ext3 /dev/sdc2 /data2

# df

Filesystem           1K-blocks      Used Available Use% Mounted on

  :

  :

/dev/sdc1              4814936    140768   4429580   4% /backup

/dev/sdc2              3439216     71596   3192916   3% /data2


6. 마운트 연결 유지

- /etc/fstab 에 마운트에 대한 정보를 추가한다.

# vi /etc/fstab

-- /etc/fstab --

  :

  :

LABEL=/backup           /backup                  ext3    defaults        1 2

LABEL=/data2            /data2                   ext3    defaults        1 2

  :

  :

-- /etc/fstab --


-- 작업 순서 --

==========================================================================


==========================================================================

LAB> 아래 조건에 맞는 HDD 더 추가해서 각 디렉토리에 장치를 마운트 하시오.


-- 조건 --

1. UUID를 이용해서 마운트

- UUID=UUID문자열


2. HDD 정보

컨트롤로   : SATA

HDD 파일명 : satahdd3 (/dev/sdd)

용량 : 10G

파티션 정보 :    |---------|----------|----------|

용량   :             3g         3g         4g

장치명 :          /dev/sdd1  /dev/sdd2  /dev/sdd5

                      |          |          |

마운트 디렉토리 : /backup2    /data3     /data4

-- 조건 --


1. HDD 추가

- 생략


2. HDD 파티션 분할

# fdisk -l 

  :

Disk /dev/sdd: 10.7 GB, 10737418240 bytes

255 heads, 63 sectors/track, 1305 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes


Disk /dev/sdd doesn't contain a valid partition table


# fdisk /dev/sdd

n -> p -> 1 -> 엔터 -> +3g

n -> p -> 2 -> 엔터 -> +3g

n -> e -> 3 -> 엔터 -> 엔터

n -> l -> 엔터 -> 엔터 


Command (m for help): p


Disk /dev/sdd: 10.7 GB, 10737418240 bytes

255 heads, 63 sectors/track, 1305 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes


   Device Boot      Start         End      Blocks   Id  System

/dev/sdd1               1         366     2939863+  83  Linux

/dev/sdd2             367         732     2939895   83  Linux

/dev/sdd3             733        1305     4602622+   5  Extended

/dev/sdd5             733        1305     4602591   83  Linux


# fdisk -l /dev/sdd


Disk /dev/sdd: 10.7 GB, 10737418240 bytes

255 heads, 63 sectors/track, 1305 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes


   Device Boot      Start         End      Blocks   Id  System

/dev/sdd1               1         366     2939863+  83  Linux

/dev/sdd2             367         732     2939895   83  Linux

/dev/sdd3             733        1305     4602622+   5  Extended

/dev/sdd5             733        1305     4602591   83  Linux


3. 파일시스템 생성(포맷)

# mkfs.ext3 /dev/sdd1

# mkfs.ext3 /dev/sdd2

# mkfs.ext3 /dev/sdd5


# tune2fs -l /dev/sdd1 | head -4

tune2fs 1.39 (29-May-2006)

Filesystem volume name:   <none>

Last mounted on:          <not available>

Filesystem UUID:          e750b3e6-65de-4d08-aa79-3642c5519dc1


# tune2fs -l /dev/sdd2 | head -4

tune2fs 1.39 (29-May-2006)

Filesystem volume name:   <none>

Last mounted on:          <not available>

Filesystem UUID:          cded0753-548f-4ad5-a58d-6c61f0198420


# tune2fs -l /dev/sdd5 | head -4

tune2fs 1.39 (29-May-2006)

Filesystem volume name:   <none>

Last mounted on:          <not available>

Filesystem UUID:          480254c5-d66e-4cde-9e3c-131eaf0601ca


4. 마운트 디렉토리 생성

# mkdir /backup2 /data3 /data4


5. 마운트(hdd 장치 연결)

# mount /dev/sdd1 /backup2 

# mount /dev/sdd2 /data3

# mount /dev/sdd5 /data4 

# df

  :

  :

/dev/sdd1              2893628     69928   2676708   3% /backup2

/dev/sdd2              2893660     69928   2676740   3% /data3

/dev/sdd5              4530236    140192   4159916   4% /data4


6. 마운트 연결 유지

# vi /etc/fstab

-- /etc/fstab --

  :

  :

UUID=e750b3e6-65de-4d08-aa79-3642c5519dc1 /backup2 ext3    defaults  1 2

UUID=cded0753-548f-4ad5-a58d-6c61f0198420 /data3   ext3    defaults  1 2

UUID=480254c5-d66e-4cde-9e3c-131eaf0601ca /data4   ext3    defaults  1 2

  :

  :

-- /etc/fstab --

==========================================================================



'OS > [Linux] CentOS' 카테고리의 다른 글

[CentOS] 13-1. 사용자관리체크  (0) 2016.07.10
[CentOS] 13. 사용자관리  (0) 2016.07.10
[CentOS] 11. vi 편집  (0) 2016.07.10
[CentOS] 10-2. suidtest  (0) 2016.07.10
[CentOS] 10-1. suidtest  (0) 2016.07.10

vim_명령어_정리.pdf



- 여러 종류의 편집기들

gedit : Xwindow 에서 사용하는 편집기

pico

nano

emacs : 프로그래머(?)     

vi : 


- vi 로 할 수 있는 것들

1. 프로그래밍

- C, shell, python, perl, php, 프로그래밍 언어

2. 서버의 설정파일을 변경

- 설정파일이 모두 text 형태의 파일로 되어있다.


- 확장된 vi(vim) 패키지 설치하기

# yum -y install vim-enhanced


- 확장된 vi인 vim  

# which vim

/usr/bin/vim


- 기본적인 vi 

# which vi

/bin/vi


- 간단한 vim 실행하기

# vim


F1 


- 사용법 alias 새로운명령어='기존명령어'


# alias vi='vim'

# alias

  :

  :

alias vi='vim'


- vi의 alias를 계속 유지하고 싶다면 로그인시 실행되는 스크립트인

  .bashrc에 내용을 넣으면 된다.

# vi .bashrc

-- .bashrc --

  :

alias vi='vim'

  :

-- .bashrc --


- text를 보는 여러가지 명령어들 

less, more

head,tail

cat, tac

vi, view


- vi 옵션 설정하기 

- vi -> :set all 전체 옵션을 확인할 수 있다.

- $HOME : 자신의 홈디렉토리를 의미한다.

- vi를 실행하면 아래 설정파일에 세팅된 내용대로 실행된다.

설정파일 위치 : $HOME/.vimrc 


옵션의 형식 : 

첫 번째 : set 옵션명(on), set no옵션명(off)

두 번째 : set 옵션명=값

- on/off 두 가지만 있을 때 

옵션 : on

no옵션 : off

set 옵션 : 현재 옵션을 활성화 시킨다.


-- .vimrc --

set nu

set ai

set ci

set bg=dark

set sw=2

set ts=2

-- .vimrc --


바이너리 : cat 으로 볼 수 없다.  hexdump, xxd, objdump, strings


- vi 를 실행하는 방법

1. 그냥 명령어를 실행하는 방법 : vi 

2. 파일명을 주고 명령어를 실행하는 방법 : vi 파일명


명령의 도움말을 확인하기 위해서는 

man 명령어 

명령어 --help  or -h

       ~~~~~~


ex) man ls, man vi

ex) ls --help, vi --help


- vi를 실행하고 아래 명령을 사용한다.

:set     <-- 현재 설정된 옵션을 출력한다.

:set all <-- 모든 옵션을 출력한다.


:set number 

:set



ex) set number , set nonumber

    set ts=8, set ts=10, set ts=2

    

*** 구글가서 set 옵션을 검색 ***


=======================================================================

LAB> 언어설정 테스트 


Xshell : 기본언어 선택

# LANG=ko_KR.eucKR

# vi eucKR.txt

-- eucKR.txt --

안녕하세요....

-- eucKR.txt --

# file eucKR.txt 

eucKR.txt: ISO-8859 text

# cat eucKR.txt 

안녕하세요....



Xshell : 유니코드 선택

# cat eucKR.txt 

¾??¼¼¿?..


# LANG=ko_KR.utf-8

# vi utf-8.txt 

-- utf-8.txt --

안녕하세요....

-- utf-8.txt --

# file utf-8.txt 

utf-8.txt: UTF-8 Unicode text

# cat utf-8.txt 

안녕하세요....


Xshell : 기본언어 선택

# LANG=ko_KR.eucKR

# cat utf-8.txt 

???????몄??....



-- /etc/sysconfig/i18n --

# cat /etc/sysconfig/i18n 

#LANG="en_US.UTF-8"

LANG="ko_KR.utf-8"

SYSFONT="latarcyrheb-sun16"

-- /etc/sysconfig/i18n --

=======================================================================


***** 조합 *****

키를 누르면 두 가지 종류의 키가 있다.

첫 번째 키 : 키를 누르는 순간 바로 동작하는 키

두 번째 키 : 키를 누르는 순간 사용자에게 한번 더 입력을 받는 키


숫자 : 반복하는 키 5j , 5W ...

d    : 삭제만 dd, dw, 3dW, d3W

c    : 삭제와 입력 cc, cw, 3cW

y    : 복사 yy p 

f    : 한 줄에서 한 문자를 찾을 때 사용  2fo, fk  

g    : 이동 gg G


1. 바로 반응 O (x,w,j ...)

2. 바로 반응 X (숫자, d, c, f, s, y, ^w ...)

***** 조합 *****


이동키 + 삭제키

이동키 + 복사키


현재 라인에서 아래쪽으로 3줄을 복사한 후 붙여넣기를 한다.

- 3yy p   y3yp

현재 커서 위치에서 3단어를 복사한 후 아무곳에 붙여넣기를 한다.

- 3yW p  y3W p

현재 라인을 10번 복사한 후 아무곳에 붙여넣기를 한다.

- yy 10p

현재 라인을 한 줄 짤라내서 아무곳에 붙여넣기를 한다. (한 줄 이동)

- dd  p


현재 문서 내용을 몽땅 삭제한다. (g를 이용)

- ggdG, Gdgg


10번 라인으로 위치

- 10gg, 10G  

10번 라인부터 30번 라인까지 삭제한다.

- d30G d30gg


복사

- yw -> p, P

- yy -> p, P


hello.txt 파일을 저장


# LANG=C

# vi 

-----

안녕하세요.

좋은 아침입니다

-----


ESC -> :wq hello.txt 

ESC -> :w hello.txt  -> :q



단일창에서 hello.txt 파일 불러오기 

# vi


:e hello.txt



다중창에서 hello.txt 파일 불러오기 

# vi


:new hello.txt  -> :qa!


hello.txt 파일에 내용 추가하기

# vi

Hi...

Good Morning!!!


:w >> hello.txt -> :q!



# cat hello.txt




- /etc/DIR_COLORS 를 복사해서 vi 연습하기


# cp /etc/DIR_COLORS .

# rdate -s time.bora.net

# date

# cmp DIR_COLORS /etc/DIR_COLORS

# diff DIR_COLORS /etc/DIR_COLORS


# vi DIR_COLORS


-  서버의 설정파일을 vi 로 수정하기


# netstat -nltp | grep ssh

tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      2232/sshd        


# vi /etc/ssh/sshd_config 

-- /etc/ssh/sshd_config --

  :

  :

Port 22          

Port 2200

  :

  :

-- /etc/ssh/sshd_config --


x -> o -> Port 2200 추가 -> :wq -> ssh restart


# /etc/init.d/sshd restart

# netstat -nltp | grep ssh

tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      8053/sshd           

tcp        0      0 0.0.0.0:2200                0.0.0.0:*                   LISTEN      8053/sshd   


검색 


- 한 라인에서 검색하기 (f)


---> 정방향 찾기

f_ <- 찾을 문자 

fr : 현재 행에서 r 을 찾아서 이동한다.  ; (다음 찾기)  , (이전 찾기)


<--- 역방향 찾기

F_ <- 찾을 문자 

Fr : 현재 행에서 r 을 찾아서 이동한다.  ; (다음 찾기)  , (이전 찾기)


- 문서 전체에서 검색하기 (/)

/찾을단어


---> 정방향 찾기 (/)

n(소) : 정방향으로 다음 찾기

N(대) : 역방향으로 다음 찾기


ex) /TERM  n  N


<--- 역방향 찾기 (?)

n(소) : 정방향으로 다음 찾기

N(대) : 역방향으로 다음 찾기


ex) ?TERM  n  N




- 두 줄 삭제

d2d 2dd dj


- 복사/붙히기 (YP)

Y, yy, 1yy, y1y  


- 현재 커서의 위치에서 두 줄 복사해서 15라인에 붙히기를 하시오.

2Y14Gp

2yy15GP


- 이동/붙히기 (dP)

- 현재 커서의 위치에서 두 줄 삭제하고 15라인에 붙히기를 하면 이동된다.

2dd15GP


- 블럭잡기

v(소) : 문자 단위

V(대) : 라인 단위

^v    : 행 단위


- 한 줄 복사/붙히기

Vy10GP

 

- 한 줄 이동/붙히기

Vd20GP


- 세 단어 복사/붙히기

v3Wy10GP


- 3 행의 한 단어 블럭 삭제

^ve3jd


- 탭 한 칸 삽입

V>


- 탭 열 칸 삽입

V10>





c^ : 현재 커서에서 왼쪽을 삭제하고 입력 상태로 변경한다.

c$, C : 현재 커서에서 오른쪽을 삭제하고 입력 상태로 변경한다.

s, cc : 한 줄을 삭제하고 입력 상태로 변경한다.


문서 전체를 모두 삭제한다.

ggdG, 1GdG, Gd1G, G1dG, Gdgg



o 단어 치환

형식 : :범위s/찾을단어/바꿀단어/옵션


- 전체 문서에서 tty를 TTY 로 변경한다.

:%s/tty/TTY/g


- 1 라인부터 30 라인까지 tty를 TTY 로 변경한다.

:1,30s/tty/TTY


- 현재 라인에 tty를 TTY 로 변경한다.

:s/tty/TTY


- 범위 지정을 이용해서 복사나 이동 삭제를 할 수 있다.

:범위 키워드 라인번호


:6,9 del

:6,9 copy 0

:6,9 move 0


- 전체 문서를 삭제한다.

:% del  or :%d



- 현재 행의 첫 번째 TERM을 term 으로 변경한다.

:s/TERM/term


- 현재 행의 모든 TERM을 term 으로 변경한다.

:s/TERM/term/g



- 현재 행의 모든 TERM을 term 으로 확인하면서 변경한다.

:s/TERM/term/gc


- 전체 문서에서 TERM을 term 으로 확인하면서 변경한다.

:%s/TERM/term/gc


- 블럭이 지정되어 있는 곳의 모든 TERM을 term 으로 변경한다.

V 를 눌러서 블럭을 지정한 후 : 를 입력한다.

:'<,'>s/TERM/term/g



- 다중창

:new 

:new /etc/passwd 

:new /etc/fstab


Ctrl + w + w : 창 이동


Ctrl + w + j : 아래로 이동 

Ctrl + w + k : 위로 이동 


2 + Ctrl + w + k  : 두 칸 위로 이동 

Ctrl + w + 2 + k  : 두 칸 위로 이동 


Ctrl + w + 5 + +  : 창을 5 칸 늘린다.


^w_  : 커서가 있는 창을 최대로 늘린다.

^w=  : 창을 모두 동일하게 한다.



:qa! : 여러개의 창을 저장하지 않고 종료한다.




~  : 대/소 문자를 전환한다.

10~



r바꿀문자 : 


R : 수정모드

<- : 수정했던 것을 복구하는 키


^a : 1 증가

^x : 1 감소



:!명령어실행


:!ls -ld /   <-- /bin/ls 실행

:!bash       <-- /bin/bash

:!sh         <-- /bin/bash



/

?

*

f

F


보안툴 설치

다운로드 : http://sourceforge.net/projects/sentrytools/

파일명 : portsentry-1.2.tar.gz


- 파일을 압축해제 하고 디렉토리로 이동한다.

# tar xzf portsentry-1.2.tar.gz 

# cd portsentry_beta


# vi ~/.vimrc

-- ~/.vimrc --

  :

set fdm=marker

-- ~/.vimrc --


# vi portsentry.c

-- portsentry.c --

  :

  :                /main

int                /{ v]}zf n v]}zf n 

main (int argc, char *argv[])

{ /*{{{*/  <-- ]}       v]}zf  zo zc

  :

  :

} /*}}}*/  <-- [{

-- portsentry.c --



- 도움말에 관련된 내용을 확인할 때 사용한다.


:help zf 

:help D


F1 

:set mouse=a   vi 에서 마우스 활성화 하기

:set mouse=    vi 에서 마우스 비활성화 하기


|....|

 ~~~~

  ^] --> ^t



o map 기능 사용하기


<Esc>                  ESC 키

<CR>                   엔터키 (Carriaga retrun)

<C-A>                  Ctrl+A

<A-A>                  Art+A

<S-A>                 Shift+A

<F1>                   F1키

<Home>                Home 키

<End>                 End 키




o vi 에서 F2 번의 기능키를 등록한다.


map <F2> :w<CR> :!gcc -o %< % <CR> ;  ./%< <CR>


vi 파일명  -> 현재 디렉토리에 .파일명.swp 파일이 생성된다.


===================================================================

LAB> vi 에서 swap 파일이 생겼을 때 복구하는 방법


o swap 파일의 문제점


*** 웹페이지에서 swap 파일은 보안상 문제가 발생될 수 있으므로  ***

*** 홈페이지 운영시 웹페이지가 있는 디렉토리에서 swap 파일이  ***

*** 있는지 find 명령어로 반드시 점검해야 한다. ***

*** 사용법 : find <디렉토리명> -name "swap 파일명" 옵션


swap 파일의 형식 : .파일명.swp


# vi test.txt

-- test.txt --

  :

  :


:!ls -l .test.txt.swp

:wq

-- test.txt --


-rw------- 1 root root 12288 Oct 24 01:44 .test.txt.swp


# ls -l test.txt 

-rw-r--r-- 1 root root 73 Oct 24 01:45 test.txt


- swp 파일이 없다

# ls -l .test.txt.swp

ls: .test.txt.swp: No such file or directory


# vi test.txt

E325: ATTENTION

Found a swap file by the name ".test.txt.swp"

          owned by: root   dated: Fri Oct 24 01:48:40 2014

         file name: ~root/test.txt

          modified: YES

         user name: root   host name: localhost.localdomain

        process ID: 14265

While opening file "test.txt"

             dated: Fri Oct 24 01:45:18 2014


(1) Another program may be editing the same file.

    If this is the case, be careful not to end up with two

    different instances of the same file when making changes.

    Quit, or continue with caution.


(2) An edit session for this file crashed.

    If this is the case, use ":recover" or "vim -r test.txt"

    to recover the changes (see ":help recovery").

    If you did this already, delete the swap file ".test.txt.swp"

    to avoid this message.


Swap file ".test.txt.swp" already exists!

[O]pen Read-Only, (E)dit anyway, (R)ecover, (D)elete it, (Q)uit, (A)bort:


r -> :w -> rm -f .test.txt.swp 

     ~~~

     1. 저장 O : :wq -> swap 파일을 삭제

     2. 저장 X : :q! -> swap 파일을 삭제

     만약에 swap 파일을 삭제하지 않고 다시 test.txt 파일을 열면

     .test.swo 파일이 만들어진다.

     -rw-r--r-- 1 root root 12288 Oct 24 01:59 .test.txt.swn

     -rw-r--r-- 1 root root 12288 Oct 24 01:58 .test.txt.swo

     -rw-r--r-- 1 root root 12288 Oct 24 01:55 .test.txt.swp


# find -name "*.sw*" -ls

575459   16 -rw-r--r--   1 root     root        12288 Oct 24 01:55 ./.test.txt.swp

575517   16 -rw-r--r--   1 root     root        12288 Oct 24 01:58 ./.test.txt.swo


===================================================================


'OS > [Linux] CentOS' 카테고리의 다른 글

[CentOS] 13. 사용자관리  (0) 2016.07.10
[CentOS] 12. HDD 추가하기  (0) 2016.07.10
[CentOS] 10-2. suidtest  (0) 2016.07.10
[CentOS] 10-1. suidtest  (0) 2016.07.10
[CentOS] 9. 환경변수 테스트  (0) 2016.07.10

# ls -l /dev/sda

brw-r----- 1 root disk 8, 0 Jul 10 08:50 /dev/sda

# useradd fdiskuser

# su - fdiskuser

$ id

uid=521(fdiskuser) gid=521(fdiskuser) groups=521(fdiskuser)

$ ls -l /sbin/fdisk

-rwxr-xr-x 1 root root 96276 Feb 23  2012 /sbin/fdisk

$ fdisk 

-bash: fdisk: command not found

$ echo $PATH

/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/home1/fdiskuser/bin

$ PATH=$PATH:/sbin

$ echo $PATH

/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/home1/fdiskuser/bin:/sbin

[fdiskuser@localhost ~]$ fdisk 


Usage: fdisk [-l] [-b SSZ] [-u] device

E.g.: fdisk /dev/hda  (for the first IDE disk)

  or: fdisk /dev/sdc  (for the third SCSI disk)

  or: fdisk /dev/eda  (for the first PS/2 ESDI drive)

  or: fdisk /dev/rd/c0d0  or: fdisk /dev/ida/c0d0  (for RAID devices)

  ...

$ fdisk -l /dev/sda

Cannot open /dev/sda

$ exit

# chmod u+s /sbin/fdisk

# ls -l /sbin/fdisk 

-rwsr-xr-x 1 root root 96276 Feb 23  2012 /sbin/fdisk

# su - fdiskuser


$ id

uid=521(fdiskuser) gid=521(fdiskuser) groups=521(fdiskuser)

$ /sbin/fdisk -l /dev/sda


Disk /dev/sda: 8589 MB, 8589934592 bytes

255 heads, 63 sectors/track, 1044 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes


   Device Boot      Start         End      Blocks   Id  System

/dev/sda1   *           1          13      104391   83  Linux

/dev/sda2              14         268     2048287+  83  Linux

/dev/sda3             269         523     2048287+  83  Linux

/dev/sda4             524        1044     4184932+   5  Extended

/dev/sda5             524         587      514048+  83  Linux

/dev/sda6             588         815     1831378+  83  Linux

/dev/sda7             816        1044     1839411   83  Linux



'OS > [Linux] CentOS' 카테고리의 다른 글

[CentOS] 12. HDD 추가하기  (0) 2016.07.10
[CentOS] 11. vi 편집  (0) 2016.07.10
[CentOS] 10-1. suidtest  (0) 2016.07.10
[CentOS] 9. 환경변수 테스트  (0) 2016.07.10
[CentOS] 8. 권한연습  (0) 2016.07.10


# ls -l /etc/shadow

-r-------- 1 root root 2158 Jul 15 21:15 /etc/shadow

# ls -l /usr/bin/head 

-rwxr-xr-x 1 root root 29212 Mar 21  2012 /usr/bin/head

# useradd headuser

# su - headuser

$ head /etc/shadow

head: cannot open `/etc/shadow' for reading: Permission denied

$ exit

# chmod u+s /usr/bin/head 

# ls -l /usr/bin/head 

-rwsr-xr-x 1 root root 29212 Mar 21  2012 /usr/bin/head

# su - headuser

$ head /etc/shadow

root:$6$nmLBZVkD$pstH .../:16626:0:99999:7

  :

  :

$ exit

# echo 1234 | passwd --stdin headuser

# tail -1 /etc/shadow

headuser:$6$.xKuWGln$6U...:16631:0:99999:7:::

# su - headuser


$ passwd

Changing password for user headuser.

Changing password for headuser

(current) UNIX password: 

passwd: Authentication token manipulation error

$ !!

passwd

Changing password for user headuser.

Changing password for headuser

(current) UNIX password:   <-- 1234 입력

New UNIX password: 

Retype new UNIX password: 

passwd: all authentication tokens updated successfully.

$ exit


# tail -1 /etc/shadow

headuser:$6$CD2VyJWC$NbYm08fP...:16631:0:99999:7:::

# ls -l `which passwd`

-rwsr-xr-x 1 root root 23420 Aug 11  2010 /usr/bin/passwd



'OS > [Linux] CentOS' 카테고리의 다른 글

[CentOS] 11. vi 편집  (0) 2016.07.10
[CentOS] 10-2. suidtest  (0) 2016.07.10
[CentOS] 9. 환경변수 테스트  (0) 2016.07.10
[CentOS] 8. 권한연습  (0) 2016.07.10
[CentOS] 7-2. 리눅스 퍼미션  (0) 2016.07.10

# echo $PATH

/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

# su fdiskuser

$ echo $PATH

/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

$ fdisk -l /dev/sda


Disk /dev/sda: 8589 MB, 8589934592 bytes

255 heads, 63 sectors/track, 1044 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes


   Device Boot      Start         End      Blocks   Id  System

/dev/sda1   *           1          13      104391   83  Linux

/dev/sda2              14         268     2048287+  83  Linux

/dev/sda3             269         523     2048287+  83  Linux

/dev/sda4             524        1044     4184932+   5  Extended

/dev/sda5             524         587      514048+  83  Linux

/dev/sda6             588         815     1831378+  83  Linux

/dev/sda7             816        1044     1839411   83  Linux

$ exit


# echo $PATH

/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

# su - fdiskuser

$ echo $PATH

/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/home1/fdiskuser/bin

$ fdisk -l /dev/sda

-bash: fdisk: command not found



'OS > [Linux] CentOS' 카테고리의 다른 글

[CentOS] 10-2. suidtest  (0) 2016.07.10
[CentOS] 10-1. suidtest  (0) 2016.07.10
[CentOS] 8. 권한연습  (0) 2016.07.10
[CentOS] 7-2. 리눅스 퍼미션  (0) 2016.07.10
[CentOS] 중간 정리  (0) 2016.07.06



# touch a.txt

# ls -l a.txt 

-rw-r--r-- 1 root root 0 Sep  5 11:06 a.txt


# chmod --help

chmod [OPTION]... MODE[,MODE]... FILE...

  :

-rw-r--r--  -> -rwxrw-r-x 

# chmod u+x,g+w,o+x  a.txt


-rwxrw-r-x  -> ---x-----x  

# chmod u-rw,g-rw,o-r a.txt


---x-----x  -> -r-xr-x-wx 

# chmod u+r,g+rx,o+w a.txt


-r-xr-x-wx  -> --w--w-r--

# chmod u=w,g=w,o=r a.txt

      or

# chmod ug=w,o=r a.txt


--w--w-r--  -> -r-xr-x--x

# chmod ug=rx,o=x a.txt

        or

# chmod ugo=rx,o-r a.txt

        or

# chmod a=rx,o-r a.txt

        or

# chmod a=x,ug+r a.txt


ugoa+-=rwx,


----------

# chmod a= a.txt


아래 권한들을 맞추기

# ls -l /etc/shadow (400)

-r-------- 1 root abc 1284 Sep  5 09:28 /etc/shadow


# ls -l /bin/bash (755)

-rwxr-xr-x 1 root root 735804 Jul 22  2011 /bin/bash


# ls -l /dev/sda1 (640)

brw-r----- 1 root disk 8, 1 Sep  4 09:44 /dev/sda1


# ls -ld /etc (755)

drwxr-xr-x 81 root root 4096 Sep  5 09:28 /etc



- 특수 권한

[root@localhost ~]# ls -l a.txt 

---------- 1 root root 0 Sep  5 11:06 a.txt

[root@localhost ~]# chmod ug+s,o+t a.txt 

[root@localhost ~]# ls -l a.txt 

---S--S--T 1 root root 0 Sep  5 11:06 a.txt

[root@localhost ~]# chmod u+x a.txt 

[root@localhost ~]# ls -l a.txt 

---s--S--T 1 root root 0 Sep  5 11:06 a.txt

[root@localhost ~]# chmod g+x a.txt 

[root@localhost ~]# ls -l a.txt 

---s--s--T 1 root root 0 Sep  5 11:06 a.txt

[root@localhost ~]# chmod o+x a.txt -v

mode of `a.txt' changed to 7111 (--s--s--t)



    rwsr-xr-x


권한을 변경할 수 있는가 ?

권한에 대한 의미를 파악할 수 있는가 ?

Set-uid, Set-gid, sticky bit 의 의미를 파악할 수 있는가 ?

r(읽기) 권한의 의미를 파악할 수 있는가 ?

w(쓰기) 권한의 의미를 파악할 수 있는가 ?

x(실행) 권한의 의미를 파악할 수 있는가 ?


find [디렉토리]... -옵션 값 ...


# find /bin -name bash

# find /bin -perm 755 

# find /bin -perm 4755 

# find /bin /usr/bin /usr/sbin -perm -4000 -ls



- set-uid 의 비밀

# grep ^user1 /etc/shadow

user1:$6$/8mkpuL.$x7FMVTxlCoSCx6.ktqDFEY1k ...

# su - user1

$ passwd

Changing password for user user1.

Changing password for user1

(current) UNIX password: 

New UNIX password: 

Retype new UNIX password: 

passwd: all authentication tokens updated successfully.

$ exit

# grep ^user1 /etc/shadow

user1:$6$DIE6HW8T$tkyiS7a0qm3TJ.4l41G28oL ...


# ls -l /etc/shadow

-r-------- 1 root root 1348 Sep  5 13:00 /etc/shadow


# ls -l /usr/bin/passwd 

-rwsr-xr-x 1 root root 23420 Aug 11  2010 /usr/bin/passwd



- sticky bit 디렉토리 연습

- sticky bit가 걸려있는 디렉토리는 자신이 만든 파일은 자신만이 지울 수 있다.

[root@localhost ~]# chmod o-t /tmp

[root@localhost ~]# ls -ld /tmp

drwxrwxrwx 5 root root 4096 Sep  5 11:26 /tmp

[root@localhost ~]# touch /tmp/root.txt

[root@localhost ~]# ls -l /tmp/root.txt 

-rw-r--r-- 1 root root 0 Sep  5 13:10 /tmp/root.txt


- 일반 유저 user1이 root 가 생성한 파일을 삭제할 수 있다.

[root@localhost ~]# su - user1

[user1@localhost ~]$ rm -fv /tmp/root.txt 

removed `/tmp/root.txt'

[user1@localhost ~]$ ls -l /tmp/root.txt

ls: /tmp/root.txt: No such file or directory

[user1@localhost ~]$ exit

logout


- 다시 원래의 권한으로 변경하고 파일을 다시 생성한다.

[root@localhost ~]# chmod o+t /tmp/

[root@localhost ~]# touch /tmp/root2.txt

[root@localhost ~]# ls -ld /tmp/ 

drwxrwxrwt 5 root root 4096 Sep  5 13:12 /tmp/

[root@localhost ~]# su - user1

[user1@localhost ~]$ ls -l /tmp/root2.txt

-rw-r--r-- 1 root root 0 Sep  5 13:12 /tmp/root2.txt


- sticky bit가 디렉토리에 걸려있음로 삭제가 안된다.

[user1@localhost ~]$ rm -fv /tmp/root2.txt 

rm: cannot remove `/tmp/root2.txt': Operation not permitted

[user1@localhost ~]$ exit



- 잘못된 디렉토리 때문에 파일을 일반유저가 수정할 수 있는 경우

[root@localhost ~]# touch /tmp/root2.txt

[root@localhost ~]# chmod 777 /tmp/

[root@localhost ~]# ls -ld /tmp/

drwxrwxrwx 5 root root 4096 Sep  5 13:31 /tmp/

[root@localhost ~]# ls -ld /tmp/root2.txt 

-rw-r--r-- 1 root root 3 Sep  5 13:31 /tmp/root2.txt

                      ~~~

[root@localhost ~]# su - user1

[user1@localhost ~]$ vi /tmp/root2.txt 

 ....


:w!


[user1@localhost ~]$ ll /tmp/root2.txt 

-rw-r--r-- 1 user1 user1 20 Sep  5 13:34 /tmp/root2.txt

                         ~~~


vi 에서 저장시 강제로 저장한다.   



'OS > [Linux] CentOS' 카테고리의 다른 글

[CentOS] 10-1. suidtest  (0) 2016.07.10
[CentOS] 9. 환경변수 테스트  (0) 2016.07.10
[CentOS] 7-2. 리눅스 퍼미션  (0) 2016.07.10
[CentOS] 중간 정리  (0) 2016.07.06
[CentOS] 7-1. 리눅스퍼미션  (0) 2016.07.02

+ Recent posts