1. umask 란?

아래와 같이 파일과 디렉토리를 새로 생성하면 기본으로 설정되는 권한은 어떻게 설정하는 걸까?

# touch file1
# mkdir directory1

# ls -ld file1 directory1
drwxr-xr-x 2 root root 4096 Mar 15 19:40 directory1 # 755
-rw-r--r-- 1 root root    0 Mar 15 19:41 file1 # 644

 

바로 기본권한에서 umask 에 설정된 권한을 제외한 권한이 기본적으로 설정되는 것이다.

file 은 기본권한이 0666, directory 는 0777 이다.

# umask
0022

 

e.g.

  file directory
default 0666 0777
umask 0022 0022
default permission 0644 0755
default permission symbol rw-r--r-- rwxr-xr-x

 

2. umask 설정 방법

커맨드: umask {8진수 파일권한}

e.g.

# umask 0002

(맨 앞의 0 생략 가능)

 

3. umask symbol 출력

커맨드: umask -S

디렉토리 기준으로 default permission symbol 을 출력한다. 즉, 디렉토리 생성시 기본 권한을 출력한다.

 

4. 유저 로그아웃시에 umask 를 유지하는 방법

기본적으로 로그아웃시 umask 값은 초기화된다.

유지하려면 startup scrypt 에 umask 세팅을 저장해야 한다.

# cat >> ~/.bashrc
umask 0002 # cmmand + D 로 저장

(vi 에디터가 없을시)

블로그 이미지

망원동똑똑이

프로그래밍 지식을 자유롭게 모아두는 곳입니다.

,

1. permission 설명

# ls -l

drwxr-xr-x 2 root root   4096 Feb 21 21:33 sampledir
-rw-r--r-- 1 root root 481280 Feb 21 21:36 sample.txt

첫번째 열의 10자리 중 2~10번째 자리가 해당 파일/디렉토리에 대한 권한을 의미하며,

rwxrwxrwx 으로 구성된다.(- 은 권한없음을 의미함)

  • 초록색: user 가 가진 권한
  • 파란색: group 가 가진 권한(group 에 속한 user 가 가진 권한)
  • 주황색: other 사용자가 가진 권한(그 외 사용자)

rwx 문자는 파일이냐 디렉토리냐에 따라 아래와 같은 권한을 의미한다.

권한 file directory
read 파일 내용 읽기
cat, more, less, tail, head...
디렉토리 내 파일목록을 읽기
ls
write 파일 내용 수정
vi
디렉토리 내 파일을 생성/삭제/이름변경
mkdir, touch, rm, rename...
execute 파일 프로그램을 실행 디렉토리 내부로 이동, 디렉토리 내 파일목록을 자세히 읽기
cd, ls -l

* 파일 프로그램을 실행하기 위해서는 read + execute 권한이 모두 있어야 함에 유의

 

2. permission 변경 명령어

2.1. symbol mode 로 지정하는 법

명령어: chmod {who}{action}{what} {대상파일/디렉토리}

  • who
    • u: user
    • g: group
    • o: other
    • a: user + group + other
  • action
    • +: 추가
    • -: 제거
    • =: 기존 권한을 무시하고 세팅
  • what
    • r: 읽기
    • w: 쓰기
    • x: 실행하기

e.g.

# chomd ug+x sample.txt

=> sample.txt 파일에 대해 user, group 의 execute 권한을 추가한다.

# chmod u=rw-,g=r--,o=--- passwd

=> passwd 파일에 대해 user는 read, write를, group은 read를, other는 아무것도 하지 못하게 권한을 설정한다.

 

2.2. 8진수 모드로 지정하는 법

8진수 숫자로 권한을 세팅하는 방법도 있다.

각 권한을 8진수로 표현하면 아래와 같다.

권한 2의 거듭제곱 8진수
r 2^2 4
w 2^1 2
x 2^0 1

각 권한을 더한 8진수 값의 합으로 permission set 을 표현한다.

 

e.g.

r-x: 4 + 1 = 5

rwx: 4 + 2 + 1 = 7

---: 0

 

이를 user, group, other 에게 각각 세팅하려면 아래와 같이 입력한다.

chmod {user permission set}{group permission set}{other permission set} {대상파일/디렉토리}

 

e.g.

# chmod 775 sample.txt

=> sample.txt 파일에 대해 rwxrwxr-x 권한을 세팅한다.

블로그 이미지

망원동똑똑이

프로그래밍 지식을 자유롭게 모아두는 곳입니다.

,

패스워드 관련 설정파일

1. /etc/passwd

# cut -d ":" -f 1,2 /etc/passwd

/etc/passwd 파일의 2번째 열 값이 encrypted password 를 의미하며, "x" 인 경우, 실제 encrypted password 는 /etc/shadow 파일에 저장되어있음

 

2. /etc/shadow

# cat /etc/shadow

