Posts

Showing posts with the label Linux

[Linux/리눅스] setuid, setgid

Image
위에 있는 이미지를 보면 /etc/shadow 는 비밀번호가 저장되어 있는 파일입니다. 권한을 보면 일반 사용자는 아무런 권한이 없는 걸 확인할 수 있습니다. 그렇지만 passwd 명령어를 사용하면 비밀번호를 변경할 수가 있습니다. 비밀번호를 변경했다는 건 shadow 파일을 수정했다는 말인데, 권한도 없는데 어떻게 할 수 있었던 걸까요? 바로 그 이유는 setuid 덕분에 가능합니다. 1. setuid setuid는 파일을 실행했을 때, 일시적으로 파일 소유자의 권한을 사용할 수 있는 것 을 말합니다. 작업이 끝나면 권한은 원래대로 돌아옵니다. 위에 있는 이미지는 파일 소유자와 파일 소유 그룹을 root라고 가정하고, A라는 사용자가 파일을 실행했을 경우라고 생각해 보겠습니다. A라는 사용자는 Other에 해당하니까 other의 권한을 가지고 파일을 실행합니다. 그래서 Other 권한으로 작업을 수행하고 있다가 'setuid'를 만나면 User 권한으로 바뀌면서 User 권한으로 작업을 계속 수행합니다. 그러다가 작업을 다 마치면 원래대로 Other 권한으로 돌아오고 실행이 종료됩니다. 2. setgid 파일을 실행했을 때, 일시적으로 파일 소유 그룹의 권한을 사용할 수 있는 것 을 말합니다. 작업이 끝나면 권한은 원래대로 돌아옵니다. 3. setuid, setgid 설정 방법 파일 허가권은 3자리를 사용합니다. 여기서 제일 앞에 setuid를 설정하고 싶으면 4를 넣고, setgid를 설정하고 싶으면 2를 넣고, 둘 다 설정하고 싶으면 6를 넣으면 됩니다. 실행 권한이 없으면 대문자 S, 실행 권한이 있으면 소문자 s로 표시 됩니다. 예) chmod 4 000 ./aaa (aaa 파일에 setuid 설정 , 권한은 아무것도 없음 .) 예) chmod 6 444 ./bbb (bbb 파일에 setuid, setgid 설정 , 권한은 모두 읽기 .) 예) chmod 2 111 ./ccc (cc...

[Linux/리눅스] 파일 허가권, 파일 소유권

Image
1. 파일 허가권 파일 허가권은 9개의 문자가 있는데 3개씩 끊어서 User(파일 소유자), Group(파일 소유 그룹), Other(소유자도 아니고, 그룹에도 속하지 않는 나머지 사람들) 로 나눕니다. User, Group, Other에서 권한 순서는 'rwx'입니다. ' r '(read)은 읽기 권한 , ' w '(write)는 쓰기와 수정 권한 , ' x '(execute)는 실행, 폴더 진입 권한 , ' - '는 권한 없음 을 의미합니다. 또한 'rwx'를 설정할 때는 숫자로 입력을 합니다. ' r '은 4 , ' w '은 2 , ' x '는 1 , ' - '는 0 으로 표기를 합니다. 위의 이미지를 보도록 할게요. User 부분를 보면 'rw-'라고 적혀 있죠? User에게는 읽기와 쓰기 권한을 주겠다는 의미입니다. -는 x의 권한이 있는 부분인데, -는 권한 없음이라고 했죠. 그러니까 x 권한은 안 주겠다는 걸 의미합니다. 이제 이걸 숫자로 표기해서 다 더하면 됩니다. r은 4, w는 2, -는 0이니까 4+2+0= 6 다음으로 Group 부분을 보면 'r--'라고 적혀 있네요. Group에게는 읽기 권한만 주고, 쓰기와 실행 권한은 안 주겠다는 의미입니다. 이걸 숫자로 표현하면 r은 4, -는 0, -는 0이니까 4+0+0 = 4 마지막으로 Other 부분을 보면 'r--'라고 적혀 있네요. Other에게는 읽기 권한만 주고, 쓰기와 실행 권한은 주겠다는 의미죠. 이걸 숫자로 표현하면 r은 4, -는 0, -는 0이니까 4+0+0 = 4 예시를 하나 더 들자면 'rwxrw---x' 이건 권한이 어떻게 될까요? 일단 3개씩 끊어서 User,Group,Other로 나눕니다. 하나씩 보도록 하죠. User 부분을 ...

[Linux/리눅스] 사용자·그룹 계정 생성, 수정, 삭제, 비밀번호 설정

Image
1. 사용자 계정 생성하기 useradd [option] [인자값] ... [계정명] adduser [option] [인자값] ... [계정명] ※마지막으로 사용한 id 숫자의 다음 숫자로 생성된다. 마지막으로 생성한 게 699번이었으면 700번으로 자동으로 생성된다는 의미이다. 예) useradd kim 예) useradd -u 701 -g student min (uid 701, 그룹명이 student인 min이라는 계정 생성한다.) 2. 사용자 계정 수정하기 usermod [option] [인자값] ... [계정명] 예) usermod -u 1005 -g teacher jo 예) usermod -l lee jo (usermod -l 바꿀이름 원래이름) 3. 사용자 계정 삭제하기 userdel [option] [계정] ※메일 박스는 /var/mail/ 또는 /var/spool/mail/ 에 있다. 예) userdel lee (/etc/passwd, /etc/shadow, /etc/group 파일만 변경됨. 메일 박스와 홈 디렉터리는 남아 있다.) 예) userdel -rf kim (전부 다 완전히 삭제한다.) 4. 비밀번호 설정하기 passwd [option] [계정명] 계정을 생성한 후 비밀번호를 설정하지 않으면 로그인을 할 수 없다. 예) passwd (현재 로그인한 계정의 비밀번호 변경한다.) 예) passwd abc (abc 계정의 비밀번호 설정 또는 변경한다.) 5. 그룹 생성하기 groupadd [option] [그룹명] 예) groupadd -g 1000 student (그룹 ID가 1000인 student라는 이름의 그룹을 생성한다.) 6. 그룹 수정하기 groupmod [option] [그룹명] 예) groupmod -n teacher student (student 그룹 이름을 teacher로 변경한다.) 7. 그룹 삭제하기 ...

