OpenSSH jail 패치

서버를 세팅하던 도중에 jail안에 사용자를 몽땅 다 넣어버리려고, chroot 패치를 할까 하다가, 요새 jail에서 jail_attach도 지원하고 하길래, 간단하게 jail 패치로 바꿔 봤습니다.

요렇게 하면 chroot보다 리소스 제한을 좀 더 섬세하게 할 수 있고, top나 ps같은 것도 jail 안의 것만 볼 수 있도록 제한됩니다. 이히히 🙂

--- crypto/openssh/session.c.orig	Tue Apr 20 18:46:40 2004
+++ crypto/openssh/session.c	Sun Apr  3 15:59:05 2005
@@ -1262,6 +1262,12 @@
 	}
 }
 
+#include <jail.h>
+
+#define JAIL 1
+#define JAILPREFIX "/thunderbluff/"
+#define JAILIDFILE "/var/run/jail_thunderbluff.id"
+
 /* Set login name, uid, gid, and groups. */
 void
 do_setusercontext(struct passwd *pw)
@@ -1275,6 +1281,25 @@
 		if (setpcred(pw->pw_name, (char **)NULL) == -1)
 			fatal("Failed to set process credentials");
 #endif /* HAVE_SETPCRED */
+
+#ifdef JAIL
+		if (strncmp(pw->pw_dir, JAILPREFIX "/",
+				sizeof(JAILPREFIX)) == 0) {
+			FILE *fp;
+			int jailid = -1;
+			fp = fopen(JAILIDFILE, "r");
+			if (fp == NULL)
+				fatal("Couldn't open " JAILIDFILE);
+			fscanf(fp, "%d", &jailid);
+			fclose(fp);
+			if (jailid == -1)
+				fatal("Invalid argument on " JAILIDFILE);
+			if (jail_attach(jailid) != 0)
+				fatal("Failed to get into the jail");
+			pw->pw_dir += sizeof(JAILPREFIX) - 1;
+		}
+#endif /* JAIL */
+
 #ifdef HAVE_LOGIN_CAP
 # ifdef __bsdi__
 		setpgid(0, 0);

2 thoughts on “OpenSSH jail 패치”

  1. 장혜식님.. 문의드릴게 있습니다.
    Jail이라는것은 단순히 사용자가 / 시스템파일을 접근을 못하는걸루 알고있습니다.
    제가 잘못알고 있는건가요.. 사용자 자체가 / 가되는건지요..
    그래서 openssh에 chroot패치를 해야 제가 원하는 환경이 되는듯 한데요..
    그게 맞는지요.. 또 jail_attach라는 명령어는 저한테 없네요.. Jail설치되었는데요.. 포트에도 없고.. 이 환경을 구축하려고하는데 많은 어려움이 있습니다.
    Jail_attach의 좀더 구체적인 사용법이 궁금합니다. 이놈을 하면 chroot패치를 번거롭게 안해도 될것 같네요..

  2. 그리고 또.. jail사용자는 이상하게 sftp에 로그인이 안되는 문제가 발생하고 있습니다.

    어떻게 해야하나요?

Comments are closed.