분류 전체보기
[Linux] 리눅스 능력 (getcaps)
특정 프로세스에 주어진 능력들은 getpcaps 명령으로 볼 수 있다. 보통의 경우 비루트 사용자가 실행한 프로세스에는 아무런 능력도 배정되지 않는다. $ snchoi@snchoi:~$ ps PID TTY TIME CMD 1905 pts/0 00:00:00 bash 3577 pts/0 00:00:00 ps $ snchoi@snchoi:~$ getpcaps 1905 1905: = 최소 권한 원칙에 따라, 프로세스나 파일에 능력을 부여할 때는 작업에 꼭 필요한 능력들만 부여하는 것이 바람직하다. 컨테이너 실행 시 컨테이너에 부여할 능력들을 설정할 수 있다.
[Linux] 리눅스 setuid, setgid
보통의 경우 사용자가 파일을 실행하면 해당 프로세스는 그 사용자의 ID로 실행된다. 그러나 파일에 setuid 비트를 설정해 두면 프로세스는 파일 소유자의 ID로 실행된다. $ snchoi@snchoi:~$ ls -l `which sleep` -rwxr-xr-x 1 root root 26984 Feb 7 2022 /usr/bin/sleep $ snchoi@snchoi:~$ cp /usr/bin/sleep ./mysleep $ snchoi@snchoi:~$ ls -l ./mysleep -rwxr-xr-x 1 snchoi snchoi 26984 Jul 4 02:11 ./mysleep 출력에서 보듯이 복사본 mysleep의 소유자는 snchoi 라는 사용자이다. # 복사본을 루트계정으로 실행 $ snchoi@..

리눅스의 컨테이너 격리 (cgroups, namespace)
컨테이너는 VM과 달리 Host의 OS를 공유한다.VM은 커널을 포함해 운영체제 전체의 복사본을 실행하는 반면, 컨테이너는 호스트 컴퓨터의 커널을 공유한다.격리 측면에서 VM이 컨테이너보다 유리하지만 많은 사람들이 컨테이너를 사용하는 이유는 아래와 같은 점들 때문이다.VM은 시동하는 데 컨테이너보다 시간이 훨씬 많이 걸린다. 컨테이너를 실행하는 것은 그냥 새 리눅스 프로세스를 띄우는 것일 뿐이지만, VM을 실행하려면 모든 부팅 및 초기화 과정을 거쳐야 한다.각 VM은 커널 전체를 실행해야 하므로 추가 부담이 존재한다. 반면 컨테이너들은 하나의 커널을 공유하기 때문에 자원 면에서나 성능 면에서 대단히 효율적이다.1. Cgroups(control groups) 격리cpu, memory, network 등 프..
[python] 프로그래머스 > JadenCase 문자열 만들기
https://school.programmers.co.kr/learn/courses/30/lessons/12951 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 나의 풀이 - 실패 def solution(s): answer = '' for i in s.split(): if i[0].isalpha(): answer += i[0].upper()+i[1:].lower() else: answer += i.lower() answer += ' ' return answer[:-1] 다른사람풀이 참조 def solution(s): s = s.split(" ") for ..
[python] 프로그래머스 > 최댓값과 최솟값
https://school.programmers.co.kr/learn/courses/30/lessons/12939 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr def solution(s): temp = [int(i) for i in s.split()] return '{minv} {maxv}'.format(minv=min(temp),maxv=max(temp)) python에서 포맷팅 하는 방법을 리마인드 하였다.
[python] 프로그래머스 > k진수에서 소수 개수 구하기
https://school.programmers.co.kr/learn/courses/30/lessons/92335 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 나의 풀이 - 시간초과 def is_prime_number(x): # 2부터 (x - 1)까지의 모든 수를 확인하며 if x < 2: return False for i in range(2, x): # x가 해당 수로 나누어떨어진다면 if x % i == 0: return False # 소수가 아님 return True # 소수임 def solution(n, k): answer = 0 decimal..

[python] 프로그래머스 > 두 큐 합 같게 만들기
https://school.programmers.co.kr/learn/courses/30/lessons/118667 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 나의 풀이 - 실패(60점) from collections import deque def solution(queue1, queue2): answer = 0 dq1 = deque(queue1) dq2 = deque(queue2) targetValue = (sum(dq1)+sum(dq2))//2 for i in range(len(dq1)+len(dq2)): if sum(dq1) < targetVal..

[python] 프로그래머스 > 귤고르기
https://school.programmers.co.kr/learn/courses/30/lessons/138476 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 나의 풀이 - 시간초과 def solution(k, tangerine): answer = 0 clSum = 0 cntList = [] for st in list(set(tangerine)): cntList.append(tangerine.count(st)) cntList.sort(reverse=True) for cl in cntList: clSum += cl answer += 1 if k