[Linux/리눅스] /etc/passwd, shadow 로그인 과정

Image
1. /etc/passwd 1) 로그인을 하는 과정 사용자가 로그인 버튼을 눌리면 사용자 계정명은 중복이 불가능(명령어를 사용할 때)하므로, 위에서부터 차례대로 읽어서 입력된 사용자 계정명을 찾는다. (계정명은 하나라고 인식하고 있다.) x를 보면 사용자 계정명을 가지고 /etc/shadow 파일로 넘어간다. 위에서부터 해당 계정명을 찾고 암호화된 비밀번호와 입력된 비밀번호가 맞는지 대조함. 그래서 맞으면 다시 /etc/passwd 파일로 넘어가고 그렇지 않으면 로그인 실패 창이 뜨게 된다. 그 다음 Uid, Gid, 홈 디렉터리(로그인했을 때 있는 장소)를 세팅하고, 마지막 부분은 Uid를 가지고 실행하려고 함. 즉, Uid를 가지고 /bin/bash를 실행하므로 여기서 최고 관리자와 일반 사용자로 결정돼서 로그인이 된다. 2) x가 없다면? x는 /etc/shadow 파일을 참조하라는 의미를 가진다. 그래서 만약 x가 없다면 참조를 안 하므로 비밀번호를 안 물어본다. 단, 리눅스에 직접 접속했을 때만 가능하다. 원격이면 무조건 비밀번호를 물어본다. 예) abc : : 9005:9005:/home/abc:/bin/bash 이 경우라면 비밀번호를 물어보지 않는다는 의미이다. 3) vi 편집기를 사용해서 passwd 파일을 직접 수정한다면? 명령어로는 동일한 계정명, Uid를 가질 수가 없는데, 파일을 직접 수정하면 가능하다. 아무 계정에다가 Uid를 0으로 바꾸면 최고 관리자가 될 수 있다. 0은 최고 관리자, 나머지는 일반 사용자다. 4) /bin/bash 를 지워버리면? -sh-4.1# 으로 실행이 되는데 -sh는 리눅스의 기본 기능이다. shell 자리에 아무것도 없으면 기본 기능으로 shell을 수행한다. -4.1은 버전이다. abc : x : 0 : 0 : : /root : ^c 제일 마지막 shell의 자리는 무조건 실행한다. ^c을 계속 실행하려고 하니 로그인은 불가능하다. 마지막 자리는 shell의 경로가 ...

