Category Archives: 리눅스서버관리

OpenSSH + chroot 환경에서의 필수 파일들

http://sourceforge.net/projects/chrootssh/ 에서 진행하는 SSH의 chroot 패치가 있다.

—————————–openssh-chrootssh.patch———————–
— session.c.org 2005-07-25 01:28:59.000000000 +0900
+++ session.c 2005-07-25 01:28:35.000000000 +0900
@@ -58,6 +58,8 @@
 #include “session.h”
 #include “monitor_wrap.h”
 
+#define CHROOT
+
 #if defined(KRB5) && defined(USE_AFS)
 #include <kafs.h>
 #endif
@@ -1258,6 +1260,12 @@
 void
 do_setusercontext(struct passwd *pw)
 {
+
+#ifdef CHROOT
+     char *user_dir;
+        char *new_root;
+#endif /* CHROOT */
+
 #ifndef HAVE_CYGWIN
  if (getuid() == 0 || geteuid() == 0)
 #endif /* HAVE_CYGWIN */
@@ -1315,6 +1323,27 @@
    restore_uid();
   }
 #endif
+
+#ifdef CHROOT
+  user_dir = xstrdup(pw->pw_dir);
+  new_root = user_dir + 1;
+
+     while((new_root = strchr(new_root, ‘.’)) != NULL) {
+    new_root–;
+    if(strncmp(new_root, “/./”, 3) == 0) {
+      *new_root = ‘\0’;
+      new_root += 2;
+  
+      if(chroot(user_dir) != 0)
+   fatal(“Couldn’t chroot to user’s directory %s”, user_dir);
+      pw->pw_dir = new_root;
+      break;
+    }
+  
+    new_root += 2;
+  }
+#endif /* CHROOT */
+    
 # ifdef USE_PAM
   /*
    * PAM credentials may take the form of supplementary groups.
———————————————————————————–


——————————openssh.spec.diff————————————
—- openssh.spec.org    2005-05-31 18:43:30.000000000 +0900
+++ openssh.spec    2005-07-25 22:34:42.000000000 +0900
@@ -13,7 +13,8 @@
 Patch1: openssh-rpm.patch
 Patch2: openssh-loginallow.patch
 Patch3: openssh-mCOOKIE.patch
 Patch4: openssh-multibyte.patch
+Patch5: openssh-chrootssh.patch
 Copyright: BSD
 Group: Applications/Internet
 BuildRoot: %{_tmppath}/openssh-%{version}-buildroot
@@ -90,6 +91,7 @@
 %patch2 -p1 -b .loginallow
 %patch3 -p1 -b .mCOOKIE
 %patch4 -p1 -b .multibyte
+%patch5 -p0 -b .chrootssh
 #autoconf


 %build
———————————————————————————–

매번 설치할때마다 중요한 파일 목록들을 까먹어 기록해 둔다.

bin:
bash cat chmod cp cut egrep gunzip gzip hostname
ls mkdir mv rm rmdir sh tar


dev:
null (mknod null c 1 3)
zero (mknod zero c 1 5)


etc:
DIR_COLORS DIR_COLORS.xterm bashrc group inputrc
passwd profile termcap vimrc


etc/profile.d:
colorls.sh lang.sh vim.sh


etc/sysconfig:
i18n


lib:
ld-2.2.4.so ld-linux.so.2 libc-2.2.4.so libc.so.6
libcrypt.so.1 libdl-2.2.4.so libdl.so.2 libm.so.6
libnsl.so.1 libnss_files.so.2 libpthread.so.0
libresolv.so.2 libtermcap.so.2 libtermcap.so.2.0.8
libutil.so.1


usr/bin:
dircolors du id mesg vim whoami


usr/lib:
libgpm.so.1 libncurses.so.5 libperl.so
libpython2.5.so.1.0


usr/share/terminfo:
*


usr/share/vim:
*

리눅스에서 HDD 추가하기


사용자 삽입 이미지이 작업은 2U Rackmount 서버기반의 SATA-II HDD로 이루어졌습니다.

오늘 서버에 하드디스크를 추가하는 작업이 생겨, 기록을 남겨둘까 한다.

알아서 서버에 HDD를 잘 설치하고 CMOS SETUP에 들어가서 하드디스크를 설정하도록 한다.

또는 RAID기반의 서버일경우 필요한 만큼의 HDD를 묶는다. 하나만 있다면 그냥 Stripe(0)으로 설정해 주면 된다.

리눅스로 부팅한다. 하드디스크는 순서대로 /dev/sda, /dev/sdb, /dev/sdc … 순으로 나열된다.

3번째 하드디스크(또는 3번째 RAID 구성 묶음)를 방금 추가하였다면 새로이 추가할 서버의 디바이스명은 /dev/sdc가 된다.

fdisk를 실행하여 하드디스크 파티션을 설정하자.

[code] # fdisk /dev/sdc[/code]

p를 눌러 현재의 파티션 구성을 볼수 있다. 새로운 하드이므로 아무것도 없다.
[code]Command (m for help): p

Disk /dev/sdc: 318.9 GB, 318999887872 bytes
255 heads, 63 sectors/track, 38782 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot      Start         End      Blocks   Id  System[/code]

n을 눌러 새로운 파티션을 생성하여 보자.
[code]Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-38782, default 1):
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-38782, default 38782):
Using default value 38782[/code]

파티션의 종류에 primary와 extended의 차이점에 대해서는 대부분이 알고 계실것이라 판단하고 넘어가겠다.

Partition number은 primary에는 총 4개의 파티션을 가질수 있으므로 몇번째로 설정할것인지에 대한것이고, 이후는 파티션의 사이즈에 대한 질문이다.
나는 하드 하나를 전체로 하여 하나의 파티션으로 잡을 계획을 가지고 있으므로 엔터만 눌러 디폴트설정을 따르도록 한다.

다시한번 p를 눌러 확인하여 보자, 방금전에 설정한 내용이 추가되어있다.
[code]Command (m for help): p

Disk /dev/sdc: 318.9 GB, 318999887872 bytes
255 heads, 63 sectors/track, 38782 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot      Start         End      Blocks   Id  System
/dev/sdc1               1       38782   311516383+  83  Linux[/code]

w를 눌러 저장하고 나가도록 하자.
[code]Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.[/code]

이제 mkfs로 포맷을 하도록 하자, 나는 ext3로 하도록 하겠다.
[code]# mkfs -t ext3 /dev/sdc1[/code]

또는 다음과 같은 명령어를 사용해도 된다.
[code]# mkfs.ext3 /dev/sdc1[/code]

이제 특정 디렉토리를 만들어 마운트를 해보도록 하자.
[code]# mkdir /opt
# mount /dev/sdc1 /opt[/code]

잘되는지 확인한후에 /etc/fstab에 추가하도록 하자.