test:$6$2i(...생략):20158:0:99999:7:10:20239:
  • 2번째 열 값: encrypted password
    이 값에 "*", "!" 가 들어가는 경우는 로그인 불가 계정을 의미하며, 아래와 같다.
    • *: 시스템 계정
    • !: 잠긴 계정 또는 아직 패스워드를 설정하지 않은 계정
  • 3번째 열 값: date of last password change
    패스워드가 마지막으로 수정된 날짜. 1970.01.01 기준으로 지난 일 수.
  • 4번쨰 열 값: minimum password age
    수정된 패스워드를 사용해야하는 최소 일 수(기본값: /etc/login.defs 의 PASS_MIN_DAYS 값)
    즉, 3번째 열 값 + 4번째 열 값 날짜까지 수정된 패스워드를 사용해야 한다.
    passwd -n {일수} {유저명}
    으로 수정 가능
  • 5번째 열 값: maximum password age
    수정된 패스워드를 사용할 수 있는 최대 일 수(기본값: /etc/login.defs 의 PASS_MAX_DAYS 값)
    즉, 3번째 열 값 + 5번째 열 값 날짜까지 수정된 패스워드를 사용할 수 있다.(273년으로 사실상 영구라고 봐도 됨)
    passwd -x {일수} {유저명}
    으로 수정 가능
  • 6번째 열 값: password warning period
    패스워드 만료 경고를 알릴 일 수(기본값: /etc/login.defs 의 PASS_WARN_AGE 값)
    즉, 3번째 열 값 + 5번째 열 값 - 6번째 열 값 일 부터 경고를 띄운다.(maximum password age 에 도달하기 전 경고를 띄울 일 수)
    password -w {일수} {유저명}
    으로 수정 가능
  • 7번째 열 값: passowrd inactivity period
    패스워드 만료일이 지난 후 계정이 비활성화 되기까지의 일 수(패스워드 변경을 하지 않을시)
    즉, 3번째 열 값 + 5번째 열 값 + 7번째 열 값 일 부터 계정이 비활성됨.
    (패스워드 만료일이 지나가면 로그인 시 강제로 패스워드를 수정하게 유도되는데, 계정이 비활성화되면 아예 로그인이 제한됨.)
  • 8번째 열 값: account expiration date
    (패스워드 만료일과 관계 없는)계정 만료일
    useradd -e {YYYY-MM-DD} {유저명}
    으로 설정 가능
  • 10번째 열 값: reserved field
    예약된 필드(빈값)

e.g.

# passwd -x 30 -w 5 -n 1 -i 10 test

=> test 계정에 대해 오늘을 기준으로 최소 1일, 최대 30일 후 까지 현재 패스워드를 사용할 수 있게 하되, 만료 5일 전 부터 경고를 띄우며, 만료일이 지나도 10일 동안 패스워드를 변경하지 않으면 계정을 비활성화한다.

 

3. /etc/login.defs

계정생성, 패스워드 할당시 default 로 적용되는 값

# cat /etc/login.defs

ENCRYPT_METHOD SHA512 # password 를 암호화 할 때 쓰인 알고리즘

PASS_MAX_DAYS 99999 # password 최대 유효 일 수(만료까지의 일 수)
PASS_MIN_DAYS 0 # password 최소 유지 일 수
PASS_WARN_AGE 7 # password 만료 전 경고를 띄울 일 수

UID_MIN  1000 # uid 최소값
UID_MAX 60000 # uid 최대값

GID_MIN  1000 # gid 최소값
GID_MAX 60000 # gid 최대값

USERGROUPS_ENAB yes # 유저계정 삭제시 primary group 도 값이 삭제할지 여부

 

ENCRYPT_METHOD 암호화 알고리즘 별로 encrypted password 의 시작하는 값이 아래와 같다.

  • SHA256: $5$
  • SHA512: $6$ 
  • MD5: $1$

 

 

패스워드 관리 명령어

1. passwd

특정 계정에 패스워드를 할당하거나 패스워드 정책을 수정

Options:
  -d, --delete: 패스워드 삭제
  -e, --expire: 로그인할 때 새로운 패스워드를 설정하도록 유도. date of last password change 을 0 으로 세팅
  -i, --inactive {일수}: 패스워드 만료 후 계정 비활성화 유예 일 수 세팅
  -l, --lock: 패스워드 잠금(로그인 불가)
  -n, --mindays {일수}: 현재 패스워드 사용 최소 일 수 세팅
  -u, --unlock: 패스워드 잠금 해제
  -w, --warndays {일수}: 패스워드 만료 전 경고를 띄울 일 수 세팅
  -x, --maxdays {일수}: 현재 패스워드 사용 최대 일 수 세팅

 

2. chage

패스워드 만료 정책 수정

Options:
  -E, --expiredate {YYYY-MM-DD}: 계정 만료 일 세팅
  -I, --inactive {일수}: 패스워드 만료 후 계정 비활성화 유예 일 수 세팅
  -l, --list: 패스워드 만료 관련 정보 출력
  -m, --mindays {일수}: 현재 패스워드 사용 최소 일 수 세팅
  -M, --maxdays {일수}: 현재 패스워드 사용 최대 일 수 세팅
  -W, --warndays {일수}: 패스워드 만료 전 경고를 띄울 일 수 세팅

 

e.g.

# chage -M 90 -m 0 -W 7 -I 20 test

=> test 계정에 대해 오늘을 기준으로 최소 0일, 최대 90일 후 까지 현재 패스워드를 사용할 수 있게 하되, 만료 7일 전 부터 경고를 띄우며, 만료일이 지나도 20일 동안 패스워드를 변경하지 않으면 계정을 비활성화한다.

 

3. usermod

계정 정보 수정, 패스워드 만료 정책 수정

Options:
  -e, --expiredate {YYYY-MM-DD}: 계정 만료 일 세팅
  -f, --inactive {일수}: 패스워드 만료 후 계정 비활성화 유예 일 수 세팅
  -L, --lock: 패스워드 잠금(로그인 불가)
  -U, --unlock: 패스워드 잠금 해제
블로그 이미지

망원동똑똑이

프로그래밍 지식을 자유롭게 모아두는 곳입니다.

,