[Linux/리눅스] 사용자 계정 생성, pw 설정, passwd, shadow, group 파일

Image
1. 사용자 계정 생성 useradd [option] [인자값] ... [계정명] adduser [option] [인자값] ... [계정명] -u : 사용자 uid 변경 -g : 사용자의 기본 그룹 지정 -d : 사용자의 기본 홈 디렉터리 변경 ※마지막으로 사용한 id 숫자의 다음 숫자로 생성된다. 마지막으로 생성한 게 699번이었으면 700번으로 자동으로 생성된다는 의미이다. 예) useradd kim 예) useradd -u 701 -g student min (uid 701, 그룹명이 student인 min이라는 계정 생성) 2. 사용자 계정 수정 usermod [option] [인자값] ... [계정명] -u : 사용자의 uid 변경 -g : 사용자의 기본 그룹 변경 -d : 사용자의 기본 홈 디렉터리 변경 -l : 계정명 변경 예) usermod -u 1005 -g teacher jo 예) usermod -l lee jo (usermod -l 바꿀이름 원래이름) 3. 사용자 계정 삭제 userdel [option] [계정] -f : 강제 삭제 -r : 계정을 생성하면 모든 정보를 삭제 -h : 도움말 ※메일 박스는 /var/mail/ 또는 /var/spool/mail/ 에 있다. 예) userdel lee (/etc/passwd, /etc/shadow, /etc/group 파일만 변경됨. 메일 박스와 홈 디렉터리는 남아 있다.) 예) userdel -rf kim (전부 다 완전 삭제) 4. 비밀번호 설정 passwd [option] [계정명] 계정을 생성한 후 비밀번호를 설정하지 않으면 로그인을 할 수 없다. -d : 비밀번호 null 지정(암호 삭제) -S : 비밀번호 상태 출력 -l : 비밀번호 잠금 -u : 비밀번호 잠금 해제 예) passwd (현재 로그인한 계정의 비밀번호 변경) 예) passwd abc (abc 계정의 비밀번호 설정 ...

[Linux/리눅스] 간단한 개요

1. Linux란? windows, android와 같은 운영체제를 말한다. 워크스테이션으로 개발자 환경, 서버용으로 웹, 메일, DB, FTP 서버로 사용하기도 하며. 임베디드로서 TV, PDA, 핸드폰, 클러스트링으로 사용한다. Linux의 배포판 종류로는 SlackWare, Redhat, Suse, Centos, Fedora 등이 있다. 공개 버전인 무료 버전이 있고, 상용 버전인 유료 버전이 있다. 2. Linux의 탄생 배경은? Unix가 무료 버전에서 유료 버전으로 바뀌면서 리눅스 토바즈 라는 사람이 커널을 개발했다. 그리고 리차드 스톨만이 창립한 FSF의 GNU 프로젝트와 발전으로 무료로 배포하면서 지금까지 발전하게 되었다. GNU = Gnu is Not Unix GPL = General Public License 라이선스 → 소스 공개 및 수정 재배포가 가능하다. 3. OS(운영체제)란? OS(운영체제)는 컴퓨터 사용자와 컴퓨터 하드웨어 사이에 중재자 역할을 하는 시스템 소프트웨어다. OS는 Kernel Mode와 User Mode로 나뉘는데 User Mode는 컴퓨터 사용자가 사용하는 컴퓨터 화면으로부터 어플리케이션을 사용하는 부분을 말한다. Kernel Mode는 User Mode에서 요구받은 명령을 컴퓨터 하드웨어(CPU, RAM 등)에 전달하고, 그 결과를 User Mode에게 돌려주는 중간자 역할을 한다고 볼 수 있다. 4. 커널소스 숫자 linux-x.y.z.tar.gz x : 주 버전 y : 홀수(베타), 짝수(안정) z : 버그 수정 횟수 숫자가 높을수록 장치지원이 높다. 5. 커널과 모듈 자주 사용하는 요소 : 커널에 포함한다. 가끔 사용하는 요소 : 모듈(독립적)으로 작성하여 필요할 때마다 호출한다. 6. Linux는 다중 사용자, 다중 작업 시스템이 가능 /var/log/ log는 누가 시스템에 접근하고 제어한 기록을 남기는데 프로그램, 서비스의 발생 시 오류를...

[Linux/리눅스] 파이프, 필터, 순차 실행, 사용자 환경설정 파일(bash-4.0# 원상복구)

Image
1. pipe ( | ) 프로그램과 프로그램을 연결시켜 줍니다. 앞 프로그램의 결과를 뒤 프로그램에 입력 값으로 전달하는 역할을 합니다. (동시 실행) 예) ls -al /etc/ | more 예) ls -l /etc/ | wc (wc는 줄, 단어 수, 총 문자 수를 출력한다. 개행, 띄어쓰기도 포함) 예) cat /etc/passwd | tail -n 3 2. filter pipe 기능을 사용할 때, 그 출력을 필터링할 때 사용합니다. 필요한 것만 걸러주는 명령어로 한 라인에 해당 문자가 들어가 있으면 출력해 줍니다. 예) ls -l | grep txt 예) cat /etc/passwd | grep root 3. 순차 실행 ( ; ) 명령어가 끝나고 나면 바로 다음 명령어를 실행합니다. 예) ls ; cd /var/ (ls 실행이 끝나고 나면 /var 디렉터리로 이동한다.) 예) rdate -s time.bora.net ; date (타임 서버 시간 시스템을 동기화 시킨 후에 시스템 시간을 조회) 4. 사용자별 환경설정 파일 .bash_logout .bash_profile .bashrc 위에 있는 파일들의 원본 파일은 /etc/skel/ 디렉터리에 있습니다. skel 디렉터리는 새로운 사용자가 추가될 때마다 skel 디렉터리 안에 있는 파일들을 각 사용자의 홈 디렉터리에 복사시켜 줍니다. 5. 모든 사용자 환경설정 파일 /etc/profile /etc/bashrc 6. 사용자별 환경설정 파일이 지워지면? -bash-4.0# 해결 방법(원래대로 되돌리는 방법) 로그아웃을 하고 로그인을 하니 위의 이미지와 똑같은 현상이 발생했다면 환경설정 파일이 지워졌거나 잘못 건들였다고 볼 수가 있습니다. 자신의 홈 디렉터리에 있는 .bashrc 파일을 잘못 건들이면 저렇게 되는데요. 이럴 때는 간단하게 원본 파일을 복사해서 붙여주면 됩니다. 사용자별 환경설정 파...

