서버를 세팅하던 도중에 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);
장혜식님.. 문의드릴게 있습니다.
Jail이라는것은 단순히 사용자가 / 시스템파일을 접근을 못하는걸루 알고있습니다.
제가 잘못알고 있는건가요.. 사용자 자체가 / 가되는건지요..
그래서 openssh에 chroot패치를 해야 제가 원하는 환경이 되는듯 한데요..
그게 맞는지요.. 또 jail_attach라는 명령어는 저한테 없네요.. Jail설치되었는데요.. 포트에도 없고.. 이 환경을 구축하려고하는데 많은 어려움이 있습니다.
Jail_attach의 좀더 구체적인 사용법이 궁금합니다. 이놈을 하면 chroot패치를 번거롭게 안해도 될것 같네요..
그리고 또.. jail사용자는 이상하게 sftp에 로그인이 안되는 문제가 발생하고 있습니다.
어떻게 해야하나요?