question1 solving

3 minute read

문제

  • 유저 생성 및 권한 구성
  • 유저수 - 총 1300명
  • 그룹 - 13개
  • 그룹장 전용 그룹 - 1개

  • 유저 이름은 일률적으로 부여되어 있습니다. user#### 식으로 번호가 부여되어 있고 이 번호는 정렬을 위하여 1번의 경우 0001이며 999번의 경우 0999으로 부여되어 있습니다.

  • 그룹은 team01 부터 team13 까지 부여되어 있다. 각 그룹에는 총 100명의 그룹원이 존재하고, 그룹원 중 1명을 그룹장으로 선출합니다.

  • 선출된 그룹장은 그룹장 전용 디렉토리에 포함되어 있어야 합니다.

  • 각 그룹의 skel 파일은 따로 구성되어 있어야 하며 유저를 생성하며 등록되어야 합니다.

  • 사용자가 로그인시 비밀번호가 리셋되어 있어 사용자가 비밀번호를 재설정하고 로그인되도록 해야 합니다.

  • 각 사용자들은 홈 디렉토리 내에서 공유 디렉토리 및 그룹 디렉토리로 상대경로를 통하여 진입이 가능해야 합니다.

  • 사용자의 비밀번호는 30일에 한번 교체가 되어야하며 만료일 5일 전부터 비밀번호 교체에 대한 경고 메시지를 출력해야 합니다.

  • alias 를 통하여 진입합니다. 공유 디렉토리 : sharedir 그룹 디렉토리 : projectdir

풀이

풀이 절차

  • 문제를 풀기 전에 절차를 세웠음.
    1. 그룹을 먼저 만든다.
    2. 그룹별 skel 파일을 구성한다.
    3. 공유 디렉토리 생성
    4. 그룹 디렉토리 생성
    5. skel파일 내의 .bashrc에 alias 를 미리 구성함.
    6. 그룹을 만든다.
    7. 유저를 만들면서 동시에 나머지 조건들을 적용
    8. 공유, 그룹 디렉토리 권한조정

1. 그룹 만들기

# for N in `seq -w 1 13`; do groupadd team$N;done
  • 반복문을 사용해서 구성함
  • seq에 -w 옵션을 사용하지않으면 1,2,3,4…10,11,12,13 처럼 구성된다.
  • 정렬을 위해 -w 옵션을 사용해서 01,02…12,13 으로 구성하자

2. 그룹별 skel 파일을 구성한다.

  • /etc에 groupteam 디렉토리를 만들어서 그 안에 구성함
    # cd /etc/groupteam
    # cp /etc/skel/.* /etc/groupteam/team01     기존 skel을 복사함 
    

    여기서 .mozlia 파일은 복사가 안되므로 따로 복사함.

복사한 skel 파일 team01을 반복문을 통해 13까지 복사한다.

[root@sunwoo1 groupteam]# for N in `seq -w 2 13`
> do
> cp -r ./team01 ./team$N
> done

3. 공유 디렉토리 생성

[root@sunwoo1 home]# mkdir sharedir

/home 에 sharedir 디렉토리를 만들어줌 권한설정은 나중에 함

4. 그룹 디렉토리 생성

[root@sunwoo1 home]# mkdir projectdir
[root@sunwoo1 home]# cd projectdir
[root@sunwoo1 projectdir]# mkdir team{01..13}
[root@sunwoo1 projectdir]# ls
team01  team03  team05  team07  team09  team11  team13
team02  team04  team06  team08  team10  team12 

/home 에 projectdir 디렉토리를 생성하고 그 안에 그룹별 디렉토리를 생성하였음.

5. skel 파일 내의 .bashrc에 alias 를 미리 구성함

아까 만들어뒀던 그룹별 skel 파일안의 .bashrc 에 vi편집기를 사용하여 alias projectdir=’cd ~/../projectdir/그룹명’ 을 입력한다. alias는 일회성이지만 .bashrc에 넣으면 영구적으로 사용에 가능하다

6. 그룹을 만든다.

# for N in `seq -w 1 13`; do groupadd team$N; done

team01 부터 team13 까지 그룹을 구성하였음

7. 유저를 만들면서 비밀번호 관련된 조건들을 한번에 적용

[root@sunwoo1 ~]# for a in `seq -w 1 13`
> do
> for b in `seq –f "%04g" $((a*100-99)) $((a*100))`
> do
> useradd -G team$a -m -k /etc/groupteam/team$a user$b
> echo `redhat` | passwd --stdin user$b
> passwd -x 30 –w 5 user$b
> passwd –e user$b
> done
> done
  • seq의 -f 옵션은 0으로 앞자리를 채워서 자릿수를 맞춰줌 “%04g” 이기때문에 0001 이런식으로
  • 100명마다 그룹과 skel 파일이 다르게 적용되게 하였음
  • 모든 유저들의 초기비밀번호를 redhat으로 적용하였음.
  • passwd의 -x 옵션은 교체 주기를 30일로 잡는것이고 -w 5 는 5일전부터 경고를 주는것임 -e옵션은 다음번 로그인 때 비밀번호를 교체하게끔 해주는 옵션

8. 공유, 그룹 디렉토리 권한조정

  • 그룹디렉토리의 그룹소유권을 바꾸고 권한을 부여해줌
    [root@sunwoo1 projectdir]# for N in `seq -w 1 13`
    > do
    > chown .team$N team$N
    > chmod 1771 team$N
    > done
    
  • 공유디렉토리의 권한을 조정해줌
    [root@sunwoo1 home]# chmod 1777 sharedir
    [root@sunwoo1 home]# ls -ld sharedir
    drwxrwxrwt. 2 root root 6 Sep 26 11:32 sharedir
    

풀이의 문제점

[root@sunwoo1 ~]# for a in `seq -w 1 13`
> do
> for b in `seq –f "%04g" $((a*100-99)) $((a*100))`
> do
> useradd -G team$a -m -k /etc/groupteam/team$a user$b
> echo `redhat` | passwd --stdin user$b
> passwd -x 30 –w 5 user$b
> passwd –e user$b
> done
> done

해당 명령어를 실행하는 과정에서 700번대와 800번대 user들 생성이 되지않는다.

-bash: 08: value too great for base (error token is "08")
-bash: 09: value too great for base (error token is "09")

해당 오류가 출력되는데 더 알아봐야할 것 같다.

내용 추가 반복적인 숫자에서 쉘이 8진수로 오해하여 해석하는 숫자들이 있는데 특히 seq 사용에서 그 현상이 많아진다고한다. 해결방법은 쉘이 정상적인 10진수로 인식할 수 있도록 10#을 붙이면 해결된다.

Leave a comment