[Linux/리눅스] crontab, ip, gw, dns 설정하는 법

Image
1. crontab crontab [option] 일정한 주기로 지정된 시간에 특정 프로그램을 자동으로 실행시켜 줍니다. -e : 스케줄링 파일 수정 -l : 스케줄링 파일 확인 -r : 스케줄링 파일 초기화 [minute] [hour] [day] [month] [day of week] [username] [command] 분 : 0~59 까지의 값을 입력합니다. 시 : 0~23 까지의 값을 입력합니다. 일 : 1~31 까지의 값을 입력합니다. 달 : 1~12 까지의 값을 입력합니다. 요일 : 0~6 까지의 값을 입력합니다. (일요일은 0 또는 7) 사용자 : 실행할 파일의 소유자를 의미하며 생략 가능합니다. 실행 명령 : 실행할 명령어(절대경로)를 의미합니다. 45 * * * * 45분, 나머지 *은 전부를 의미합니다. 모든 시간, 모든 날, 모든 월, 모든 요일이 되는 거죠. 즉, 45분이 되면 명령어를 실행하겠다는 의미입니다. 한 시간 주기로 타임 서버 시간 시스템을 동기화 시키고, 현재 시스템 시간을 조회해서 time1에 저장합니다. 2. 시간 지정 연습 문제1 : 매주 금요일 오전 2시를 지정 → 0 2 * * 5 문제2 : 매년 10월 30일 오후 8시 15분을 지정 → 15 20 30 10 * 문제3 : 매주 월요일 오전 10시 51분을 지정 → 51 10 * * 1 문제4 : 매일 정시로 지정 → 0 * * * * 3. IP 설정 ifconfig [N/w interface] [IP] [Netmask] [up/down] IP 설정 : ifconfig eth0 192.168.0.200 netmask 255.255.255.0 up IP 해제 + gateway 해제 : ifconfig eth0 down 3-1. 자동으로 IP 설정 명령어 dhclient 예) dhclient 예) dhclient eth0 4. gateway 설정 route [add/del]...

