unsigned int read(struct file *filp, void *buf, size_t count, loff_t *f_pos)
{
int loop = 0;
unsigned int * temp=0;
FUNC_IN
dbg("inode num[%08x]", filp->f_path.dentry->d_inode->i_ino);
dbg("iminor num[%08x]", iminor(filp->f_path.dentry->d_inode));
switch ( iminor(filp->f_path.dentry->d_inode) ) {
case 0:
interruptible_sleep_on(&read_wait);
break;
case 1:
interruptible_sleep_on(&read_wait_gps);
break;
case 2:
interruptible_sleep_on(&read_wait_ppp);
break;
}
( ... )
2010년 4월 14일 수요일
2010년 3월 23일 화요일
GPIO TEST
GPIO TEST
[커널 설정]
make menuconfig
Device Drivers --->
GPIO Support --->
[*] Debug GPIO calls x x
[*] /sys/class/gpio/... (sysfs interface)
[코드 삽입]
#if 1 // GPIO TEST
int err;
err = gpio_request(S5PC11X_GPJ0(0), "GPJ0");
if (err) {
printk(KERN_ERR "failed to request S5PC11X_GPJ0_0\n");
} else {
err = gpio_export(S5PC11X_GPJ0(0), true);
if (err) {
printk(KERN_ERR "failed to export S5PC11X_GPJ0_0\n");
}
}
#endif
[사용]
# cd /sys/class/gpio/
# ls -l
--w------- root root 4096 1970-01-01 00:12 export
--w------- root root 4096 1970-01-01 00:12 unexport
lrwxrwxrwx root root 1970-01-01 00:12 gpiochip0 -> ../../devices/virtual/gpio/gpiochip0
lrwxrwxrwx root root 1970-01-01 00:12 gpiochip9 -> ../../devices/virtual/gpio/gpiochip9
lrwxrwxrwx root root 1970-01-01 00:12 gpiochip14 -> ../../devices/virtual/gpio/gpiochip14
lrwxrwxrwx root root 1970-01-01 00:12 gpiochip23 -> ../../devices/virtual/gpio/gpiochip23
lrwxrwxrwx root root 1970-01-01 00:12 gpiochip29 -> ../../devices/virtual/gpio/gpiochip29
lrwxrwxrwx root root 1970-01-01 00:12 gpiochip35 -> ../../devices/virtual/gpio/gpiochip35
lrwxrwxrwx root root 1970-01-01 00:12 gpiochip40 -> ../../devices/virtual/gpio/gpiochip40
lrwxrwxrwx root root 1970-01-01 00:12 gpiochip47 -> ../../devices/virtual/gpio/gpiochip47
lrwxrwxrwx root root 1970-01-01 00:12 gpiochip56 -> ../../devices/virtual/gpio/gpiochip56
lrwxrwxrwx root root 1970-01-01 00:12 gpiochip62 -> ../../devices/virtual/gpio/gpiochip62
lrwxrwxrwx root root 1970-01-01 00:12 gpiochip71 -> ../../devices/virtual/gpio/gpiochip71
lrwxrwxrwx root root 1970-01-01 00:12 gpiochip80 -> ../../devices/virtual/gpio/gpiochip80
lrwxrwxrwx root root 1970-01-01 00:12 gpiochip89 -> ../../devices/virtual/gpio/gpiochip89
lrwxrwxrwx root root 1970-01-01 00:12 gpiochip96 -> ../../devices/virtual/gpio/gpiochip96
lrwxrwxrwx root root 1970-01-01 00:12 gpiochip104 -> ../../devices/virtual/gpio/gpiochip104
lrwxrwxrwx root root 1970-01-01 00:12 gpiochip112 -> ../../devices/virtual/gpio/gpiochip112
lrwxrwxrwx root root 1970-01-01 00:12 gpiochip120 -> ../../devices/virtual/gpio/gpiochip120
lrwxrwxrwx root root 1970-01-01 00:12 gpiochip128 -> ../../devices/virtual/gpio/gpiochip128
lrwxrwxrwx root root 1970-01-01 00:12 gpiochip137 -> ../../devices/virtual/gpio/gpiochip137
lrwxrwxrwx root root 1970-01-01 00:12 gpiochip146 -> ../../devices/virtual/gpio/gpiochip146
lrwxrwxrwx root root 1970-01-01 00:12 gpiochip155 -> ../../devices/virtual/gpio/gpiochip155
lrwxrwxrwx root root 1970-01-01 00:12 gpiochip164 -> ../../devices/virtual/gpio/gpiochip164
lrwxrwxrwx root root 1970-01-01 00:12 gpiochip172 -> ../../devices/virtual/gpio/gpiochip172
lrwxrwxrwx root root 1970-01-01 00:12 gpiochip181 -> ../../devices/virtual/gpio/gpiochip181
lrwxrwxrwx root root 1970-01-01 00:12 gpiochip188 -> ../../devices/virtual/gpio/gpiochip188
lrwxrwxrwx root root 1970-01-01 00:12 gpiochip197 -> ../../devices/virtual/gpio/gpiochip197
lrwxrwxrwx root root 1970-01-01 00:12 gpiochip206 -> ../../devices/virtual/gpio/gpiochip206
lrwxrwxrwx root root 1970-01-01 00:12 gpiochip212 -> ../../devices/virtual/gpio/gpiochip212
lrwxrwxrwx root root 1970-01-01 00:12 gpiochip221 -> ../../devices/virtual/gpio/gpiochip221
lrwxrwxrwx root root 1970-01-01 00:12 gpiochip226 -> ../../devices/virtual/gpio/gpiochip226
lrwxrwxrwx root root 1970-01-01 00:12 gpiochip235 -> ../../devices/virtual/gpio/gpiochip235
lrwxrwxrwx root root 1970-01-01 00:12 gpiochip244 -> ../../devices/virtual/gpio/gpiochip244
lrwxrwxrwx root root 1970-01-01 00:12 gpiochip253 -> ../../devices/virtual/gpio/gpiochip253
lrwxrwxrwx root root 1970-01-01 00:12 gpiochip262 -> ../../devices/virtual/gpio/gpiochip262
lrwxrwxrwx root root 1970-01-01 00:12 gpiochip271 -> ../../devices/virtual/gpio/gpiochip271
lrwxrwxrwx root root 1970-01-01 00:12 gpiochip280 -> ../../devices/virtual/gpio/gpiochip280
lrwxrwxrwx root root 1970-01-01 00:12 gpiochip289 -> ../../devices/virtual/gpio/gpiochip289
lrwxrwxrwx root root 1970-01-01 00:12 gpiochip298 -> ../../devices/virtual/gpio/gpiochip298
lrwxrwxrwx root root 1970-01-01 00:12 gpiochip307 -> ../../devices/virtual/gpio/gpiochip307
lrwxrwxrwx root root 1970-01-01 00:12 gpiochip316 -> ../../devices/virtual/gpio/gpiochip316
lrwxrwxrwx root root 1970-01-01 00:12 gpiochip325 -> ../../devices/virtual/gpio/gpiochip325
lrwxrwxrwx root root 1970-01-01 00:12 gpiochip334 -> ../../devices/virtual/gpio/gpiochip334
lrwxrwxrwx root root 1970-01-01 00:12 gpiochip343 -> ../../devices/virtual/gpio/gpiochip343
lrwxrwxrwx root root 1970-01-01 00:12 gpiochip351 -> ../../devices/virtual/gpio/gpiochip351
lrwxrwxrwx root root 1970-01-01 00:12 gpiochip360 -> ../../devices/virtual/gpio/gpiochip360
lrwxrwxrwx root root 1970-01-01 00:12 gpiochip369 -> ../../devices/virtual/gpio/gpiochip369
lrwxrwxrwx root root 1970-01-01 00:12 gpiochip378 -> ../../devices/virtual/gpio/gpiochip378
lrwxrwxrwx root root 1970-01-01 00:12 gpiochip387 -> ../../devices/virtual/gpio/gpiochip387
lrwxrwxrwx root root 1970-01-01 00:12 gpiochip396 -> ../../devices/virtual/gpio/gpiochip396
lrwxrwxrwx root root 1970-01-01 00:12 gpiochip405 -> ../../devices/virtual/gpio/gpiochip405
lrwxrwxrwx root root 1970-01-01 00:12 gpiochip414 -> ../../devices/virtual/gpio/gpiochip414
lrwxrwxrwx root root 1970-01-01 00:12 gpiochip423 -> ../../devices/virtual/gpio/gpiochip423
lrwxrwxrwx root root 1970-01-01 00:01 gpio172 -> ../../devices/virtual/gpio/gpio172
lrwxrwxrwx root root 1970-01-01 00:12 gpio173 -> ../../devices/virtual/gpio/gpio173
lrwxrwxrwx root root 1970-01-01 00:12 gpio186 -> ../../devices/virtual/gpio/gpio186
# cat gpiochip181/label
GPJ1
gpio186 는 GPJ1_5 임을 알 수 있음.
# cd gpio186
# ls -l
-rw-r--r-- root root 4096 1970-01-01 00:00 uevent
lrwxrwxrwx root root 1970-01-01 00:30 subsystem -> ../../../../class/gpio
drwxr-xr-x root root 1970-01-01 00:00 power
-rw-r--r-- root root 4096 1970-01-01 00:30 direction
-rw-r--r-- root root 4096 1970-01-01 00:30 value
# cat direction
in
# echo out > direction
# cat direction
out
# cat value
0
# echo 1 > value
# cat value
1
[커널 설정]
make menuconfig
Device Drivers --->
GPIO Support --->
[*] Debug GPIO calls x x
[*] /sys/class/gpio/... (sysfs interface)
[코드 삽입]
#if 1 // GPIO TEST
int err;
err = gpio_request(S5PC11X_GPJ0(0), "GPJ0");
if (err) {
printk(KERN_ERR "failed to request S5PC11X_GPJ0_0\n");
} else {
err = gpio_export(S5PC11X_GPJ0(0), true);
if (err) {
printk(KERN_ERR "failed to export S5PC11X_GPJ0_0\n");
}
}
#endif
[사용]
# cd /sys/class/gpio/
# ls -l
--w------- root root 4096 1970-01-01 00:12 export
--w------- root root 4096 1970-01-01 00:12 unexport
lrwxrwxrwx root root 1970-01-01 00:12 gpiochip0 -> ../../devices/virtual/gpio/gpiochip0
lrwxrwxrwx root root 1970-01-01 00:12 gpiochip9 -> ../../devices/virtual/gpio/gpiochip9
lrwxrwxrwx root root 1970-01-01 00:12 gpiochip14 -> ../../devices/virtual/gpio/gpiochip14
lrwxrwxrwx root root 1970-01-01 00:12 gpiochip23 -> ../../devices/virtual/gpio/gpiochip23
lrwxrwxrwx root root 1970-01-01 00:12 gpiochip29 -> ../../devices/virtual/gpio/gpiochip29
lrwxrwxrwx root root 1970-01-01 00:12 gpiochip35 -> ../../devices/virtual/gpio/gpiochip35
lrwxrwxrwx root root 1970-01-01 00:12 gpiochip40 -> ../../devices/virtual/gpio/gpiochip40
lrwxrwxrwx root root 1970-01-01 00:12 gpiochip47 -> ../../devices/virtual/gpio/gpiochip47
lrwxrwxrwx root root 1970-01-01 00:12 gpiochip56 -> ../../devices/virtual/gpio/gpiochip56
lrwxrwxrwx root root 1970-01-01 00:12 gpiochip62 -> ../../devices/virtual/gpio/gpiochip62
lrwxrwxrwx root root 1970-01-01 00:12 gpiochip71 -> ../../devices/virtual/gpio/gpiochip71
lrwxrwxrwx root root 1970-01-01 00:12 gpiochip80 -> ../../devices/virtual/gpio/gpiochip80
lrwxrwxrwx root root 1970-01-01 00:12 gpiochip89 -> ../../devices/virtual/gpio/gpiochip89
lrwxrwxrwx root root 1970-01-01 00:12 gpiochip96 -> ../../devices/virtual/gpio/gpiochip96
lrwxrwxrwx root root 1970-01-01 00:12 gpiochip104 -> ../../devices/virtual/gpio/gpiochip104
lrwxrwxrwx root root 1970-01-01 00:12 gpiochip112 -> ../../devices/virtual/gpio/gpiochip112
lrwxrwxrwx root root 1970-01-01 00:12 gpiochip120 -> ../../devices/virtual/gpio/gpiochip120
lrwxrwxrwx root root 1970-01-01 00:12 gpiochip128 -> ../../devices/virtual/gpio/gpiochip128
lrwxrwxrwx root root 1970-01-01 00:12 gpiochip137 -> ../../devices/virtual/gpio/gpiochip137
lrwxrwxrwx root root 1970-01-01 00:12 gpiochip146 -> ../../devices/virtual/gpio/gpiochip146
lrwxrwxrwx root root 1970-01-01 00:12 gpiochip155 -> ../../devices/virtual/gpio/gpiochip155
lrwxrwxrwx root root 1970-01-01 00:12 gpiochip164 -> ../../devices/virtual/gpio/gpiochip164
lrwxrwxrwx root root 1970-01-01 00:12 gpiochip172 -> ../../devices/virtual/gpio/gpiochip172
lrwxrwxrwx root root 1970-01-01 00:12 gpiochip181 -> ../../devices/virtual/gpio/gpiochip181
lrwxrwxrwx root root 1970-01-01 00:12 gpiochip188 -> ../../devices/virtual/gpio/gpiochip188
lrwxrwxrwx root root 1970-01-01 00:12 gpiochip197 -> ../../devices/virtual/gpio/gpiochip197
lrwxrwxrwx root root 1970-01-01 00:12 gpiochip206 -> ../../devices/virtual/gpio/gpiochip206
lrwxrwxrwx root root 1970-01-01 00:12 gpiochip212 -> ../../devices/virtual/gpio/gpiochip212
lrwxrwxrwx root root 1970-01-01 00:12 gpiochip221 -> ../../devices/virtual/gpio/gpiochip221
lrwxrwxrwx root root 1970-01-01 00:12 gpiochip226 -> ../../devices/virtual/gpio/gpiochip226
lrwxrwxrwx root root 1970-01-01 00:12 gpiochip235 -> ../../devices/virtual/gpio/gpiochip235
lrwxrwxrwx root root 1970-01-01 00:12 gpiochip244 -> ../../devices/virtual/gpio/gpiochip244
lrwxrwxrwx root root 1970-01-01 00:12 gpiochip253 -> ../../devices/virtual/gpio/gpiochip253
lrwxrwxrwx root root 1970-01-01 00:12 gpiochip262 -> ../../devices/virtual/gpio/gpiochip262
lrwxrwxrwx root root 1970-01-01 00:12 gpiochip271 -> ../../devices/virtual/gpio/gpiochip271
lrwxrwxrwx root root 1970-01-01 00:12 gpiochip280 -> ../../devices/virtual/gpio/gpiochip280
lrwxrwxrwx root root 1970-01-01 00:12 gpiochip289 -> ../../devices/virtual/gpio/gpiochip289
lrwxrwxrwx root root 1970-01-01 00:12 gpiochip298 -> ../../devices/virtual/gpio/gpiochip298
lrwxrwxrwx root root 1970-01-01 00:12 gpiochip307 -> ../../devices/virtual/gpio/gpiochip307
lrwxrwxrwx root root 1970-01-01 00:12 gpiochip316 -> ../../devices/virtual/gpio/gpiochip316
lrwxrwxrwx root root 1970-01-01 00:12 gpiochip325 -> ../../devices/virtual/gpio/gpiochip325
lrwxrwxrwx root root 1970-01-01 00:12 gpiochip334 -> ../../devices/virtual/gpio/gpiochip334
lrwxrwxrwx root root 1970-01-01 00:12 gpiochip343 -> ../../devices/virtual/gpio/gpiochip343
lrwxrwxrwx root root 1970-01-01 00:12 gpiochip351 -> ../../devices/virtual/gpio/gpiochip351
lrwxrwxrwx root root 1970-01-01 00:12 gpiochip360 -> ../../devices/virtual/gpio/gpiochip360
lrwxrwxrwx root root 1970-01-01 00:12 gpiochip369 -> ../../devices/virtual/gpio/gpiochip369
lrwxrwxrwx root root 1970-01-01 00:12 gpiochip378 -> ../../devices/virtual/gpio/gpiochip378
lrwxrwxrwx root root 1970-01-01 00:12 gpiochip387 -> ../../devices/virtual/gpio/gpiochip387
lrwxrwxrwx root root 1970-01-01 00:12 gpiochip396 -> ../../devices/virtual/gpio/gpiochip396
lrwxrwxrwx root root 1970-01-01 00:12 gpiochip405 -> ../../devices/virtual/gpio/gpiochip405
lrwxrwxrwx root root 1970-01-01 00:12 gpiochip414 -> ../../devices/virtual/gpio/gpiochip414
lrwxrwxrwx root root 1970-01-01 00:12 gpiochip423 -> ../../devices/virtual/gpio/gpiochip423
lrwxrwxrwx root root 1970-01-01 00:01 gpio172 -> ../../devices/virtual/gpio/gpio172
lrwxrwxrwx root root 1970-01-01 00:12 gpio173 -> ../../devices/virtual/gpio/gpio173
lrwxrwxrwx root root 1970-01-01 00:12 gpio186 -> ../../devices/virtual/gpio/gpio186
# cat gpiochip181/label
GPJ1
gpio186 는 GPJ1_5 임을 알 수 있음.
# cd gpio186
# ls -l
-rw-r--r-- root root 4096 1970-01-01 00:00 uevent
lrwxrwxrwx root root 1970-01-01 00:30 subsystem -> ../../../../class/gpio
drwxr-xr-x root root 1970-01-01 00:00 power
-rw-r--r-- root root 4096 1970-01-01 00:30 direction
-rw-r--r-- root root 4096 1970-01-01 00:30 value
# cat direction
in
# echo out > direction
# cat direction
out
# cat value
0
# echo 1 > value
# cat value
1
2010년 3월 5일 금요일
Kernel DM Define
kernel에서 include/linux/module.h 에 디버깅문 추가
jsk("Function %s Entered", __FUNCTION__);
#define JSK_DBG
#ifdef JSK_DBG
//#include
#define jsk(format, arg...) do {printk("JSK_DBG: " format "\n", ## arg); /*fflush(stdout);*/} while(0);
#else
#define jsk(format, arg...) do {} while(0)
#endif
2009년 12월 15일 화요일
SAMBA 설치
# install samba
sudo apt-get install samba smbfs
# setup passwd and userid
sudo smbpasswd -a jsk
# configuration
sudo vim /etc/samba/smb.conf
sudo testparm
# start service
sudo /etc/init.d/samba restart
access :
//linuxip/share_name
윈도우 공유폴더를 리눅스에서 마운트
(참고 http://purityboy83.tistory.com/49)
mount -t cifs //192.168.123.212/TFTPBOOT/ /home/slimcode/8.XP/tftpboot -o uid=slimcode,gid=slimcode,username=jungsukkyu
common internet file system
1번 타겟아이피
2번 공유명
3번 마운트할곳
4번 저구문없이 마운트잡으면 root로 권한이 설정 되기때문에 root로 사용해도
상관이없다면 저구문을 빼면되고 자기가 일반적으로 사용하는 계정명으로
디렉토리를 마운트를 하고자한다면 유저와 그룹을 기술해줘야하고
5번 첫번째 사진에서 공유디렉토리에 권한이 어드민에 잡혀있으므로
username 으로 아이디를 기술해준 것입니다
sudo apt-get install samba smbfs
# setup passwd and userid
sudo smbpasswd -a jsk
# configuration
sudo vim /etc/samba/smb.conf
[share_name]
# test
comment = share dir
read only = no
browsable = yes
path = /home/jsk/share
sudo testparm
# start service
sudo /etc/init.d/samba restart
access :
//linuxip/share_name
윈도우 공유폴더를 리눅스에서 마운트
(참고 http://purityboy83.tistory.com/49)
mount -t cifs //192.168.123.212/TFTPBOOT/ /home/slimcode/8.XP/tftpboot -o uid=slimcode,gid=slimcode,username=jungsukkyu
common internet file system
1번 타겟아이피
2번 공유명
3번 마운트할곳
4번 저구문없이 마운트잡으면 root로 권한이 설정 되기때문에 root로 사용해도
상관이없다면 저구문을 빼면되고 자기가 일반적으로 사용하는 계정명으로
디렉토리를 마운트를 하고자한다면 유저와 그룹을 기술해줘야하고
5번 첫번째 사진에서 공유디렉토리에 권한이 어드민에 잡혀있으므로
username 으로 아이디를 기술해준 것입니다
2009년 10월 22일 목요일
10 - 리눅스 Open SSH
SSH(Secure SHell)
관리의 목적으로 만들어진 보안로그인 쉘이다.Open SSH 서버설치 구성 요소
telnet 과 ftp 와 유사하나 보안이 우수하다. ssh 중에도 전혀 다른 개념의 protocol1 과 protocol2 가 있는데 protocol1은 스니핑이 가능하다. 따라서 protocol1 과 protocol2 를 같이사용하면 안된다.
* ssh 는 상용이고 openssh 는 배포판이다
openssh-4.0p1-3.i386.rpm서버 운용
openssh-server-4.0p1-3.i386.rpm
설치 후
# rpm -ql openssh-server-4.0p1-3
로 패키지가 설치한 파일들의 경로 및 이름을 확인할 수 있다.
그중에
/etc/rc.d/init.d/sshd 서버 실행 스크립트(path 경로에 없으므로 절대경로를 지정해서 실행해야함, # echo $PATH 엔터 패스경로 확인)
/etc/ssh/sshd_config 서버 설정 파일(서버설정파일은 rpm패키지로 설치시에는 대개 /etc/서비스와유사한이름의 디렉터리 안에 설정파일이 생성된다.)
/usr/sbin/sshd 서버 프로그램(스크립트가 읽혀지면서 이파일을 실행시킴)
이 3개지 파일이 특히 중요하다. 다른파일들도 중요 함.
# /etc/rc.d/init.d/sshd [옵션]서버 접속
start 시작
stop 종료
restart 종료 후 시작
status 상태표시
# ps -axf 계층적인 구조로 프로그램동작 출력
# netstat -atunp 현재 네트워크 연결상태를 보여줌
a all
t tcp
u udp
n numeric
p program
# who 현재 접속중인 tty또는, pts 원격지를 표시하고 접속한 사용자가 누구인지 정보를 출력
최초 접속시 접속자의 홈디렉터리의 .shh라는 숨은 디렉터리에 known_hosts 라는 파일안에 개인키를 받음
# ssh serverIP
접속한 서버의 쉘이 뜨면서 모든작업이 가능
단, 종료명령이나 랜카드 초기화시키는 명령은 하지 말것
# ssh [사용자ID]@serverIP
사용자로 접속 가능 (접속하려는 서버에 사용자 계정이 있어야함)
사용자로 접속후
* # su root 또는 # su - root 슈퍼유저 모드로 접속해서 root와 같은 작업을 할 수 있음
# scp [원본경로] [복사할위치의경로]
내컴의 디렉터리는 /어디/어디/어디
서버의 디렉터리는 serverIP:/어디/어디 이렇게 표시한다.
# sftp [server IP]
라벨:
LINUX,
LINUX COMMAND
09 - 리눅스 네트워크 설정, FTP, RPM
네트워크 설정
RPM
# ifconfigFTP
랜카드의 상태 확인 및 설정
# ifconfig [장치명]
장치의 상태를 출력
# ifconfig [장치명] down
장치의 상태 초기화(장치에 gw주소가 포함되어 있으면 같이 초기화 됨)
# ifconfig [장치명] [IP주소] netmask [넷마스크주소] broadcast [브로드캐스트주소] up
랜카드 설정
# route add default gw [IP대역에대한 게이트웨이주소]
게이트웨이주소 설정
# route del gw [게이트웨이주소]
게이트웨이주소삭제
# route del default gw [게이트웨이주소]
게이트웨이주소삭제
# echo "nameserver [네임서버주소]" > /etc/resolv.conf
네임서버의 주소를 /etc/resolv.conf 로 보냄
네임서보주소를 설정하지 않으면 URL 입력시 접속 할 수 없음
# ping www.yahoo.com
PING www.yahoo-ht2.akadns.net (209.131.36.158) 56(84) bytes of data.
64 bytes from f1.www.vip.sp1.yahoo.com (209.131.36.158) : icmp_seq=0 ttl=128 time=148 ms
64 bytes from f1.www.vip.sp1.yahoo.com (209.131.36.158) : icmp_seq=1 ttl=128 time=148 ms
...
ping 으로 접속이 잘 되었는지 확인
209.131.36.158 는 DNS서버에서 얻은 www.yahoo.com 의 IP주소
64 bytes = 56bytes의 임의의 값 + 8bytes
64 bytes를 해당서버에 보내고 다시 돌려받는 time=148 ms시간을 확인하여 통신이 잘되는지 확인할 수 있다.
ttl 값은 해당 서버의 OS를 알아볼 수 있는 방법이었는데 관리자가 보안을 위해 변경을 하기때문에 알 수 없다.
ttl 값이 1씩 줄어 들면서 0이 될 때까지 목적지에 도달하지 못하면 현재 위치한 곳의 주소를 출발지로하여 다시 되돌려 보냄. 이러한 방식으로 루핑을 방지한다.
# traceroute [목적지IP 혹은 도메인주소]
목적지까지 어떠한 경로를 거쳐서 가는지 확인
* VMware에서는 확인할 수 없다.
# nslookup [도메인주소]
해당 도메인의 IP주소를 확인
# ftp ftp.superuser.co.kr
Name : ftp 또는 anonymous (익명계정)
Password : 엔터
ftp> hash
다운로드시 #으로 다운받은양 표시 여부, 초기값은off
ftp> prompt
다운로드시 다운로드 확인 여부, 초기값은 on
ftp> lcd /tmp
로컬영역의 디렉터리변경(다운로드 받을 위치지정)
ftp> mget openssh*
현재디렉터리의 opensh로 시작하는 파일 다운로드
ftp> quit
ftp 종료
RPM
rpm packages 는 설치/관리는 쉬우나 보안에 취약하다.
반면, source package는 설/관리는 어려워도 보안 우수하다.
openssh-4.0p1-3.1386.rpm 를 설치하면 openssh-4.0p1-3 로 설치된다.
openssh-4.0p1-3.1386.rpm 설치할 패키지명
openssh-4.0p1-3 설치된 패키지명
-i 버전 확인 안하고 같은이름의 패키지 존재여부 확인후 설치(install)
-U 버전 확인후 상위버전이면 설치(Upgrade)
-v 설치결과를 보여줌
-h 진행상태를 # 로 표시
--nodeps 설치에 필요한 파일이 모두있을 때 설치순서 무시하고 진행(의존성 무시)
--force 기존 설치파일에 덮어 씌우기
# rpm ivh [설치할패키지명] --nodeps
패키지를 의존성무시하고 설치하며 설치결과와 진행상태를 보여줌
-e 제거(erase)
# rpm -e [설치된패키지명] --nodeps
의존성을 무시하고 패키지 삭제
-q 관리
-a 설치된 패키지의 리스트
-c 특정 패키지의 설정파일
-l 특정패키지가 설치한 파일들의 위치 및 이름 확인
-f 특정파일의 속해있는 패키지 확인
# rmp -qc [설치된패키지명(i386.rpm은 뺀 앞부분)]
# rmp -ql [설치된패키지명(i386.rpm은 뺀 앞부분)]
# rmp -qf [특정파일의경로]
라벨:
LINUX,
LINUX COMMAND
2009년 10월 18일 일요일
08 - 리눅스 setuid, setgid, stickybit, 소유자 그룹 변경
setuid (4000)
지정한 파일이 실행시점부터 끝날때까지 지정한 파일의 uid 의 소유권을 갖게 됨.
지정한 파일에 실행권한이 있을경우 rwx => rws
지정한 파일에 실행권한이 없을경우 rw- => rwS 실행안됨
지정한 파일이 실행 시점부터 끝날때까지 실행한파일의 gid 의 소유권을 갖게됨
지정한 파일에 실행권한이 있을경우 rwx => rws
지정한 파일에 실행권한이 없을경우 rw- => rwS 실행안됨
rwx rwx rwx (777)
=> 이러한 디렉터리의 권한은 디렉터리내에 혼돈을 일으키게 된다.
user, group, other 의 구분없이 디렉터리내에 파일들을 마음데로 삭제할 수 있기 때문이다.
그래서 stickybit를 사용한다.
게시판과 비슷한 계념이다. stickybit(1777일때)
게시판에서 글의 작성은 모두 할 수있다. => 파일및디렉터리 생성은 모두 가능
게시판에서 글의 수정은 작성자만 할 수있다. => 파일및디렉터리 수정은 작성자만 가능
게시판에서 글의 삭제는 작성자만 할 수있다. => 파일및디렉터리 삭제는 작성자만 가능
게시판에서 글의 보기는 모두 할 수있다. => 파일및디렉터리 관람은 모두 가능
(단, 관리자(해당 디렉터리의 소유자)는 모든 권한이 있다.)
stickybit를 사용하게 되면 group의 권한은 무시되고 user 와 other 의 권한만 인식을 한다.
chown
파일및디렉터리의 소유권자와 해당그룹을 바꿈
chown 바꿀소유자 파일및디렉터리 소유자만 변경
chown :바꿀그룹명 파일및디렉터리 그룹만 변경
chown 바꿀소유자:바꿀그룹명 파일및디렉터리 소유자와 그룹 모두 변경
지정한 파일이 실행시점부터 끝날때까지 지정한 파일의 uid 의 소유권을 갖게 됨.
지정한 파일에 실행권한이 있을경우 rwx => rws
지정한 파일에 실행권한이 없을경우 rw- => rwS 실행안됨
ex)
setgid (2000)# chmod 4755 /etc/passwd
$ passwd
- 이 시점부터 설정한 실행이 끝날때까지 uid의 소유를 갖음
주의! 위험한 시도
$ more /etc/shadow
/etc/shadow: Permission denied
# ls -l /bin/more -rwxr-xr-x 1 root root 30316 2008-09-25 22:08 /bin/more
# sudo chmod 4755 /bin/more
# ls -l /bin/more
-rwsr-xr-x 1 root root 30316 2008-09-25 22:08 /bin/more
$ more /etc/shadow
// 접근가능
지정한 파일이 실행 시점부터 끝날때까지 실행한파일의 gid 의 소유권을 갖게됨
지정한 파일에 실행권한이 있을경우 rwx => rws
지정한 파일에 실행권한이 없을경우 rw- => rwS 실행안됨
ex)stickybit
# find / -perm +4000 2 > /dev/null
검색경로: /
검색데이터: -perm +4000
어떻게: 2(출력?)
방향: > (왼쪽에서 오른쪽으로 보내라)
어디로: dev/null(쓰레기통?)
=> setuid 정보 보안설정 해줘야함
rwx rwx rwx (777)
=> 이러한 디렉터리의 권한은 디렉터리내에 혼돈을 일으키게 된다.
user, group, other 의 구분없이 디렉터리내에 파일들을 마음데로 삭제할 수 있기 때문이다.
그래서 stickybit를 사용한다.
# chmod 1777 /tmp=> 디렉터리내에서 other의 권한이 자신이 생성한 파일및디렉터리에 대해선 막강하나, 타인의해서 생성된 파일및디렉터리에 대해서는 권한이 없다. 단지 관람만 할 수 있을 뿐이다.
rwx rwx rwt (1777)
게시판과 비슷한 계념이다. stickybit(1777일때)
게시판에서 글의 작성은 모두 할 수있다. => 파일및디렉터리 생성은 모두 가능
게시판에서 글의 수정은 작성자만 할 수있다. => 파일및디렉터리 수정은 작성자만 가능
게시판에서 글의 삭제는 작성자만 할 수있다. => 파일및디렉터리 삭제는 작성자만 가능
게시판에서 글의 보기는 모두 할 수있다. => 파일및디렉터리 관람은 모두 가능
(단, 관리자(해당 디렉터리의 소유자)는 모든 권한이 있다.)
stickybit를 사용하게 되면 group의 권한은 무시되고 user 와 other 의 권한만 인식을 한다.
chown
파일및디렉터리의 소유권자와 해당그룹을 바꿈
chown 바꿀소유자 파일및디렉터리 소유자만 변경
chown :바꿀그룹명 파일및디렉터리 그룹만 변경
chown 바꿀소유자:바꿀그룹명 파일및디렉터리 소유자와 그룹 모두 변경
라벨:
LINUX,
LINUX COMMAND
2009년 10월 15일 목요일
07 - 리눅스 로그인 과정, 수동 계정 생성, 허가권과 소유권
계정 로그인 과정
수동으로 계정 만들기
허가권 부여 및 제거
/sbin/mingetty 에 의해서 로그인 폼이 나타난다.
/etc/inittab 의
'1 : 2345 : respawn : /sbin/mingetty tty1' 중
respawn 에 의해서 프로세스가 실행되었다가 죽어도 다시 살아나게 한다(절대 죽일 수 없음).
login : 계정 입력(아무 값이나 넣어도 다음 과정으로 넘어감)
password : 패스워드 입력
입력된 계정명은 /etc/passwd 에서 존재 여부 확인하고, 존재 한다면 입력된 암호를 MD5로 변경을 해서 /etc/shadow 와 비교한다.
맞으면 /bin/bash (/etc/passwd 의 7번 필드(쉘)) 를 실행하고 틀리면 다시 로그인 폼을 띄운다.
(입력된 계정명이 없을때에도 로그인폼을 다시 띄운다.)
/etc/passwd 에 아래와 같은 정보를 입력하고 저장.
계정명 : X : UID : GID : comment : home_dir : shell/etc/group 에 아래와 같은 정보를 입력하고 저장.
그룹명 : X : GID :
/etc/shadow 에 아래와 같은 정보를 입력하고 저장.
계정명 : $1$xxxxxxxx$~ : 최종암호변경일수(1970년1월1일기준) : 암호변경 최소일수 : 암호변경 유예기간 : 암호변경 경고일수 : 계정정지 사용여부 : 만기일사용여부 : 예약
* 여기서 $1$xxxxxxxx$~ 이것은
# perl -e 'print crypt("1234","\$1\솔트값\$"),"\n"' 해서 1234가 솔트값에 의해서 변경된 암호를 적어야함.
ex)
사용자 홈디렉터리의 뼈대 구성coderillla@localhost:~$ perl -e 'print crypt("1234","\$1\SaltValue\$"),"\n"'
$1CH2LCw5hraY => "1234" 라는 패스워드가 "SaltValue" 와 융화되어 만들어진 암호화된 값(?)
# cp /etc/skel /home_dir이제 다른 터미널로 이동해서 만든계정명으로 로그인하면 로긴이 되는데 root로 사용자의 홈디렉터리를 만들었을 경우에는 만든 계정의 홈디렉터리 소유권을 변경해주어야 한다.
PS : ) 수동으로 계정 생성하는 것은 비추이다. root 권한의 파일들을 수정하는 작업을 수행함으로써 자칫 잘못하다간 다른 계정의 정보를 날려 버릴 위험이 있다.
# chmod u(ser),+(추가)rwx,g(roup)-(삭제)rwx,o(rder)=(유지)rwx 파일경로위 방식 보다 절대모드 권장한다.
ex) # chmod u+rw-x,g+r-wx,o-rwx /etc/passwd
rwx(421)rwx(421)rwx(421) = 777권한 테스트 디렉터리 / 파일
rw-(420)r--(400)---(000) = 640
ex) # chmod 640 /etc/passwd
디렉터리
r - 디렉터리정보출력
w - 디렉터리내에서 파일을 쓰거나 삭제
x - 디렉터리진입
일반 파일
해당폴더의 권한이 rwx 일때
r - 파일을 출력한다. /삭제, 이동, 복사/
w - 출력한 파일을 입력(편집) 한다. /삭제, 이동/
실행 파일
해당디렉터리의 권한이 rwx 일때
r - 삭제, 이동, 복사
w - 삭제, 이동
x - 삭제, 이동, 실행
라벨:
LINUX,
LINUX COMMAND
06 - 리눅스 사용자 계정 관리
/etc/default/useradd (계정생성시 기본값을 설정하는 파일)
# chfn 계정명
# chfn 옵션 변경내용 계정명
/etc/group
# groups
GROUP=100/etc/login.defs (계정생성시 기본값을 설정하는 파일)
HOME=/home 홈디렉터리 경로
INACTIVE=-1 계정정지 사용여부 (-1사용안함, 0사용, 1기간연장)
EXPIRE= 만기일 사용여부(-1사용안함, 0사용)
SHELL=/bin/bash 사용할 쉘
SKEL=/etc/skel 홈디렉터리의 뼈대가 되는 파일
MAIL_DIR /var/spool/mail 메일이 보내지는 경로/etc/shadow (계정생성시 계정 정보가 추가되는 파일)
PASS_MAX_DAYS 99999 암호변경 유예기간, 입력된수일 동안 암호변경없이 사용가능
PASS_MIN_DAYS 0 암호변경 최소일수, 입력된수일 마다 변경가능
PASS_MIN_LEN 5 최소한 암호의 길이
PASS_WARN_AGE 7 암호변경 경고일수, 입력된수일 전에 경고
UID_MIN 500 최소 UID
UID_MAX 6000 최대 UID
GID_MIN 500 최소 GID
GID_MAX 60000 최대 GID
CREATE_HOME YES 홈디렉터리 생성여부
UMASK 076 사용자 디렉토리 생성시 UMASK 값을 설정한다. 701로 생성된다.
계정명 : $!$xxxxxxxx$~ : 최종암호변경일수(1970년1월1일기준) : 암호변경 최소일수 : 암호변경 유예기간 : 암호변경 경고일수 : 계정정지 사용여부 : 만기일사용여부 : 예약
chfn 사용자 comment 변경 명령
: 이름,회사,회사폰,집폰 :
-f fullname
-o office
-p office phone
-h home phone
# chfn 계정명
계정암호를 입력하고 문답식으로 변경
# chfn 옵션 변경내용 계정명
계정암호를 입력하면 선택한 옵션의 정보만 변경
/etc/group
그룹에관한 정보가있다.# groupadd 그룹명
-g 그룹의 고유ID지정# groupdel 그룹명
ex) groupadd -g 707 그룹명 UID값으로 707을 갖는 그룹명을 생성
* 현존하는 그룹은 생성 불가
지정한 그룹을 삭제 함.# groupmod 그룹명
*사용자가 포함되어있는 그룹은 삭제 불가
지정한 그룹의 속성을 변경 함.
-g 그룹의 고유ID변경
-n 그룹명 변경
ex) groupmod -g 변경값 그룹명
* 변경할 GID값이 다른 그룹의 GID값으로 존재하면 변경불가
useradd 기본값으로 계정을 생성하면 계정명과같은 그룹명이 생기는데 이 때,
userdel -r 계정명을 하면 그룹정보도 같이 지워진다.
하지만 기본값으로 계정을 생성하고 그룹에관한 정보를 조금이라도 수정하면, 이 때는 그룹과 계정을 별도로 관리해야한다.
즉, useradd 로 기본값으로 계정을 만들고 groupmod 로 기본값으로 생성된 그룹의 GID를 변경해도 /etc/passwd 는 변경된 것을 인식하지 않는다.
usermod 로 변경된 GID 값을 수정해줘야한다. (/etc/passwd의 GID값이 /etc/group 의 GID값과 같고
/etc/passwd의 계정명이 /etc/group 의 그룹명과 같으면 userdel 했을때 해당 계정명의 계정정보와 그룹정보가 삭제됨)
# groups
현재 접속한 계정의 그룹 정보 혹은 지정한 계정의 그룹 정보를 표시
계정명 : 소속그룹
라벨:
LINUX,
LINUX COMMAND
05 - 리눅스 사용자 추가
리눅스는 서버 등등의 서비스를 목적으로 하는 운영체제이기 때문에 계정생성이 필요하다.
계정을 생성하게되면
# useradd 계정명
위처럼 별개의 옵션없이 계정을 생성하게 되면 기본값으로 계정이 생성된다.
"/etc/passwd" 의 내용은 다음과 같으며,
기본값의 정보는
레드햇 - UID/GID
# passwd [엔터] 현재 접속중인 계정의 패스워드 변경
# passwd 계정명 지정한 계정의 패스워드 변경
root의 권한으로 패스워드를 최초로 입력할때는 조건없이 패스워드 지정이 가능하다. (경고메세지만나옴)
그러나, 일반 사용자가 암호를 입력할때는 다음 조건이 맞아야한다.
#userdel 계정명 계정에 관련된 파일의 정보만을 지운다. (홈디렉터리의 내용은 지우지않음)
#userdel -r 계정명 계정에 관련된 모든 정보를 지운다. (홈디렉터리의 내용도 지움)
/etc/passwd3개 파일에 계정명에 대한 정보가 추가되고
/etc/group
/etc/shadow
/home/계정명으로 계정에대한 사용자 홈디렉터리가 1개 생성된다.
# useradd 계정명
위처럼 별개의 옵션없이 계정을 생성하게 되면 기본값으로 계정이 생성된다.
"/etc/passwd" 의 내용은 다음과 같으며,
계정명 : X : UID : GID : comment : home_dir : shell기본값은 다음과 같다.
계정명:X:[이전에 생성된UID+1]:[UID와 동일]:[NULL]:[/home/계정명]:/bin/bash
기본값의 정보는
/etc/defualt/useradd위 두 파일과
/etc/login.defs
/etc/skel이라는 디렉터리가 갖고 있다.
0 관리자 계정/그룹
1~499 시스템관리계정/그룹500~6만 일반사용자계정/그룹
다른OS - UID/GID
0 관리자 계정/그룹[옵션]
1~99 시스템관리계정/그룹
100~ 일반사용자계정/그룹
-u uid(시스템이 판단하기위한 정보)* 옵션은 다중 사용가능하다.
-g gid(시스템이 판단하기위한 정보)GID는 사전에 등록된 값만을 지정할수있다.(새로운gid생성불가)
-c 설명
-d 홈디렉터리
-s 쉘
ex) # useradd -u 500 -c "test1" -d /home/test1 -s /bin/bash 계정명# passwd
# passwd [엔터] 현재 접속중인 계정의 패스워드 변경
# passwd 계정명 지정한 계정의 패스워드 변경
root의 권한으로 패스워드를 최초로 입력할때는 조건없이 패스워드 지정이 가능하다. (경고메세지만나옴)
그러나, 일반 사용자가 암호를 입력할때는 다음 조건이 맞아야한다.
- 길이제한 (7자이상)
- 간단한단어는 사용불가
- 등록된패스워드 사용불가
- 이전 패스워드 사용불가
# useradd
#userdel 계정명 계정에 관련된 파일의 정보만을 지운다. (홈디렉터리의 내용은 지우지않음)
#userdel -r 계정명 계정에 관련된 모든 정보를 지운다. (홈디렉터리의 내용도 지움)
# cat /etc/passwd | grep test
/etc/passwd라는 파일을 불러와서 test가 검색된 라인만 출력한다.
#finger 계정명1 계정명2 계정명3
계정에대한 정보를 출력한다.
라벨:
LINUX,
LINUX COMMAND
04 - 리눅스 기본 명령어 3: vi
VI editor
ctrl+z 최소화
# jobs 현재 작업중인 목록 표시
# fg 작업번호 작업번호 작업
대기/명령모드, 편집/추가모드, 라인입력 모드가 있으며, 모든명령은 대기/명령 모드에서 이루어진다.
[Esc]키를 이용하여 대기/명령 모드로 갈 수 있다.
[삽입 명령]
[파일관련]
[커서이동 및 화면이동]
[삭제(잘라내기)]
[복사]
[붙여넣기]
[바꾸기]
[검색]
[반복 및 취소]
[기타]
치환은 아래 사이트 참조
http://mwultong.blogspot.com/2006/09/vim-vi-gvim-find-and-replace.html
ctrl+z 최소화
# jobs 현재 작업중인 목록 표시
# fg 작업번호 작업번호 작업
대기/명령모드, 편집/추가모드, 라인입력 모드가 있으며, 모든명령은 대기/명령 모드에서 이루어진다.
[Esc]키를 이용하여 대기/명령 모드로 갈 수 있다.
[삽입 명령]
a append 현재 커서에서 추가
i insert 현재 커서에서 삽입
o open? 현재커서에서 아래로 행을 열고 입력
A APPEND 현재 커서가있는 행의 맨뒤에 추가
I INSERT 현재 커서가있는 행의 맨처음에 삽입
O OPEN? 현재 커서에서 위로 행을 열고 입력
[파일관련]
:e 열기
:q 종료
:q! 강제 종료(저장 안됨)
:w 저장
:wq 저장후 종료(:x, ZZ)
:wq! 강제 저장후 종료(관리자만 사용가능)
[커서이동 및 화면이동]
hjkl 좌하상우
e 다음단어의 마지막으로 이동
숫자+G 커서를 숫자에 해당하는 행으로 이동
Enter 커서를 다음라인의 첨으로
- 커서를 이전라인의 끝으로
0 커서를 해당라인의 첨으로
$ 커서를 해당라인의 끝으로
H 커서를 화면의 처음 HEAD
L 커서를 화면의 마지막LAST
ctrl+f 다음 화면으로 이동forword
ctrl+b이전 화면으로 이동b a c k
G 문서의 끝으로 이동
gg 문서의 첨으로 이동
[삭제(잘라내기)]
x 커서가 위치한 1 character 삭제(잘라내기)
dw 커서가 위치한 1 word 삭제(잘라내기)
dd 커서가 위치한 1 line 삭제(잘라내기)
숫자dd 입력한 숫자만큼의 line 삭제(잘라내기)
D 커서의 위치 부터 라인의 끝까지 삭제(잘라내기)
[복사]
yw 커서가 위치한 1 word 복사
yy 커서가 위치한 1 line 복사
숫자yy 커서가 위치한 곳에서부터 숫자만큼의 line 복사
[붙여넣기]
p 단어는 커서가 위치한 뒤에, 1개라인 이상은 커서가 위치한 아래에
P 단어는 커서가 위치한 앞에, 1개라인 이상은 커서가 위치한 위에
[바꾸기]
r 커서에 있는 1 character replace
R REPLACE 모드로 전환
s 커서에 있는 1 character 삭제후 입력모드로 전환
S 커서에 있는 STRING 삭제후 입력모드로 전환
[검색]
/ 검색어 검색어를 내림차순으로 검색
? 검색어 검색어를 오름차순으로 검색
n 해당검색기능의 흐름에맞게 계속 검색 (/검색어 사용후 n 하면 내림차순으로 계속검색)
N 해당검색기능의 역방향으로 계속 검색 (/검색어 사용후 N 하면 내림차순의역방향(오름차순)으로 계속검색)
g/검색어/s//대체어/g
검색어를 대체어로 바꿔라
처음에 g는 세로 행의 global
마지막 g는 가로 행의 global
앞뒤에 g가있으니 모는 검색어가 대체어로 바뀐다.
[반복 및 취소]
. 이전명령 반복
u 이전명령 취소
[기타]
:set nu 행의 행번호 출력VIM editor
:set nonu 해제
:set ts=숫자 탭의 간격설정(기본값 8)영구적으로 변하게 하려면 vi설정파일을 변경해야함
:! bash 잠시쉘로이동
[쉘상에서 명령]
vi -r 복구가능한 파일 보기
vi -r filename 파일복구
set -o vi [esc]키 입력후 쉘상에서 vi의 명령어 사용가능
visual기능이 있음
:vs 화면 분할(기본 세로)
ctrl+w+n 가로 분할
ctrl+ww 분할된 파일로 커서를 이동
:nohl 검색기능사용으로 표시된 검색어 헤드라인 해제
치환은 아래 사이트 참조
http://mwultong.blogspot.com/2006/09/vim-vi-gvim-find-and-replace.html
라벨:
LINUX,
LINUX COMMAND
피드 구독하기:
글 (Atom)