'Study'에 해당되는 글 93건
- 2015.03.28 [17] rpm(2), yum
- 2015.03.28 [16] rpm(1)
- 2015.03.28 [15] gzip, bzip2, tar, man
- 2015.03.28 [14] SETUID, SETGID, Stickybit, UMASK
- 2015.03.28 [13] 계정 복구, 계정 관련 Trouble Shooting, chown -R
- 2015.03.28 [12] 소유권, 허가권 실습, ftp 관련 권한
- 2015.03.28 [11] 허가권, 소유권, chmod, chown, chgrp
- 2015.03.27 [10] userdel, groupadd, groupdel, 계정 잠그기
- 2015.03.27 [09] useradd -D, usermod
- 2015.03.27 C언어 HW 06
- 2014.11.28
* cmd - ftp
ftp> ? : 도움말
ftp> prompt : 대화 끄기
ftp> mput : 여러개 동시에 올리기
1. rpm(2)
[실습]
mysql-connector-java-5.1.17-6.el6.noarch 설치 이어서 하기
(사실은 아키텍처가 noarch 이기 때문에 --nodeps 해서 설치해도 무관하지만 진행 해본다.)
*
geronimo-specs-compat 설치.
jaf => classpathx-jaf ... 로 대체
javamail => classpathx-mail ... 로 대체
*
java-gcj 의존성 문제
java-1.5.0-gcj, java_cup, sinjdoc 3개 다운받아 동시에 설치
[실습]
# rpm -qa | grep mysql
해서 나오는 모든 mysql 프로그램 삭제
php* 로 시작하는 모든 프로그램 설치
#rpm -qa | grep php
해서 나오는 모든 php 프로그램 삭제
2. YUM = Yellowdog Updater, Modified
본 실습용 os 에는 /etc/yum_samadal 로 명령어가 바뀌어있다.
(원본 위치는 /usr/bin/yum 이다)
-> # find / -name "yum*"
하지만 인터넷 되지 않는 곳에선 쓰지 못한다는 단점이 있다.
(특히 관공서는 인터넷 사용이 되지 않는다.)
1) Update
# yum (-y) update
2) Install
yum (-y) install name(*)
현재 위치에 있는 .rpm부터 설치한다.
3) Remove
yum (-y) remove name(*)
의존성 관련 pkg 삭제하는 도중 시스템이 마비될 수도 있다.
삭제는 yum으로 하는 것은 좋지 않다.
* Tip
우분투, 데비안 등에서의 yum 명령어
yum = apt-get
'Study > CentOS' 카테고리의 다른 글
[19] partition, mkfs, mount 실습 (0) | 2015.03.28 |
---|---|
[18] HDD & Partition, MBR, fdisk, mkfs, mount, umount (0) | 2015.03.28 |
[16] rpm(1) (0) | 2015.03.28 |
[15] gzip, bzip2, tar, man (0) | 2015.03.28 |
[14] SETUID, SETGID, Stickybit, UMASK (0) | 2015.03.28 |
- 2014.11.27
교재 p118 ~
1. rpm : Red Hat Package Manager
centos.org 접속
get centos 7 now -> dvd click
상위 메뉴 중 Mirror list - Asia, kaist 클릭 ....
(http://ftp.kaist.ac.kr/CentOS/6.6/os/i386/Packages/)
설치 가능한 rpm 의 목록들이다.
1) RPM 패키지 파일의 구성
① 패키지명
② 버전
major : 프로그램 자체가 완전 변경 - 그랜저 XG vs TG
minor : 치명적인 버그 수정
patch : 심각한 문제는 아니지만 불편한 것 수정
release : 패치된 것에서 조금의 수정
③ 아키텍쳐
[32bit]
i386 = 80386
- intel, cup 386, 486
i586 : P 1 ~ 3
i686 : P 4 ~ 7
[64bit]
x86_64 : AMD, intel
noarch : 플랫폼에 상관 없음
sparc : SunMicro System 의 스팍 계열 CPU
ppc : Power PC CPU - MAC용 CPU
2) RPM 옵션
-i rpm_file - install, 패키지 설치 되어 있으면 설치 안함
-U rpm_file - Upgrade, 업그레이드
-e rpm_file - 패키지 삭제
-v : verbose - 설치 내용 출력
-h : 설치 작업 상황 그래픽으로 보여줌
--nodeps : 패키지 의존성 검사 안함, 의존성 강제로 끊음
* 작업 전 확인할 것
# rpm -qa | grep 패키지명
(ls -l *ab* = ls -l | grep ab)
설치
# rpm -ivh 패키지명.rpm
삭제
# rpm -e 패키지명
[실습]
vi 설치되어있는지 확인
# vi
# rpm -qa | grep vim
vim-minimal-7.2.411-1.8.el6.i686
vim-enhanced-7.2.411-1.8.el6.i686
vim-common-7.2.411-1.8.el6.i686
* rpm 작업 공식(유의사항)
1. 모든 작업은 반드시 동일한 버전이어야 한다.
2. 의존성 오류(Failed dependencies)를 절대 무시하지 말자.
3. 의존성을 제기한 패키지를 먼저 작업한다.
4. 가급적 의존성 무시(--nodeps)를 사용하지 말자.
5. 'lib'으로 시작하고 중간에 'so'가 있는 경우는 무시해도 된다.
6. 디렉터리로 시작하는 거들(/usr/bin/)은 패키지가 아니므로 무시한다.
7. 대표 패키지부터 작업한다.
8. 나머지는 화면에 보이는 순서대로 작업한다.
vi 삭제
# rpm -e vim-minimal
오류: Failed dependencies:
vim-minimal is needed by (installed) cvs-1.11.23-16.el6.i686
vim-minimal is needed by (installed) sudo-1.8.6p3-15.el6.i686
=> 삭제 실패
의존성 오류 뜬 것을 차례대로 삭제하다보면 서로 의존된 것 삭제가 필요한 때가 온다.
그 때에는 2개를 동시에 삭제하면 된다.
# rpm -e redhat-lsb
오류: Failed dependencies:
redhat-lsb(x86-32) = 4.0-7.el6.centos is needed by (installed) redhat-l
# rpm -e redhat-lsb-compat
오류: Failed dependencies:
redhat-lsb-compat(x86-32) = 4.0-7.el6.centos is needed by (installed) r
# rpm -e redhat-lsb redhat-lsb-compat
이 뒤부터는 차례대로 위로 올라가며 삭제 진행하면 된다.
vim-minimal 삭제 전체 과정
# rpm -e redhat-lsb redhat-lsb-compat
# rpm -e redhat-lsb-printing
# rpm -e redhat-lsb-graphics
# rpm -e redhat-lsb-core
/var/tmp/rpm-tmp.dAbYuy: line 1: lsb_release: command not found
=> 무시해도 상관 없음
# rpm -e gettext
# rpm -e cvs
# rpm -e sudo
# rpm -e vim-minimal
vim 관련 나머지도 삭제
# rpm -e vim-enhanced
# rpm -e vim-common
# rpm -qa | grep vim
=> 검색 결과가 없다.
# vi
-ksh: vi: not found [그런 파일이나 디렉터리가 없습니다]
=> vi 가 삭제되어 실행되지 않는 것을 볼 수 있다.
[문제1]
http://ftp.kaist.ac.kr/CentOS/6.6/os/i386/Packages/
위의 사이트에서 vim* 으로 시작하는 package를 다운로드 및
linux로 업로드 하신 후 설치해보세요
필요 rpm 파일 다운로드 및 리눅스로의 업로드 후의 작업
# rpm -ivh ./vim-X11-7.2.411-1.8.el6.i686.rpm ./vim-common-7.2.411-1.8.el6.i686.rpm ./vim-enhanced-7.2.411-1.8.el6.i686.rpm ./vim-minimal-7.2.411-1.8.el6.i686.rpm
(혹은 # rpm -ivh ./vim*)
[문제2]
http://ftp.kaist.ac.kr/CentOS/6.6/os/i386/Packages/
위의 사이트에서 mysql* 으로 시작하는 package를 다운로드 및
linux로 업로드 하신 후 설치해보세요
*
perl(DBI) => perl-DBI-
(, ), :: => - (각각의 특수문자들은 - 로 봐도 무방하다.)
*
mysql-connector-java... 를 설치하다 보면 jta 설치하라고 하는데 못찾는다.
일단 해당 패키지는 넘어간다. => 내일 진행
*
lib으로 시작하며 중간에 so 가 들어가는 것을 모두 만족시키는 것만 설치하지 않아도 된다.
*
openssl 설치 도중 버전차이로 설치가 안되는 경우가 발생한다.
설치 되어있는 것을 삭제하려고 하면 너무 많은 것과 충돌하기 때문에
일단 --nodeps 옵션으로 강제 삭제 후 다시 설치한다.
'Study > CentOS' 카테고리의 다른 글
[18] HDD & Partition, MBR, fdisk, mkfs, mount, umount (0) | 2015.03.28 |
---|---|
[17] rpm(2), yum (0) | 2015.03.28 |
[15] gzip, bzip2, tar, man (0) | 2015.03.28 |
[14] SETUID, SETGID, Stickybit, UMASK (0) | 2015.03.28 |
[13] 계정 복구, 계정 관련 Trouble Shooting, chown -R (0) | 2015.03.28 |
- 2014.11.26
/backup/ 에 있는 grub.conf, inittab, login.defs 파일을 현재 위치로 복사한 뒤 실습을 시작한다.
1. gzip
gzip option source
: 압축
-d : 압축 해제
gzip 압축
# gzip ./grub.conf
# ll
합계 12
-rw------- 1 root root 476 2014-11-26 12:58 grub.conf.gz
-rw-r--r-- 1 root root 884 2014-11-26 12:58 inittab
-rw-r--r-- 1 root root 1816 2014-11-26 12:58 login.defs
=> 원본 파일이 없어진 것 확인 할 수 있다.
gzip 압축해제
# gzip -d ./grub.conf.gz
-- decompress
# ll
합계 12
-rw------- 1 root root 739 2014-11-26 12:58 grub.conf
-rw-r--r-- 1 root root 884 2014-11-26 12:58 inittab
-rw-r--r-- 1 root root 1816 2014-11-26 12:58 login.defs
=> 역시 원본 압축 파일 없어짐
여러 파일 압축
# gzip ./*
# ll
합계 12
-rw------- 1 root root 476 2014-11-26 12:58 grub.conf.gz
-rw-r--r-- 1 root root 884 2014-11-26 12:58 inittab.gz
-rw-r--r-- 1 root root 1816 2014-11-26 12:58 login.defs.gz
=> 동시에 묶이진 않고 각자 개별 파일로만 압축이 된다.
2. bzip2
# bzip2 option source
: 압축
-d : 압축 해제
bzip2 압축
# bzip2 ./grub.conf
# ll
합계 12
-rw------- 1 root root 542 2014-11-26 12:58 grub.conf.bz2
-rw-r--r-- 1 root root 884 2014-11-26 12:58 inittab
-rw-r--r-- 1 root root 1816 2014-11-26 12:58 login.defs
=> 원본 파일 없어짐
bzip2 압축 해제
# bzip2 -d ./grub.conf.bz2
# ll
합계 12
-rw------- 1 root root 739 2014-11-26 12:58 grub.conf
-rw-r--r-- 1 root root 884 2014-11-26 12:58 inittab
-rw-r--r-- 1 root root 1816 2014-11-26 12:58 login.defs
=> 원본 압축 파일 없어짐
* bzip2 역시 gzip과 마찬가지로 동시에 여러개 압축이 되지 않는다.
3. tar = tape Archive
tar option Archiving_file_name source
c - 보관하겠다.
x - 보관을 풀겠다.
v - verboss(보여주세요)
f - file
z - gzip 으로 압축 또는 해제
j - bzip2 으로 압축 또는 해제
-C path : path 에다 해당 작업 진행
cvf(생성), xvf(해제) 이 2가지 방식만 기억하면 된다
*Tip
tar 로 압축할 때엔 뒤에 .tar 를 붙여 tar 파일인 것을 남기는 습관이 좋다.
# tar cvf ./gc ./grub.conf
./grub.conf
# ll
합계 24
-rw-r--r-- 1 root root 10240 2014-11-26 13:33 gc
-rw------- 1 root root 739 2014-11-26 12:58 grub.conf
-rw-r--r-- 1 root root 884 2014-11-26 12:58 inittab
-rw-r--r-- 1 root root 1816 2014-11-26 12:58 login.defs
=> 이렇게 되면 gc라는 파일이 tar 파일인지 육안으로 확인하기 쉽지 않음
=> 카세트 테잎이나 CD처럼 안에 내용물이 얼마 들어가든 상관 없이 일정 공간이 생성된다.
# tar cvf ./gc.tar ./grub.conf
./grub.conf
# ll
합계 36
-rw-r--r-- 1 root root 10240 2014-11-26 13:33 gc
-rw-r--r-- 1 root root 10240 2014-11-26 13:34 gc.tar
-rw------- 1 root root 739 2014-11-26 12:58 grub.conf
-rw-r--r-- 1 root root 884 2014-11-26 12:58 inittab
-rw-r--r-- 1 root root 1816 2014-11-26 12:58 login.defs
=> tar 파일 확인 쉬움
[실습]
grub.conf 를 일단 지우고 tar 풀어보자
# rm ./grub.conf
# tar xvf ./gc.tar
./grub.conf
# ll
합계 36
-rw-r--r-- 1 root root 10240 2014-11-26 13:33 gc
-rw-r--r-- 1 root root 10240 2014-11-26 13:34 gc.tar
-rw------- 1 root root 739 2014-11-26 12:58 grub.conf
-rw-r--r-- 1 root root 884 2014-11-26 12:58 inittab
-rw-r--r-- 1 root root 1816 2014-11-26 12:58 login.defs
=> 압축 명령어들과 다르게 tar는 파일이 그대로 있는 것을 확인할 수 있다.
[문제]
현재 디렉터리에 있는 파일(grub.conf, inittab, login.defs)을 gil.tar 로 보관시켜보세요
# tar cvf gil.tar ./grub.conf ./inittab ./login.defs
tar 파일을 gzip 으로 압축
# gzip ./gil.tar
# ll
합계 4
-rw-r--r-- 1 root root 1953 2014-11-26 13:37 gil.tar.gz
이 압축된 파일을 /backup/ 에 압축 푸세요
# gzip -d ./gil.tar.gz
# tar xvf ./gil.tar
# mv ./grub.conf ./inittab ./login.defs /backup/
* Tip
tar 로 해제할 떄엔 현재 자신이 위치한 곳에 풀린다.
[실습 - 교재]
# tar cvf ./xinetd.tar /etc/xinetd.d/
tar: Removing leading `/' from member names
/etc/xinetd.d/
/etc/xinetd.d/rsync
# ll
합계 12
-rw-r--r-- 1 root root 10240 2014-11-26 13:53 xinetd.tar
# tar xvf ./xinetd.tar
etc/xinetd.d/
etc/xinetd.d/rsync
# ll
합계 16
drwxr-xr-x 3 root root 4096 2014-11-26 13:54 etc
-rw-r--r-- 1 root root 10240 2014-11-26 13:53 xinetd.tar
# ll ./etc/
합계 4
drwxr-xr-x 2 root root 4096 2014-10-30 01:57 xinetd.d
# ll ./etc/xinetd.d/
합계 4
-rw-r--r-- 1 root root 332 2014-03-28 19:54 rsync
=> tar는 내가 지정해준 디렉터리 까지, 경로 자체를 보관한다.
=> 또한 풀 때에는 내가 있는 경로 기준으로 풀린다.
[문제]
/bin 디렉터리의 모든 파일을 gzip 압축 및 tar 로 묶어서
/home 디렉터리 안에 binlist.tar.gz 라는 파일로 생성
# tar cvf /home/binlist.tar /bin/
tar: Removing leading `/' from member names
/bin
...
/bin/zcat
# ll
합계 8696
-rw-r--r-- 1 root root 8888320 2014-11-26 13:58 binlist.tar
drwxr-xr-x 3 root root 4096 2014-11-26 13:54 etc
-rw-r--r-- 1 root root 10240 2014-11-26 13:53 xinetd.tar
# gzip /home/binlist.tar
# ll /home
합계 4019
drwx------ 4 badnom badnom 1024 2014-11-25 15:01 badnom
-rw-r--r-- 1 root root 4100186 2014-11-26 13:58 binlist.tar.gz
drwx------. 2 root root 12288 2014-10-30 01:51 lost+found
* # gzip /bin/* 해서 /bin/ 것이 다 날라간 경우
백업 해놓은 gzip 명령 파일을 일반 계정으로 ftp 통해 업로드한다.
하지만 업로드 한 압축파일은 실행파일이 아니기 때문에 GUI 환경 통해 해당 파일을 실행파일로 속성 변경이 필요하다.
만약 GUI로 고칠 수 없는 상황이면 복구가 불가능하다. (가장 기초적인 명령어들이 bin 에 있기 때문)
# ./gzip -d /bin/*
=> /bin 에 .gz 로 개별적으로 묶여있던 파일들이 압축 해제된다. */
위의 문제를 bzip2 로 똑같이 진행
# tar cvf /home/binlist.tar /bin/
tar: Removing leading `/' from member names
/bin/
...
/bin/rnano
# bzip2 /home/binlist.tar
# ll /home/
합계 7611
drwx------ 4 badnom badnom 1024 2014-11-25 15:01 badnom
-rw-r--r-- 1 root root 3677201 2014-11-26 14:22 binlist.tar.bz2
-rw-r--r-- 1 root root 4100186 2014-11-26 13:58 binlist.tar.gz
drwx------. 2 root root 12288 2014-10-30 01:51 lost+found
[정리]
- gzip, bzip2 (압축)
1. 용량 작아짐
2. 원본 삭제
3. 단일 파일만 가능
4. 큰 파일의 압축 효율은 bzip2가 더 좋다.
- tar (보관)
1. 용량 커짐
2. 원본 유지
3. 다중파일 가능
4. tar + 압축
tar로 묶으면서 동시에 압축하기
# tar cvfz filename.tar.gz source
# tar cvfj filename.tar.bz2 source
압축 해제까지 한꺼번에 하기
# tar xvfz filename.tar.gz
# tar xvfj filename.tar.bz2
2가지 방법으로 /bin/ 디렉터리를 압축하세요
# tar cvfz ./binlist.tar.gz /bin/
# tar cvfj ./binlist.tar.bz2 /bin/
# ll
합계 7688
-rw-r--r-- 1 root root 3677201 2014-11-26 14:38 binlist.tar.bz2
-rw-r--r-- 1 root root 4103268 2014-11-26 14:37 binlist.tar.gz
drwxr-xr-x 3 root root 4096 2014-11-26 13:54 etc
-rwxr-xr-x 1 samadal samadal 67500 2014-11-26 14:11 gzip
-rw-r--r-- 1 root root 10240 2014-11-26 13:53 xinetd.tar
[문제]
현재 디렉터리에 있는 binlist.tar.xx 파일을 경로이동 하지 말고
/home/ 디렉터리에 풀어보세요
# tar xvfzC ./binlist.tar.gz /home/
# tar xvfj ./binlist.tar.bz2 -C /home/
아래 방식이 햇갈리지 않고 편리한 것 같다.
* 도움말 보기
# tar --help
# man tar
'Study > CentOS' 카테고리의 다른 글
[17] rpm(2), yum (0) | 2015.03.28 |
---|---|
[16] rpm(1) (0) | 2015.03.28 |
[14] SETUID, SETGID, Stickybit, UMASK (0) | 2015.03.28 |
[13] 계정 복구, 계정 관련 Trouble Shooting, chown -R (0) | 2015.03.28 |
[12] 소유권, 허가권 실습, ftp 관련 권한 (0) | 2015.03.28 |
- 2014.11.25
p74
원래 소유주에게 권한을 빌려와서 실행할 때만 소유권을 가짐
SETUID 4777 r w s r w x r w x
SETGID 2777 r w x r w s r w x
Sticky bit 1777 r w x r w x r w t
S,s / T,t : x 권한의 유무에 따라 없으면 S(대문자), 있으면 s(소문자) 이다.
1. Sticky bit
[실습]
# mkdir /sb/
# useradd badnom
samadal 계정으로 /sb/ 디렉터리에 testfile 생성 위해 757 권한 부여
# chmod 757 /sb/
[samadal@samadal ~]$ touch /sb/testfile
badnom 이 해당 파일 삭제
[badnom@samadal ~]$ rm /sb/testfile
rm: remove write-protected 일반 빈 파일 `/sb/testfile'? y
관리자가 해당 사태를 보고 Sticky bit 를 진행.
# chmod 1777 /sb/
# ll -d /sb/
drwxrwxrwt 2 root root 4096 2014-11-25 13:06 /sb/
samadal 이 한번 더 올린다.
[samadal@samadal ~]$ touch /sb/testfile
badnom 이 한번 더 삭제를 시도하지만 실패
[badnom@samadal ~]$ rm /sb/testfile
rm: remove write-protected 일반 빈 파일 `/sb/testfile'? y
rm: cannot remove `/sb/testfile': 명령을 허용하지 않음
즉, Sticky bit 는 소유자만 삭제하게 할 수 있다. 공유폴더에 많이 쓰는 권한.
samadal로는 지워진다.
[samadal@samadal ~]$ rm /sb/testfile
[samadal@samadal ~]$ ll /sb/
합계 0
* /tmp/ 디렉터리가 대표적인 Sticky bit 를 사용하는 예
2. SetUID
[실습]
find 명령어 활용하여 오늘 쓴 명령어 중 SetUID 적용된 명령어 찾기
ex)
# find / -name chmod
passwd에 SetUID가 설정된 것을 확인
# find / -name passwd -exec ls -l {} \;
-rwsr-xr-x. 1 root root 25980 2012-02-22 20:44 /usr/bin/passwd
-rw-r--r--. 1 root root 1666 2014-11-25 12:57 /etc/passwd
-rw-r--r--. 1 root root 146 2012-02-22 20:44 /etc/pam.d/passwd
이 passwd 명령어에 SetUID 빼고 samadal로 passwd 변경을 다시 시도 해보자.
/usr/bin/passwd 명령어실행 p/w변경
4755
rwsr-xr-x O O
755
rwxr-xr-x O X
4750
rwsr-x--- X X
*
other의 실행 권한이 0이면 실행 자체도 안된다. 일반적으로 서버에서는 보안상 4750 권한을 준다.
*
/usr/bin/passwd 명령어 소스파일 자체 안에 root만 변경 가능하도록 되어있다.
(x 권한은 컴파일, 링커를 거쳐야지만 생성됨. 즉 일반 파일의 Max 권한은 666이라 할 수 있다.)
3. SetGID
[실습]
# cd ~samadal
# mkdir ./testdir/
# touch ./testdir/test
# chown .samadal ./testdir/
# ll
합계 4
-rwsr--r-- 1 root root 0 2014-11-25 12:53 test
drwxr-xr-x 2 root samadal 4096 2014-11-25 13:59 testdir
그룹 소유권이 samadal인 디렉터리에 test2 생성
# touch ./testdir/test1
# ll ./testdir
합계 0
-rw-r--r-- 1 root root 0 2014-11-25 13:59 test
-rw-r--r-- 1 root root 0 2014-11-25 13:59 test1
=> dir의 GID가 samadal이라 해도 파일을 생성하면 소유권은 root:root 이다.
SetGID 설정
# chmod 2755 ./testdir/
# ll
합계 4
-rwsr--r-- 1 root root 0 2014-11-25 12:53 test
drwxr-sr-x 2 root samadal 4096 2014-11-25 13:59 testdir
SetGID 설정 된 디렉터리에 test2 생성
# touch ./testdir/test2
# ll ./testdir/
합계 0
-rw-r--r-- 1 root root 0 2014-11-25 13:59 test
-rw-r--r-- 1 root root 0 2014-11-25 13:59 test1
-rw-r--r-- 1 root samadal 0 2014-11-25 14:00 test2
=> test2 그룹 소유자가 SetGID 디렉터리의 소유주를 따라감
SetGID : 해당 권한이 있는 디렉터리 안에 파일이나 디렉터리 생성되면 해당 소유주를 따라 소유주가 자동 변경.
[실습]
./testdir/ 을 4755 로 권한 변경
# chmod 4755 ./testdir/
# ll
합계 4
-rwsr--r-- 1 root root 0 2014-11-25 12:53 test
drwsr-sr-x 2 root samadal 4096 2014-11-25 14:00 testdir
=> GID의 s가 chmod 4755 명령어로는 바뀌지 않는다.
# chmod g-s ./testdir/
# ll
합계 4
-rwsr--r-- 1 root root 0 2014-11-25 12:53 test
drwsr-xr-x 2 root root 4096 2014-11-25 14:00 testdir
=> 변경 완료
[문제]
옵션을 찾아서 아래의 설명에 필요한 대로 각 한번의 명령어로 디렉터리를 생성한다.
1) /tmp/test/test1/test2/ 디렉터리 생성
2) /tmp/test 디렉터리는 Sticky bit, 모든 사용자가 모든 권한 가짐
3) /tmp/test/test1 디렉터리 소유자는 모든 권한을, 그룹은 읽기 및 실행권한, 다른 유저는 실행권한을 가진다.
4) /tmp/test/test1/test2/ 디렉터리는 소유자는 모든 권한을, 그룹은 읽기 권한을, 다른 유저는 아무런 권한 없음
# mkdir -p /tmp/test/test1/test2/
# chmod 1777 /tmp/test/
# chmod 751 /tmp/test/test1/
# chmod g-x,o-rx /tmp/test/test1/test2/
* SetUID 위험성
특정 소스파일을 실행 시 자동으로 root 권한 획득하는 프로그램 심어두고 해킹에 악용될 수 있다.
그렇기 때문에 서버관리자는 SetUID 적용된 리스트를 잘 관리해야 한다.
SetUID 적용된 파일 오류 제외하고 출력하라는 명령어
# find / -user root -perm +4000 2> /dev/null
4. UMASK
파일 및 디렉터리가 만들어질 때 기본적으로 설정될 사용권한을 결정
UMASK
Directory 관리자 d1 755 777 - 755 = 022
Max : 777 사용자 d2 775 777 - 775 = 002
File 관리자 f1 644 666 - 644 = 022
Max : 666 사용자 f2 664 666 - 664 = 002
1) UMASK 사용 예
# vi /etc/login.defs
57 # the permission mask will be initialized to 022.
58 UMASK 077
59
2) umask 확인
# umask
0022
[samadal@samadal ~]$ umask
0002
[umask 실습]
# umask 000
# umask
0000
# mkdir ./t1/
# touch ./t2
# ll
합계 7
drwxrwxrwx 2 root root 4096 2014-11-25 14:45 t1
-rw-rw-rw- 1 root root 0 2014-11-25 14:45 t2
=> t1과 t2의 권한이 최대로 되어있다.
# umask 123
# mkdir ./t3/
# ll
합계 11
drwxrwxrwx 2 root root 4096 2014-11-25 14:45 t1
-rw-rw-rw- 1 root root 0 2014-11-25 14:45 t2
drw-r-xr-- 2 root root 4096 2014-11-25 14:46 t3
=> 하지만 이렇게 변경된 umask 는 현재 열려있는 터미널에서만 먹힌다.(1회성)
이곳의 설정 값을 바꾸면 영구적인 변경이 가능하다.
# vi /etc/profile
58 # By default, we want umask to get set. This sets it for login shell
59 # Current threshold for system reserved uid/gids is 200
60 # You could check uidgid reservation validity in
61 # /usr/share/doc/setup-*/uidgid file
62 if [ $UID -gt 199 ] && [ "`id -gn`" = "`id -un`" ]; then
63 umask 002
64 else
65 umask 022
[문제]
473 이라는 허가권을 갖는 d3와 f3를 만들기 위한 umask 값은?
=> 304
256 이라는 허가권을 갖는 d4와 f4를 만들기 위한 umask 값은?
=> 521
'Study > CentOS' 카테고리의 다른 글
[16] rpm(1) (0) | 2015.03.28 |
---|---|
[15] gzip, bzip2, tar, man (0) | 2015.03.28 |
[13] 계정 복구, 계정 관련 Trouble Shooting, chown -R (0) | 2015.03.28 |
[12] 소유권, 허가권 실습, ftp 관련 권한 (0) | 2015.03.28 |
[11] 허가권, 소유권, chmod, chown, chgrp (0) | 2015.03.28 |
- 2014.11.24
[문제]
사마달 계정 삭제 뒤 /samadal/ 을 만들고 이 디렉터리를 /export/home/samadal 로 이동하여
이동한 위치를 홈 디렉터리로 하는 samadal 계정을 다시 만드세요.
# userdel -r samadal
# mkdir /samadal/
# mkdir -p /export/home/
# mv /samadal/ /export/home/
# useradd -d /export/home/samadal samadal
useradd: 경고: 홈디렉터리가 이미 있습니다.
skel 디렉터리에서 파일을 복사하지 않습니다.
# cp /etc/skel/.* /export/home/samadal/
cp: omitting directory `/etc/skel/.'
cp: omitting directory `/etc/skel/..'
cp: omitting directory `/etc/skel/.gnome2'
cp: omitting directory `/etc/skel/.mozilla'
# cp -r /etc/skel/.gnome2 /etc/skel/.mozilla /export/home/samadal/
# chmod 700 /export/home/samadal/
# chown -R samadal. /export/home/samadal/
[Trouble Shooting 예제]
# rm -rf ./samadal/
samadal 계정 원상복귀 시키기
# mkdir ./samadal/
# cp /etc/skel/.* /export/home/samadal/
cp: omitting directory `/etc/skel/.'
cp: omitting directory `/etc/skel/..'
cp: omitting directory `/etc/skel/.gnome2'
cp: omitting directory `/etc/skel/.mozilla'
# cd /export/home/
# cp -r /etc/skel/.gnome2 /etc/skel/.mozilla ./samadal
# chmod 700 ./samadal
# chown -R samadal. ./samadal/
*
로그인 안되면 /etc/passwd 와 홈 디렉터리 존재 유무 확인
ftp 업로드 안되면 w 권한 있는지 확인
'Study > CentOS' 카테고리의 다른 글
[15] gzip, bzip2, tar, man (0) | 2015.03.28 |
---|---|
[14] SETUID, SETGID, Stickybit, UMASK (0) | 2015.03.28 |
[12] 소유권, 허가권 실습, ftp 관련 권한 (0) | 2015.03.28 |
[11] 허가권, 소유권, chmod, chown, chgrp (0) | 2015.03.28 |
[10] userdel, groupadd, groupdel, 계정 잠그기 (0) | 2015.03.27 |
- 2014.11.21
1. 소유권 허가권 규칙 실습
1) 권한 부여의 우선순위 : user > group > other
2) 허가권 570 : user는 w권한 없지만 group은 w권한이 있다.
3) samadal:root = samadal:samadal 일 수밖에 없다.
*
허가권 other에 권한이 있다면 소유권이 root:root 로 되어있다 하더라도
samadal 계정으로 주어진 권한 행사가 가능하다.
(심지어 001, 005 처럼 user 및 group에 권한이 0이라 하더라도)
2. ftp 관련 권한
ftp를 이용하여 파일을 업로드 할 때에는 r 권한이 없이
w, x 권한만 있어도 해당 디렉터리에 접근 및 업로드가 가능하다.
'Study > CentOS' 카테고리의 다른 글
[14] SETUID, SETGID, Stickybit, UMASK (0) | 2015.03.28 |
---|---|
[13] 계정 복구, 계정 관련 Trouble Shooting, chown -R (0) | 2015.03.28 |
[11] 허가권, 소유권, chmod, chown, chgrp (0) | 2015.03.28 |
[10] userdel, groupadd, groupdel, 계정 잠그기 (0) | 2015.03.27 |
[09] useradd -D, usermod (0) | 2015.03.27 |
- 2014.11.20
1. 허가권
ls -l 로 봤을때 맨 앞에 있는 것 : 허가권
Owner Group Other
- r w x r w x r w x
파일 4 2 1 4 2 1 4 2 1 // 각각은 2진수로 2^2, 2^1, 2^0 을 뜻한다.
7 7 7 // 각 자리의 합을 모두 더해서 나온 숫자
x100 = 700 x10 = 70 x1 = 7
d
디렉터리
rEAD : 읽기
wRITE : 쓰기
ExECUTE : 실행, 접근
* 741 : Owner은 rwx, Group은 r, Other은 x 의 권한이 있다는 뜻.
1) x 의 의미
파일 : x가 없다 -> 문서파일, x가 있다 -> 실행파일
디렉터리 : 접근. -> 디렉터리의 경우 디렉터리에 접근(x)을 해야 읽거나(r) 쓸수(w)있다.
2) 파일에서의 권한
r : cat, more, vim, cp 등과 같은 파일의 내용을 읽어 들이는 것과 관련이 있다.
w : cat, echo, vim 등과 같은 파일의 내용을 수정, 변경하는 것과 관련이 있다.
vim 같은 경우는 :wq!로 저장이 가능하지만 소유주가 변한다.
x : 실행 여부와 관련이 있다.
3) 디렉터리에서의 권한
r : ls, dir 등과 같은 디렉터리 내부 내용을 읽어 들이는 것과 관련이 있다.
w : mkdir, touch, rm, mv 등과 같은 디렉터리 내부에 생성, 삭제와 관련이 있다.
x : 디렉터리의 접근과 관련이 있다. x가 없다는 것은 대부분의 명령어를 이용할 수 없게 된다.
4) 권한 부여
권한을 부여하는 방법은 크게 2가지가 있다.
- numeric method
ex)
# chmod 456 file_dir
- symbolic method
Owner : u / Group : g / Other : o
ex)
# chmod g+r file_dir
# chmod o-x file_dir
# chmod g+r_x,o+w file_dir
ex)
# touch ./test
# ll
합계 0
-rw-r--r-- 1 root root 0 2014-11-20 13:08 test
6 4 4 의 권한이 부여되어 있음.
예제를 위해 모든 권한 제거
# chmod 000 ./test
# ll
합계 0
---------- 1 root root 0 2014-11-20 13:08 test
그룹에 읽기, 실행 권한 주기
# chmod g+rx ./test
# ll
합계 0
----r-x--- 1 root root 0 2014-11-20 13:08 test
Other 에게 읽기, 쓰기, 실행 권한 주기
# chmod o+xrw ./test
# ll
합계 0
----r-xrwx 1 root root 0 2014-11-20 13:08 test
[문제1]
/backup/inittab 파일을 현재디렉토리(/export/home/samadal/)에 복사후 변경
numeric method 방법으로 변경 -> r w - - w - - w x
symbolic method 방법으로 변경 -> - w x r - x r w -
numberic method 방법으로 변경 -> r - x - w - r w -
# cp /backup/inittab ./
nemeric method
# chmod 623 ./inittab
# ll
합계 4
-rw--w--wx 1 root root 884 2014-11-20 13:14 inittab
----r-xrwx 1 root root 0 2014-11-20 13:08 test
symbolic method
# chmod u+x-r ./inittab
# chmod g+rx-w ./inittab
# chmod o+r-x ./inittab
(= chmod u+x-r,g+rx-w,o+r-x ./inittab // 콤마(,)에 띄어쓰기 금지)
numberic method
# chmod 526 ./inittab
# ll
합계 4
-r-x-w-rw- 1 root root 884 2014-11-20 13:14 inittab
----r-xrwx 1 root root 0 2014-11-20 13:08 test
[문제]
internet explorer 실행시킨 후 자신의 linux ip를 입력 후 화면 출력 -> 아파치가 깔려있는 경우 아파치 기본 화면 로딩
d드라이브에 있는 index.html을 linux로 업로드를 하세요. -> 기본 index 파일 생성 후 진행
업로드가 되면 putty로 가셔서 index.html 파일을 /var/www/html/ 디렉터리로 이동시킨 후
internet explorer 를 F5 눌러보세요.
윈도우 cmd, ftp 를 이용하여 업로드 후
# mv ./index.html /var/www/html/ 한 뒤 internet explorer 에서 F5 누르면 됨
[추가]
/val/www/html/ 디렉터리에 있는 index.html 의 권한을 변경하면서
변경시마다 internet explorer 에서 F5를 눌러서 변경사항이 있는지 확인
r w - r - - r - -
# chmod 644 /var/www/html/index.html
-> 보여짐
- w - r - - r - -
# chmod 244 /var/www/html/index.html
-> 보여짐
r - - r - - r - -
# chmod u+r-w /var/www/html/index.html
-> 보여짐
r w - - - - r - -
# chmod u+w,g-r /var/www/html/index.html
-> 보여짐
r w - r - - - - -
# chmod g+r,o-r /var/www/html/index.html
-> 안보여짐 (Forbidden error)
=> Other의 r 권한이 없기 때문에 index.html 파일을 열 수가 없다.
[문제]
/var/www/디렉터리에 있는 html/ 디렉터리의 권한을 변경하면서
변경시마다 internet explorer에서 F5를 눌러서 변경사항이 있는지 확인하세요
r w x r - x r - x
# chmod 755 /var/www/html/
-> 보여짐
- w x r - x r - x
# chmod 355 /var/www/html
-> 보여짐
r - x r - x r - x
# chmod 555 /var/www/html/
-> 보여짐
r w - r - x r - x
# chmod 655 /var/www/html/
-> 보여짐
r w x - - x r - x
# chmod u+x,g-r /var/www/html/
-> 보여짐
r w x r - - r - x
# chmod g+r-x /var/www/html/
-> 보여짐
r w x r - x - - x
# chmod g+x,o-r /var/www/html/
-> 보여짐, 단 Other 권한으로 html 디렉터리 안을 볼 수 없음
r w x r - x r - -
# chmod o+r-x /var/www/html/
-> 아파치 기본 화면 보여짐
=> html 디렉터리의 경우 x 권한이 없는 경우 index.html 파일을 불러올 수 없음.
[문제]
※ user 홈 디렉터리는 700 권한이다.
홈디렉터리에 000 ~ 700 권한 변경 하면서 ftp 접속은 되는지, 파일 업로드는 되는지 해보세요
000 : FTP 로그인 실패
100 : FTP 로그인 성공, 업로드 실패, 목록 보기 실패
200 : FTP 로그인 실패
300 : FTP 로그인 성공, 업로드 성공, 목록 보기 실패
400 : FTP 로그인 실패
500 : FTP 로그인 성공, 업로드 실패, 목록 보기 성공
600 : FTP 로그인 실패
700 : FTP 로그인 성공, 업로드 성공, 목록 보기 성공
[결론]
x 권한이 있어야지만 FTP 접속 성공 (100, 300, 500, 700)
x,w 권한이 있어야 FTP 접속 후 업로드 가능 (300, 700)
300 vs 700 : 목록 보기 가/불가 여부
2. 소유권
소유권 변경 : chown
현재 HOME 디렉터리에 있는 파일 모두 삭제 후 /backup/ 의 3개 파일 모두 복사해온다.
# rm ./*
# cp /backup/* ./
# ll
합계 12
-rw------- 1 root root 739 2014-11-20 14:54 grub.conf
-rw-r--r-- 1 root root 884 2014-11-20 14:54 inittab
-rw-r--r-- 1 root root 1816 2014-11-20 14:54 login.defs
1) 소유자 변경
grup.conf 의 소유자를 samadal로 변경
# chown samadal ./grub.conf
# ll
합계 12
-rw------- 1 samadal root 739 2014-11-20 14:54 grub.conf
-rw-r--r-- 1 root root 884 2014-11-20 14:54 inittab
-rw-r--r-- 1 root root 1816 2014-11-20 14:54 login.defs
2) 소유자 + 그릅소유권한 변경
inittab 파일의 소유자와 그룹소유권한을 samadal로 변경
# chown samadal:samadal ./inittab
# ll
합계 12
-rw------- 1 samadal root 739 2014-11-20 14:54 grub.conf
-rw-r--r-- 1 samadal samadal 884 2014-11-20 14:54 inittab
-rw-r--r-- 1 root root 1816 2014-11-20 14:54 login.defs
login.defs 파일의 소유자는 samadal로, 그룹소유권한은 user1로 변경
# chown samadal:user1 ./login.defs
# ll
합계 12
-rw------- 1 samadal root 739 2014-11-20 14:54 grub.conf
-rw-r--r-- 1 samadal samadal 884 2014-11-20 14:54 inittab
-rw-r--r-- 1 samadal user1 1816 2014-11-20 14:54 login.defs
*
chown 을 통해 소유권 변경 시 UID 및 GID는 각각 /etc/passwd, /etc/group 에서 정보를 얻어 변경한다.
(: 대신 . 으로도 사용 가능하다.)
3) 소유자 & 그룹 동시 변경
# chown root. ./inittab
# ll
합계 12
-rw------- 1 root samadal 739 2014-11-20 14:54 grub.conf
-rw-r--r-- 1 root root 884 2014-11-20 14:54 inittab
-rw-r--r-- 1 samadal user1 1816 2014-11-20 14:54 login.defs
4) 그룹만 변경
# chown .root ./login.defs ( = chgrp samadal ./inittab)
# ll
합계 12
-rw------- 1 root samadal 739 2014-11-20 14:54 grub.conf
-rw-r--r-- 1 root root 884 2014-11-20 14:54 inittab
-rw-r--r-- 1 samadal root 1816 2014-11-20 14:54 login.defs
'Study > CentOS' 카테고리의 다른 글
[13] 계정 복구, 계정 관련 Trouble Shooting, chown -R (0) | 2015.03.28 |
---|---|
[12] 소유권, 허가권 실습, ftp 관련 권한 (0) | 2015.03.28 |
[10] userdel, groupadd, groupdel, 계정 잠그기 (0) | 2015.03.27 |
[09] useradd -D, usermod (0) | 2015.03.27 |
[08] passwd, shadow, group, gshadow, useradd, passwd, skel (0) | 2015.03.27 |
- 2014.11.19
[Remark]
useradd 로 사용자를 추가하게 되면 아래 6가지에 정보가 생성된다.
1) /etc/passwd
2) /etc/shadow
3) /etc/group
4) /etc/gshadow
5) /$HOME
6) /var/spool/mail
1. userdel
userdel 명령어를 이용하면 home directory와 mail은 삭제되지 않는다.
-r 옵션을 쓰면 home directory와 mail도 삭제된다.
*
userdel 로 삭제하면 user를 복구할 수 있다.
하지만 userdel -r 옵션으로 삭제하면 데이터까지 삭제되기 때문에 user를 복구할 수 없다.
2. groupadd
# groupadd s1
# tail /etc/group
nfsnobody:x:65534:
gdm:x:42:
sshd:x:74:
stapusr:x:156:
stapsys:x:157:
stapdev:x:158:
tcpdump:x:72:
slocate:x:21:
samadal:x:500:
s1:x:501:
GID 를 600으로 줘서 새로운 그룹 생성
# groupadd -g 600 s2
# tail -4 /etc/group
slocate:x:21:
samadal:x:500:
s1:x:501:
s2:x:600:
# groupadd s3
# tail -4 /etc/group
samadal:x:500:
s1:x:501:
s2:x:600:
s3:x:601:
GID 가 502가 아닌 601로 생성되었다.
즉, group id는 가장 나중 번호 다음 번호로 생성이 된다.
3. groupdel
ex)
# groupdel s1
# groupdel s2
# groupdel s3
# groupdel s4
# groupdel s5
[실습]
사용자 : user1, user2
그룹 : g1, g2 생성
# useradd user1
# useradd user2
# groupadd g1
# groupadd g2
4. usermod 로 user의 그룹 정보 변경
group을 동아리라고 생각한다면
동아리 추가는 -G : 공유 그룹 추가
동아리 변경은 -g : 내 그룹으로 변경
1) -G 로 그룹 정보 변경
# usermod -G g1 user1
# tail -3 /etc/passwd
samadal:x:500:500:madalgyo:/export/home/samadal:/bin/bash
user1:x:501:501::/home/user1:/bin/bash
user2:x:502:502::/home/user2:/bin/bash
# tail -5 /etc/group
samadal:x:500:
user1:x:501:
user2:x:502:
g1:x:503:user1
g2:x:504:
2) -g 로 그룹 정보 변경
# usermod -g g2 user2
# tail -4 /etc/group
user1:x:501:
user2:x:502:
g1:x:503:user1
g2:x:504:
# tail -3 /etc/passwd
samadal:x:500:500:madalgyo:/export/home/samadal:/bin/bash
user1:x:501:501::/home/user1:/bin/bash
user2:x:502:504::/home/user2:/bin/bash
# id user1
uid=501(user1) gid=501(user1) groups=501(user1),503(g1)
# id user2
uid=502(user2) gid=504(g2) groups=504(g2)
*
공유그룹은 1개밖에 추가로 못가진다. 다른 그룹으로 덮으면 기존 공유그릅은 삭제된다.
[문제1]
usermod 실습 원상복귀
# usermod -G user1 user1
# usermod -g user2 user2
# id user1
uid=501(user1) gid=501(user1) groups=501(user1)
# tail -4 /etc/group
user1:x:501:user1
user2:x:502:
g1:x:503:
g2:x:504:
[문제2]
-작업환경-
user : testuser
UID : 200
Gid : tg(2000)
shell : ksh
$home : /hosting
skel : /skelsam
auto creating directory : public_html
auto creationg file : .sam
모든 작업은 기본경로를 변경하지 않고 옵션만으로 사용자를 생성하세요.
모든 작업 완료 후 정상 로그인되는지 확인하세요.
실패시 삭제 후 다시 작업
# groupadd -g 2000 tg
# mkdir -p /skelsam/public_html /hosting
# cp /etc/skel/.* /skelsam
# cp -r /etc/skel/.gnome2 /etc/skel/.mozilla /skelsam
# touch /skelsam/.sam
# useradd -u 1200 -g tg -s /bin/ksh -d /hosting/testuser -m -k /skelsam testuser
# passwd testuser
결과물 확인 : testuser로 로그인 후
$ pwd
/hosting/testuser
$ ll -a
합계 36
drwx------ 4 testuser tg 4096 2014-11-19 14:05 .
drwxr-xr-x 3 root root 4096 2014-11-19 14:03 ..
-rw-r--r-- 1 testuser tg 18 2014-11-19 14:00 .bash_logout
-rw-r--r-- 1 testuser tg 176 2014-11-19 14:00 .bash_profile
-rw-r--r-- 1 testuser tg 124 2014-11-19 14:00 .bashrc
drwxr-xr-x 2 testuser tg 4096 2014-11-19 14:00 .gnome2
-rw-r--r-- 1 testuser tg 171 2014-11-19 14:00 .kshrc
drwxr-xr-x 4 testuser tg 4096 2014-11-19 14:00 .mozilla
-rw-r--r-- 1 testuser tg 0 2014-11-19 14:01 .sam
-rw------- 1 testuser tg 110 2014-11-19 14:07 .sh_history
drwxr-xr-x 2 testuser tg 4096 2014-11-19 14:01 public_html
$ tail -1 /etc/passwd
testuser:x:1200:2000::/hosting/testuser:/bin/ksh
$ tail -1 /etc/group
tg:x:2000:
$ id testuser
uid=1200(testuser) gid=2000(tg) groups=2000(tg)
[문제3]
-작업환경-
user : tiger
Uid : 700
공유그룹 : g1
별칭 : silver
홈디렉토리 : /local_host/home/
쉘 : 본쉘
skel : /skel/
자동생성 디렉터리 : public_html
자동생성파일 : public_html/index.html <-- www.silvertiger.com 추가
기본설정 건드리지 말고 옵션만을 이용하여 설정
설정 후 정상로그인 되는지 확인. 실패 시 삭제 후 다시 생성
# mkdir -p /local_host/home/
# mkdir /skel/
# cp /etc/skel/.* /skel/
# cp -r /etc/skel/.gnome2 /etc/skel/.mozilla /skel/
# mkdir /skel/public_html
# cat > /skel/public_html/index.html
www.silvertiger.com
# useradd -u 700 -G g1 -c silver -d /local _host/home/tiger -s /bin/sh -m -k /skel tiger
tiger로 로그인 하여 정상 생성 되었는지 확인
-sh.4.1$ pwd
/local_host/home/tiger
-sh.4.1$ ll -a
합계 36
drwx------ 5 tiger tiger 4096 2014-11-19 14:36 .
drwxr-xr-x 3 root root 4096 2014-11-19 14:36 ..
-rw-r--r-- 1 tiger tiger 18 2014-11-19 14:35 .bash_logout
-rw-r--r-- 1 tiger tiger 176 2014-11-19 14:35 .bash_profile
-rw-r--r-- 1 tiger tiger 124 2014-11-19 14:35 .bashrc
drwxr-xr-x 2 tiger tiger 4096 2014-11-19 14:35 .gnome2
-rw-r--r-- 1 tiger tiger 171 2014-11-19 14:35 .kshrc
drwxr-xr-x 4 tiger tiger 4096 2014-11-19 14:35 .mozilla
drwxr-xr-x 2 tiger tiger 4096 2014-11-19 14:35 public_html
-sh.4.1$ cat ./public_html/index.html
www.silvertiger.com
-sh.4.1$ tail -1 /etc/passwd
tiger:x:700:700:silver:/local_host/home/tiger:/bin/sh
-sh.4.1$ id tiger
uid=700(tiger) gid=700(tiger) groups=700(tiger),503(g1)
5. 계정 잠그기
1) passwd -l tiger(계정명) : lock
-u tiger(계정명) : unlock
② usermod -L tiger(계정명) : lock
-U tiger(계정명) : unlock
*
passwd 명령어로 unlock 하는 경우, Linux 재부팅 해야 적용되지만
usermod 명령어로 unlock 하는 경우, 바로 적용된다.
'Study > CentOS' 카테고리의 다른 글
[12] 소유권, 허가권 실습, ftp 관련 권한 (0) | 2015.03.28 |
---|---|
[11] 허가권, 소유권, chmod, chown, chgrp (0) | 2015.03.28 |
[09] useradd -D, usermod (0) | 2015.03.27 |
[08] passwd, shadow, group, gshadow, useradd, passwd, skel (0) | 2015.03.27 |
[07] vi(2), 유용한 vi 명령어 메모 (0) | 2015.03.27 |
- 2014.11.18
1. useradd -D
하나의 명령어이며, 유저 생성에 대한 기본 설정
useradd에 대한 기본 설정 출력
# cat /etc/default/useradd
GROUP=100 // -g : /etc/group d에 user 번호가 100이다. 즉 user 생성 시 자신의 이름으로 그룹 생성하라는 설정번호
HOME=/home // -b
INACTIVE=-1 // -f : 계정 만료 시 어떻게 할 것인가?
-1 : 기능정지 / 0 : 사용정지
EXPIRE= // -e YYYYMMDD
SHELL=/bin/bash // -s
SKEL=/etc/skel // 옵션 x, vi로만 편집
CREATE_MAIL_SPOOL=yes
[문제1]
shell : tsch -> 문서를 이용한 변경
$home : /test -> 명령어를 이용한 변경
skel : /skelsam -> 문서를 이용한 변경
user : user7
변경을 한 후 useradd user7 입력 후 user7이 정상적으로 로그인되는지 확인
vi /etc/default/useradd 를 통해 바꾼다.
useradd -D -b /test 로 바꾼다.
없는 디렉터리 생성한다.
계정생성하고 passwd 바꾸고 실행하면 됨
[문제2]
파일 /backup/grub.conf 를 디렉터리 /usertest/test/public 에 grub로 복사후 열기
5번째줄 하단에 리눅스 IP의 출력내용을 삽입
(eth로 시작하는것만 삽입하고 lo로 시작하는 것은 제외)
skel로 사용할 디렉토리 /test/ut/ 에 파일 conf로 저장후 열기
디렉터리 /usertest/ 에 사용자 user8 생성
이때 파일 conf가 .conf로 자동생성되도록 해보세요.
절대 기본정보 쓰지않고 옵션만을 통해서 작업하세요
# mkdir -p /usertest/test/public
# cp /backup/grub.conf /usertest/test/public/grub
# vi /usertest/test/public/grub
:5r! ifconfig eth0
-> lo 로 시작하는 부분 삭제
!mkdir -p /test/ut/
:w /test/ut/.conf
# cp /etc/skel/.* /test/ut/
# cp -r /etc/skel/.gnome2 /etc/skel/.mozilla /test/ut/
# useradd -d /usertest/user8 -m -k /test/ut user8
# passwd user8
[문제3]
문서를 이용한 기본 skel 변경 : /test/ut
사용자 : user9
명령어 : useradd user9
# vi /etc/default/useradd
/etc/skel -> /test/ut
# useradd user9
# passwd user9
2. usermod
user modify
usermod [option] [argument] ... [account_name]
# tail -5 /etc/passwd
testtt:x:513:513::/usertest/testtt:/bin/bash
user6:x:514:514::/linux/user6:/bin/bash
user7:x:515:515::/test/user7:/bin/tcsh
user8:x:516:516::/usertest/user8:/bin/bash
user9:x:517:517::/home/user9:/bin/bash
-u -g -c -d -s
*
-l : user 이름 변경, -p : passwd 변경이지만 사용하지 않는 것이 편함.
만들고 난 후기 때문에 skel 은 변경 불가능
[문제1]
user3 의 home directory를 gangnam -> user3 로 변경
# usermod -d /linux/user3 user3
# ll /linux
합계 8
drwx------ 4 user3 user3 4096 2014-11-17 14:13 gangnam
drwx------ 4 user6 user6 4096 2014-11-18 12:52 user6
# mv /linux/gangnam/ /linux/user3/
하지만 user3 로그인 시 /linux/user3/ 이 아닌 / 에서 로그인이 된다.
passwd 는 동사무소와 같다. 동사무소에 신고한 뒤에 실제로 이사를 해야한다.
# mv /linux/gangnam/ /linux/user3/
# ll /linux
합계 8
drwx------ 4 user3 user3 4096 2014-11-17 14:13 user3
drwx------ 4 user6 user6 4096 2014-11-18 12:52 user6
[문제2]
Q : user2 : testuser -> usertest
A : # usermod -c usertest user2
Q : user7 : tcsh -> bash
A : # usermod -s /bin/bash user7
Q : user9 : comment -> lastuser
A : # usermod -c lastuser user9
[문제3]
samadal 포함 모든 사용자를 /export/home/ 으로 변경하세요
변경후 정상로그인되는지 확인
# mkdir -p /export/home/
# mv /linux/user3 /export/home/
# mv /usertest/ /export/home/
# mv /export/home/usertest/* /export/home/
# mv /linux/user6/ /export/home/
# mv /test/user7/ /export/home/
# mv /home/samadal/ /export/home/
# mv /home/us* /export/home/
각자의 home directory 경로를 /export/home/ 으로 변경
치환 명령어 사용하면 편하다. ex) %s//home//export/home
# vi /etc/passwd
'Study > CentOS' 카테고리의 다른 글
[11] 허가권, 소유권, chmod, chown, chgrp (0) | 2015.03.28 |
---|---|
[10] userdel, groupadd, groupdel, 계정 잠그기 (0) | 2015.03.27 |
[08] passwd, shadow, group, gshadow, useradd, passwd, skel (0) | 2015.03.27 |
[07] vi(2), 유용한 vi 명령어 메모 (0) | 2015.03.27 |
[06] 명령어 find, shutdown, vi(1) & FTP 방화벽 설정 관련(집) (0) | 2015.03.27 |
[ hw06 ]
---------------------------------------------------------------------
#1
#include <stdio.h>
int main()
{
int a[10];
int i;
for(i=0;i<10;i++)
{
printf("%d번째 정수를 입력하시오 : ", i+1);
scanf("%d", &a[i]);
}
for(i=0;i<9;i++)
{
if (a[i] > a[i+1]) // 따로 tmp 인수를 만들지 않고 기존의 인수를 활용하려고 하였다.
a[i+1] = a[i];
}
printf("가장 큰 정수값은 %d입니다.\n", a[9]);
return 0;
}
---------------------------------------------------------------------
#2
#include <stdio.h>
#define size_a 10
float max(float *p);
float min(float *p);
float avg(float *p);
int main()
{
float a[size_a];
int i;
float *p;
p = a;
for(i=0;i<size_a;i++)
{
printf("%d번째 체중 : ", i+1);
scanf("%f", &a[i]);
}
printf("최고체중 : %0.1f 최저체중 : %0.1f 평균체중 : %0.1f\n", max(p), min(p), avg(p));
return 0;
}
float max(float *p){
int i;
float max;
for(i=0;i<size_a-1;i++)
{
if (*(p+i) > *(p+i+1))
max = *(p+i);
}
return max;
}
float min(float *p){
int i;
float min;
for(i=0;i<size_a-1;i++)
{
if (*(p+i) > *(p+i+1))
min = *(p+i+1);
}
return min;
}
float avg(float *p){
int i;
float avg = 0;
for(i=0;i<size_a;i++)
avg += *(p+i);
return avg/10;
}
---------------------------------------------------------------------
#3
#include <stdio.h>
double dp(double x, int n);
int main(){
double x;
int n;
printf("x^n 을 계산하는 프로그램입니다. x와 n을 입력하시오. (x, n) :");
scanf("%lf, %d", &x, &n);
printf("%lf의 %d제곱 = %lf", x, n, dp(x, n));
return 0;
}
double dp(double x, int n){
if (n==1)
return x;
else
return x*dp(x, n-1); // 재귀함수 사용
}
---------------------------------------------------------------------
#4 // 구글 검색해서 힌트 얻음
#include <stdio.h>
int gcd(int a, int b);
int main(){
int a, b;
printf("최대공약수를 구할 두 수를 입력하세요(a, b) : ");
scanf("%d, %d", &a, &b);
printf("%d와 %d의 최대공약수는 %d 입니다.\n", a, b, gcd(a, b));
return 0;
}
int gcd(int a, int b){ // 정수론 시간에 배운 내용이었는데,, 이렇게 활용되는구나
if (b==0)
return a;
gcd(b, a%b);
}
---------------------------------------------------------------------
#5
#include <stdio.h>
#include <stdlib.h>
int main(){
int *score;
int sn, i, a, b, c, d, f;
a = b = c = d = f = 0;
printf("학생 수 : ");
scanf("%d", &sn);
score = (int *)malloc(sizeof(int)*sn);
for(i=0;i<sn;i++){
printf("%d번째 학생의 점수를 입력하세요 : ", i+1);
scanf("%d", &score[i]);
if (score[i] >= 90)
a++;
else if (score[i] >= 80)
b++;
else if (score[i] >= 70)
c++;
else if (score[i] >= 60)
d++;
else
f++;
}
printf("\n90점 이상 : ");
for(i=0;i<a;i++){
printf("*");
}
printf("\n80점 이상 : ");
for(i=0;i<b;i++){
printf("*");
}
printf("\n70점 이상 : ");
for(i=0;i<c;i++){
printf("*");
}
printf("\n60점 이상 : ");
for(i=0;i<d;i++){
printf("*");
}
printf("\n60점 미만 : ");
for(i=0;i<f;i++){
printf("*");
}
printf("\n");
free(score);
return 0;
}
---------------------------------------------------------------------
#6
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(){
int num, seed;
int i = 1;
seed = time(NULL);
srand(seed);
num = rand() % 100;
while(1)
{
printf("어떤 숫자일지 맞춰보세요 : ");
scanf("%d", &seed);
if (num == seed){
printf("%d번만에 맞추셨네요~ 짝짝짝\n", i);
break;
}
else if (num > seed ){
printf("더 작은 수를 입력하셨네요~\n");
i++;
}
else{
printf("더 큰 수를 입력하셨네요~\n");
i++;
}
}
return 0;
}
---------------------------------------------------------------------