[Linux/리눅스] 국가별로 시스템 시간 변경, history 삭제

Image
국가별로 시스템 시간 바꾸는 방법 /usr/share/zoneinfo/ 디렉터리로 이동해서 원하는 국가를 찾습니다. 여기서는 한국은 안 보이고 Asia는 보이네요. Asia 폴더로 이동합니다. 그래서 한국을 찾아보면 서울이 보입니다. 찾았으면 복사를 합니다. 리눅스 시스템 시간은 /etc/localtime 디렉터리에서 관리합니다. 그래서 이 디렉터리에 해당 수도를 복사해서 넣어주면 되는 거죠. 복사를 하면 덮어쓰겠냐고 묻는데 y 를 눌리고 엔터를 눌리면 끝납니다. date를 사용해서 시간을 확인해보면 한국 시간(KST)으로 바뀌어 있습니다. history 저장은 어떻게? history는 로그아웃을 할 때 지금까지 입력했었던 명령어를 사용자의 홈 디렉터리에 있는 .bash_history 파일에 저장을 합니다. 그리고 사용자가 로그인을 할 때 .bash_history 파일에 저장되어 있는 기록을 읽어서 history 명령어를 입력했을 때 출력합니다. history 기록 지우는 방법 ~/.bash_history 파일을 삭제합니다. history -c 명령어를 사용하여 내역을 지웁니다. 로그아웃합니다. history -c 명령어로 내역을 모두 삭제한 뒤, exit를 사용하여 로그아웃을 하면 exit 명령어가 history에 저장됩니다. history로 내역을 확인하면 당연히 history 명령어를 입력했으니 출력되겠죠. 그런데 매번 로그아웃할 때마다 지우려고 하니까 귀찮네요. 그러면 아예 안 남게 하는 방법은 없을까요? history가 로그아웃할 때 .bash_history에 저장된다고 했죠? 그러면 이게 파일이 아닌 디렉터리라면 저장이 될까요? 디렉터리에는 당연히 문자가 기록이 안 되니까 저장을 하려고 해도 실패하겠죠. history를 아예 안 남게 하는 방법 ~/.bash_history 파일을 삭제합니다. 사용자 홈 디렉터리에 .bash_history 라는 디렉터리를 만듭니다. 로그아웃합니다.

[Linux/리눅스] 기본 명령어

Image
* : 모두, 전부 ? : 한 글자를 대신함. ls (LiSt의 약자) ls [otpion] [directory / file] 해당 디렉터리(=폴더)의 목록을 보여준다. 하얀색 글자 : 파일 / 파랑색 글자 : 디렉터리 / 초록색 글자 : 실행 가능 파일 *을 사용할 때 숨김 파일까지 보려면 .*로 지정을 해야 한다. ls -al /tmp (tmp 디렉터리에 있는 모든 파일을 자세히 보여준다.) ls -a * (현재 디렉터리에 있는 파일들을 표시. *는 ./가 생략되어 있다.) ls -al ./.* (숨김 파일까지 다 표시) ls -al ./* (숨김 파일은 지정 안 되고 일반 파일만 표시) cd (Change Driectory의 약자) cd [인자값] 디렉터리를 이동한다. cd ~ (로그인 사용자의 홈 디렉터리로 이동.) cd /var/www (/var/www 디렉터리로 이동.) pwd (Print Working Directory의 약자) 현재 디렉터리의 전체 경로를 보여준다. 예) pwd cp (CoPy의 약자) cp [option] [source] [target] 파일이나 디렉터리를 복사한다. 새로 복사한 파일은 복사한 사용자의 소유가 되며, 명령어를 실행하는 사용자는 해당 파일의 읽기 권한이 필요하다. cp a.txt b.txt (현재 디렉터리에 a.txt를 b.txt라는 이름으로 바꿔서 복사.) cp -r /var/ ./ (var 폴더를 현재 디렉터리에 복사.) mv (MoVe의 약자) mv [option] [source] [target] 파일이나 디렉터리의 이름을 변경하거나 다른 디렉터리로 옮길 때 사용한다. mv a.txt ~/ (현재 디렉터리에 있는 a.txt를 사용자의 홈 디렉터리로 이동.) mv aa bb cc dd (현재 디렉터리에서 aa, bb, cc 폴더를 dd 폴더로 이동.) mv a.txt 1.txt (현재 디...