반응형

유저별 open된 fd(file descriptor)의 정확한 값은 lsof로 확인하기는 어렵다.
각 프로세스들이 공유라이브러리 등을 공유해서 사용하는 등의 이유로 lsof에 중복되서 표기되는 요소들이 많기 때문이다.
즉, 실제 fd 보다 높게 표기되는 경향이 있다.
따라서 /proc 파일시스템의 각각의 process number(특정 유저 소유의) 아래의 fd 디렉토리 내의 것들의 합해야 특정 유저의 정확한 fd 값을 산출할 수 있다.

예를 들어 testuser 유저의 프로세스 중 프로세스 넘버가 12354가 있다면 아래와 같이 값을 구해야 한다.
# ls /proc/12354/fd/ | wc -l
11

따라서 여러개의 프로세스를 실행하고 있는 유저의 모든 fd 값을 합산하기 위해서는 스크립트의 도움이 필요하다.

아래는 특정 유저의 fd (file discripter) 현황을 출력해주는 스크립트다.

 

스크립트 내용

# cat userfd.sh

 

#!/bin/bash

NUM=0
for pid in `ps -o pid -u $1 | sort -nr`
do
    COUNT=$(ls /proc/$pid/fd/ 2>/dev/null | wc -l)
    echo "$COUNT for PID: $pid"
    NUM=`expr $NUM + $COUNT`
    if [ "$pid" = "PID" ]; then
        echo -e "$NUM \033[1;32mis total\e[21\033[0m"
    fi
done | sort -n

if [ "$1" = "" ]; then
   echo ""
   echo -e "\033[1;31m>> USERNAME is required <<\e[21\033[0m"
   echo "# $0 USERNAME"
fi

exit 0


– 스크립트 실행 인자로 받은 특정 유저의 pid를 모두 구해서 for loop 문에 값을 넣어 각각 출력 후 최종적으로 합한 값을 출력함.

 

사용 방법

– 스크립트 실행 시 인자값으로 username(testuser에서 원하는 명으로 변경)을 넣어주면 됨.
# ./userfd.sh testuser
0 for PID: PID
4 for PID: 12355
4 for PID: 6469
11 for PID: 12354
11 for PID: 6468
30 is total (testuser)

 

– total 값만 확인 시 사용법
# ./userfd.sh testuser | tail -1
30 is total (testuser)

 

[출처]https://mapoo.net/os/oslinux/%EB%A6%AC%EB%88%85%EC%8A%A4-%EC%9C%A0%EC%A0%80%EB%B3%84-fd-%EA%B0%92-%EC%82%B0%EC%B6%9C%ED%95%98%EA%B8%B0/

728x90
반응형

출처 : http://www.ischo.net/board_linux/16077

 

현재 실행 중인 프로세스의 File Descriptor 개수 확인

 

ls /proc/프로세스ID(PID)/fd/ | wc -l 

 

 

1. 현재의 Open 가능한 Maximum 파일 개수 확인

 

cat /proc/sys/fs/file-max 

 

-> 일반유저가 1개의 세션에서 열 수 있는 파일 개수

 

File Descriptor 는 hard, soft 값으로 나뉜다.

 

 

2. 전체 시스템에 적용되는 FD limit 값

 

시스템을 통해 Open 가능한 File Descriptor 개수는 /etc/sysctl.conf 파일로 변경 가능.

 

-> 오라클 및 아파치 등의 프로세스에서 이 값을 많이 요구

 

 

# sysctl -w fs.file-max=655360 

 

혹은

 

# vi /etc/sysctl.conf

  fs.file-max = 655360

# sysctl -p

# sysctl fs.file-max

 

 

3. 유저 레벨 FD limit 값

 

httpd 유저의 soft/hard limits 을 지정

 

# vi /etc/security/limits.conf

  httpd soft nofile 4096

  httpd hard nofile 10240 

 

 

 

출처 : http://blog.naver.com/PostView.nhn?blogId=ryangjm&logNo=10170724995

 

Soft limit (기본값) 확인

 

# ulimit -aS 또는 ulimit -a

 

Hard limit (최대값) 확인

 

# ulimit -aH

 

 

임시 Open File 개수 수정

 

# ulimit -n 2048

 

영구 Open File 개수 수정

 

# vi /etc/security/limits.conf

[user id]    soft    nofile    2048

[user id]    hard    nofile    2048



출처: https://loonyhyun.tistory.com/entry/File-Descriptor-확인-및-설정 [Like to LoonyHyun's Life]

728x90
반응형

허가권 ( Permission )


파일유형 필드에 퍼미션 구조를 이룬다,

읽기권한, 쓰기권한, 실행권한 등 세가지 필드로 구성된다.

 

 

 

-                r w x               r w x                 r w x

파일유형      사용자(user)        그룹(Group)       기타사용자(Other)

 

 

r w x 의 의미

r : 디렉토리/파일을 읽을 수 있는 권한 ( read)

w : 디렉토리/파일을 생성, 수정, 삭제할 수 있는 권한 ( write )

x : 디렉토리 접근, 파일의 실행권한 ( Access/eXute )

- : 해당 권한이 없는 경우 ( bar )

 

 

ex)

rwx r-x r-x

 

소유자는 읽기, 쓰기, 실행 권한을 모두 가지고 있다.

그룹 사용자는 읽기, 실행 권한을 가지고 있다.

기타 사용자는 읽기, 실행 권한을 가지고 있다.

 

ex)

rw- --- ---

