서버를 세팅하던 도중에 jail안에 사용자를 몽땅 다 넣어버리려고, chroot 패치를 할까 하다가, 요새 jail에서 jail_attach도 지원하고 하길래, 간단하게 jail 패치로 바꿔 봤습니다.
요렇게 하면 chroot보다 리소스 제한을 좀 더 섬세하게 할 수 있고, top나 ps같은 것도 jail 안의 것만 볼 수 있도록 제한됩니다. 이히히 🙂
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
--- 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에 로그인이 안되는 문제가 발생하고 있습니다.
어떻게 해야하나요?