소유자는 읽기, 쓰기 권한이 있다

그룹 사용자는 권한이 없다

기타 사용자는 권한이 없다.

 

 

 

# chmod - 허가권 변경 ( Change mode )

형식 : # chmod [모드] [파일명]

 

2가지 모드로 허가권을 변경할 수 있다.

 

기호모드 (상대값) <Symbolic > - 사람의 입장 

숫자모드 (절대값) - 컴퓨터의 입장 

 

 

1.기호모드

 

+    : 허가 권한 부여

-     : 허가 권한 제거

=    : 허가 권한 유지

s     : SetUID, SetGID

t     : StickyBit

u     : 소유자 권한

g     : 그룹 권한

o     : 기타 사용자

a     : 사용자, 그룹, 기타 사용자 모두에게

 

 

기호모드는 대상 ( u, g, o, a )에 대하여 rwx권한을 부여할 것인가 제거할 것인가를 모두 기호로 설정하는것이다

 

Ex)

1. 기타 사용자의 x 권한을 제거할때

기존 :    rwx     r-x     r-x 

# chmod o-x dong

변경후 :  rwx     r-x     r--

 

2. 그룹사용자의 쓰기, 기타사용자 쓰기권한 추가

기존 :    rwx    r-x    r--

# chmod g+w,o+w dong

변경후:    rwx  rwx  rw-

 

 

 

2. 숫자모드

- 각각의 허가권 필드를 3자리 8진수로 표기

- 완전한 표기법은 4자리 이지만 일반적으로 3자리를 사용한다

 

2진수 표기

1 - 해당권한 부여

0 - 해당 권한 해제

 

 

사용자필드        사용자      그룹        기타 사용자

허가권              r w x        r w x        r w x

자릿수              4 2 1        4 2 1       4 2 1

2진수               1 1 1        1 1 1       1 1 1

8진수                  7            7            7

 

Ex)

 

r w x        r - -        r - x

1 1 1        1 0 0      1 0 1

   7            4            5

 

->  # chmod 745 [ 파일명 ]  :  r w x    r - -    r - x

 

 

특수 권한의 종류

 

SetUID

- 실행 파일에 한해서 설정이 가능하며, SetUID 설정이 되어있는경우

실행한 사용자가 아닌 파일을 소유한 사용자의 권한으로 프로세스가 실행된다.

 

SetUID는 보통 root가 소유한 파일에 적용되며, 해당 명령을 실행하는 순간에는 Root 권한을 갖는다.

 

passwd 명령어 ( /usr/bin/passwd )로 패스워드를 지정, 변경시

/etc/passwd,  /etc/shadow 파일의 내용이 변경된다.

 

- /etc/passwd (644) --> root만 수정이 가능하다.

- /etc/shadow (000) --> root만 수정이 가능하다.

 

일반사용자 계정에서 passwd 명령어 실행 시 passwd 파일 소유자 root권한으로 실행되기 때문에

Root만 수정이 가능한 /etc/passwd,  /etc/shadow 파일을 수정할 수 있게된다.

 

SetUID 설정방법

- 기호모드 

- 숫자모드

 

 

SetGID

- 프로세스가 실행한 사용자의 그룹소유자가 아닌 파일의 그룹 소유자 권한으로 실행된다.
- SetGID가 디렉토리에 설정되어 있는 경우, 디렉토리에서 만들어지는 파일이 모두

  해당 디렉토리의 그룹 소유권을 갖는다.

 

 

SetUID 설정방법

- 기호모드  ( g+s ) 

- 숫자모드  ( 2XXX )

 

 

# useradd SetGID-user1

# groupadd SetGID-group

# usermod -g SetGID-group SetGID-user1

# mkdir /practice/SetGID-dir

# cd SetGID-dir

# touch SetGID-file1

# touch SetGID-file2

#cd ..

# chown SetGID-user1:SetGID-group SetGID-dir        // 소유권 변경

# cd SetGID-dir

# touch SetGID-file3

# touch SetGID-file4

# cd ..

# chmod g+s SetGID-dir        // 그룹 허가권 필드 s 변경

 

 

StickyBit

- 모든 사용자가 생성/수정/삭제가 가능한 디렉토리에 적용한다.

- Sticky Bit 설정 후에는 해당 파일의 소유자만 해당 파일을 삭제 할 수 있다.

한마디로, 공용 파일이 있는데 삭제는 소유자만 할 수 있도록 하는 설정.

 

SetUID 설정방법

- 숫자모드  ( 1XXX )

 

 

umask

- 새로운 파일이나 디렉토리 생성시 기본 허가권을 결정하는 기준이 되는 값.

 

디렉토리의 기본 허가권 값은 777 rwx rwx rwx 이다.

파일의 기본 허가권 값은 666 rw-  rw-  rw- 이다.

 

해당 값에서 UMASK 값을 빼고 남은 값으로 기본 허가권이 결정된다.

 

 

디렉토리 

파일 

기본값

777 

666 

UMAK  

022 

022 

결정된 허가권

755

644

 기호모드

rwx r-x r-x

rw- r-- r--

 

Ex)

UMASK 값이 007 일때,   디렉토리의 기본값은 770        파일의 기본값은 660이 된다.

UMASK 값이 200 일때,   디렉토리의 기본값은 577        파일의 기본값은 466이 된다.

UMASK 값이 040 일때,   디렉토리의 기본값은 737        파일의 기본값은 636이 된다.

 

 



출처: https://tyen.tistory.com/40 [TYen]

728x90

+ Recent posts