From 3b0b5d8914b48da2cde30a74504779c1a44acfa7 Mon Sep 17 00:00:00 2001 From: susmita2022khatun Date: Sun, 24 Dec 2023 19:02:57 +0530 Subject: [PATCH 1/2] new_change_task --- mini_project/logg_container/container | Bin 0 -> 80432 bytes mini_project/logg_container/container.cpp | 137 ++++++++++++++++++ .../logg_container/container_config.ini | 6 + mini_project/logg_container/container_log.txt | 4 + mini_project/logg_container/header.h | 20 +++ mini_project/logg_container/intro.txt | 3 + mini_project/logg_container/makefile | 3 + mini_project/logg_container/output.jpg | Bin 0 -> 43841 bytes mini_project/logg_container/parser.h | 32 ++++ .../network_container/container_network | Bin 0 -> 29184 bytes .../network_container/container_network.cpp | 80 ++++++++++ mini_project/network_container/intro.txt | 4 + mini_project/network_container/output1.jpg | Bin 0 -> 12603 bytes mini_project/network_container/output2.jpg | Bin 0 -> 55804 bytes 14 files changed, 289 insertions(+) create mode 100644 mini_project/logg_container/container create mode 100644 mini_project/logg_container/container.cpp create mode 100644 mini_project/logg_container/container_config.ini create mode 100644 mini_project/logg_container/container_log.txt create mode 100644 mini_project/logg_container/header.h create mode 100644 mini_project/logg_container/intro.txt create mode 100644 mini_project/logg_container/makefile create mode 100644 mini_project/logg_container/output.jpg create mode 100644 mini_project/logg_container/parser.h create mode 100644 mini_project/network_container/container_network create mode 100644 mini_project/network_container/container_network.cpp create mode 100644 mini_project/network_container/intro.txt create mode 100644 mini_project/network_container/output1.jpg create mode 100644 mini_project/network_container/output2.jpg diff --git a/mini_project/logg_container/container b/mini_project/logg_container/container new file mode 100644 index 0000000000000000000000000000000000000000..c8f10f1d652a6f55ec459f0f6a32b9df4382a59e GIT binary patch literal 80432 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 literal 0 HcmV?d00001 diff --git a/mini_project/logg_container/container.cpp b/mini_project/logg_container/container.cpp new file mode 100644 index 0000000..d57fa81 --- /dev/null +++ b/mini_project/logg_container/container.cpp @@ -0,0 +1,137 @@ +#include "parser.h" +#include +#include +#include +#include +#include +#include "header.h" + +using namespace std; + +ofstream logFile; // Declare a global file stream for logging + +// Function to log messages to a file +void logMessage(const char *message) { + time_t rawtime; + struct tm *timeinfo; + + time(&rawtime); + timeinfo = localtime(&rawtime); + + char buffer[80]; + strftime(buffer, sizeof(buffer), "%Y-%m-%d %H:%M:%S", timeinfo); + + logFile << "[" << buffer << "] " << message << endl; +} + +int isOK(int status, const char *msg) { + if (status == -1) { + perror(msg); + logMessage(msg); // Log the error + exit(EXIT_FAILURE); + } + return status; +} +int run(const char* name){ + char* args[] = {(char*)name,(char*)0}; + return execvp(name,args ); +} + +void WRITE(const char *path, const char *value) { + int fd = open(path, O_WRONLY | O_APPEND); + if (fd == -1) { + logMessage("Error in opening"); + exit(1); + } + ssize_t bytes = write(fd, value, strlen(value)); + if (bytes == -1) { + logMessage("Error in writing"); + exit(1); + } + close(fd); +} + +char *stack_mem() { + const int stacksize = 65 * 1024; + auto *stack = new (nothrow) char[stacksize]; + if (stack == nullptr) { + logMessage("Can't allocate memory"); + exit(EXIT_FAILURE); + } + return stack + stacksize; +} + +void cloneProcess(int (*function)(void *), int flags) { + auto pid = clone(function, stack_mem(), flags, 0); + isOK(pid, "Clone Process Error"); + wait(nullptr); +} + +void setupENV() { + clearenv(); + setenv("TERM", "xterm-256color", 0); + setenv("PATH", "/bin/:/sbin/:/usr/sbin", 0); +} + +void setupRoot(const char *folder) { + isOK(chroot(folder), " cant set root:"); + isOK(chdir("/"), "chdir: "); +} + +void setupjail() { + map c = parse("container_config.ini"); + const char *root = c["custom_root"].c_str(); + const char *cpuManage = c["cpu_manage"].c_str(); + const char *memory = c["memory"].c_str(); + const char *maxProcess = c["maxProcess"].c_str(); + const char *hostname = c["host_name"].c_str(); + WRITE(CGROUP_MEM, memory); + WRITE(CGROUP_CPU, cpuManage); + + logMessage("Setting up jail environment"); // Log setup information + + isOK(sethostname(hostname, strlen(hostname)), "hostname error"); + setupENV(); + setupRoot("./root"); +} + +int jail(void *args) { + setupjail(); + + mount("proc", "/proc", "proc", 0, 0); + pid_t shellPid = fork(); + isOK(shellPid, "can't create fork"); + if (shellPid == 0) { + logMessage("Executing /bin/bash"); // Log command execution + run("/bin/bash"); + exit(0); + } + + // wait till all child processes + while (wait(nullptr) > 0); + + // zombie check out + // unmount the procfs when all processes are finished + umount("proc"); + logMessage("Container execution completed"); // Log container completion + return EXIT_SUCCESS; +} + +void makeCgroup() { + WRITE(CGROUP_SUBTREE, "+cpu +memory +pids"); + mkdir(REQ_CGROUP, S_IRUSR | S_IWUSR); + const char *pid = to_string(getpid()).c_str(); + WRITE(concat(REQ_CGROUP, "/cgroup.procs"), pid); +} + +int main() { + logFile.open("container_log.txt", ios::out | ios::app); // Open log file + + logMessage(("Parent Pid: " + to_string(getpid())).c_str()); + + makeCgroup(); + cloneProcess(jail, CLONE_NEWPID | CLONE_NEWUTS | SIGCHLD); + + logFile.close(); // Close log file + return EXIT_SUCCESS; +} diff --git a/mini_project/logg_container/container_config.ini b/mini_project/logg_container/container_config.ini new file mode 100644 index 0000000..b6baaba --- /dev/null +++ b/mini_project/logg_container/container_config.ini @@ -0,0 +1,6 @@ +[container] +custom_root = ./root +maxProcess = 7 +cpu_manage = 20000 100000 +memory = 2G +host_name = container \ No newline at end of file diff --git a/mini_project/logg_container/container_log.txt b/mini_project/logg_container/container_log.txt new file mode 100644 index 0000000..31f1a0d --- /dev/null +++ b/mini_project/logg_container/container_log.txt @@ -0,0 +1,4 @@ +[2023-12-24 01:52:22] Parent Pid: 14597 +[2023-12-24 01:52:22] Setting up jail environment +[2023-12-23 20:22:22] Executing /bin/bash +[2023-12-23 20:22:33] Container execution completed diff --git a/mini_project/logg_container/header.h b/mini_project/logg_container/header.h new file mode 100644 index 0000000..887215f --- /dev/null +++ b/mini_project/logg_container/header.h @@ -0,0 +1,20 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#define concat(a,b) (a"" b) +#define CGROUP_MEM "/sys/fs/cgroup/cntr/memory.max" +#define CGROUP_CPU "/sys/fs/cgroup/cntr/cpu.max" +#define CGROUP_SUBTREE "/sys/fs/cgroup/cgroup.subtree_control" +#define REQ_CGROUP "/sys/fs/cgroup/cntr" \ No newline at end of file diff --git a/mini_project/logg_container/intro.txt b/mini_project/logg_container/intro.txt new file mode 100644 index 0000000..f0f3081 --- /dev/null +++ b/mini_project/logg_container/intro.txt @@ -0,0 +1,3 @@ +implementation of logging mechanisms within the container. +the image of output is provided in the folder itself , also the txt form i.e. container_log.txt +is obtained. \ No newline at end of file diff --git a/mini_project/logg_container/makefile b/mini_project/logg_container/makefile new file mode 100644 index 0000000..45cbe0c --- /dev/null +++ b/mini_project/logg_container/makefile @@ -0,0 +1,3 @@ +container: container.cpp + rm -f container + g++ container.cpp -o container diff --git a/mini_project/logg_container/output.jpg b/mini_project/logg_container/output.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d038d3075917cf2779f20f92e665b5f4337d993a GIT binary patch literal 43841 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 z zrx=8(9{hW8nurmpw(t<-@xCeSa&2w*37z$2`h)W-JavACnf`G~<27YDZXma_8vwPl zx*03~N>POBI>94e)oNz!q-?)aFjpHEdcuRoJE#bWqf>Cvow&Cr5{^5)Q>azL@=(m9$I3XO1D|LX1B5Kz5*EX* zX8;%eX;$y^f=mp6tTcuWsgx~1i%{%0Id~z`OXQj+_iapcZ3+tz5LrRI8uD29o_I`; ze8#_Bwbj{9ebkN(dHI6q!~IvUx;h8=4g}&O17bVcx$j?6 zc$}jiR*qVC z<61UtyjY82HP()zyUT{%?v~Rr>LoD8u{IOk>N9XVe5)S{HbrwQuy&v7X9MIkw6X@E z6`nt=knGC-{pmT5I1|#c4FO+_Bm@TlrATf@-s2f4e(IZI+zQEhu|`dZnTz2Xv+6Fr zXf*v|Dj|Y>h}Gzozi120FUt$~|Fz|(=X>UPK!-}ClDE0FF? zO_yu$U9ptkdcYy=)|zD1hn%szR{G zh?0Nst$;l|rhx8STz{!fu9)A>Mx4?^t?4Th{>;U?;rHZ2LW^R=i?!mszyCEMwfo$@ zwF=_nO86c&u|^#oS*UdBoEtZ|B}9S=mRm(XKfXB#3|;8+?WO+>ET5pc%>D$H5npvS zOt?c{C+RCM%e#FHb!D(GYOM0% zn+QdjL6`I7rh-R+Za#=h8Yy&VXF2E zSC@?oZXkrwbnbVU;p+B@0&VFqSFfUk02;Dx{jW#NE#m&Jo}VN>uShkx9L%q^Sq}Bu zoim$0f{-DIe@XUKOa3&o!n@OWdrwx71fwrJ!l$;rC~^rb54p|Jx{>NL4SGf4Eo&rD ztX~$!)}uA)^&+bLYZ1dTiEfP0PRr|qqGgUuW`3vL_hd(wq%IdOH0BN*z`4@3;{htG zUTH)UPk89?Hfg1XB^2@drvop<<28@g4`qIgXa>$ET%7f^#fE^jN0yf8$!mqj!nd4y_vQPpggz35fT04WWb4w7gH%dj(J7Y}I8Sp917wXUsk zu8^*XJ$AA5?QH{$7Y(-xuxJTfOiYA(%pLx5TN4QTCKSZZ4k6ieV`rdbIE@sH!YoE> zU%JZ>%u1^g-C9iXcI;y{p_l@E6V!{T>V20u6&?}!jVvsfHl3LmGm9m6FQbRbkC%P% zK+#{xY4tF^M0(UEj3j{^9AWL4lW6Snmpe&h0Adf1=Y7+1W(Y=$n88OIN;?}0Hg*1- z{_k22LV9*fgQr2hA!L>wcY8aS*9Nqw(}A zq#rySq*65lVGj>^Q1{w9^Ih#N z$Q;@3E?V`QS9w(}K~2u1up&v%+$ikFJ|R*0KP~7p&ZDmEoC|jT7gD1@$ts#i&cMM} z(C`W^>VRFyCqOtDhP#~J5k@$@wA{zW#4YHUOj!S-P*AnW8G-C(+63{RV3%#+w!B$3 z;pj4|KQ*XM&UZbsagkDDkac?CwzO6ib|UCq-#)(;U(qiu&9+t?iGQgebuF&)Bi6&%IJ>h qx4acgS;vU?4AdaieR^V|sd`I~pE@uviZ!B_@ohJ5e7f?-+ +#include +#include +#include + +using namespace std; + +map parse(const string& filename){ + map config; + ifstream file(filename); + if(!file.is_open()){ + cerr<<"Error in opening of config file"< c=parse("container_config.ini"); + const char* root = c["custom_root"].c_str(); + const char* cpuManage = c["cpu_manage"].c_str(); + const char* memory = c["memory"].c_str(); + const char* maxProcess = c["maxProcess"].c_str(); + const char* hostname = c["host_name"].c_str(); + WRITE(CGROUP_MEM,memory); + WRITE(CGROUP_CPU,cpuManage); + WRITE(concat(REQ_CGROUP,"/pid.max"),maxProcess); + + isOK(sethostname(hostname,strlen(hostname)),"hostname error"); + setupENV(); + + + + + + +} +int childProcess(void *args){ + setupChild(); + return 0; +} +void makeCgroup(){ + WRITE(CGROUP_SUBTREE,"+cpu +memory +pids"); + mkdir(REQ_CGROUP,S_IRUSR | S_IWUSR); + const char* pid = to_string(getpid()).c_str(); + // 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 +#include +#include #include "header.h" +using namespace std; int isOK(int status,const char* msg){ @@ -10,16 +14,15 @@ int isOK(int status,const char* msg){ return status; } - void WRITE(const char* path,const char* value){ int fd = open(path,O_WRONLY | O_APPEND); if(fd == -1){ - std::cout<<"Error in opening\n"; + cout<<"Error in opening\n"; exit(1); } ssize_t bytes = write(fd,value,strlen(value)); if(bytes==-1){ - std::cout<<"error in writing\n"; + cout<<"error in writing\n"; exit(1); } close(fd); @@ -28,42 +31,36 @@ void WRITE(const char* path,const char* value){ //custom run function for the shell int run(const char* name){ - char* _args[] = {(char*) name, (char*)0}; - return execvp(name, _args); + char* args[] = {(char*)name,(char*)0}; + return execvp(name,args ); } - - char* stack_mem(){ const int stacksize = 65*1024; auto *stack = new (nothrow) char[stacksize]; if(stack==nullptr){ - std::cout<<"Can't allocate memory"; + cout<<"Can't allocate memory"; exit(EXIT_FAILURE); } return stack+stacksize; } - - void cloneProcess(int (*function)(void*),int flags){ auto pid= clone(function,stack_mem(),flags,0); isOK(pid,"Clone Process Error"); wait(nullptr); -} - +} void setupENV(){ clearenv(); setenv("TERM","xterm-256color",0); setenv("PATH","/bin/:/sbin/:/usr/sbin",0); } - void setupRoot(const char* folder){ - isOK(chroot(folder),"cant't set root: "); + isOK(chroot(folder), " cant set root:"); isOK(chdir("/"),"chdir: "); -} -void setupJail(){ +} +void setupjail(){ map c=parse("container_config.ini"); const char* root = c["custom_root"].c_str(); const char* cpuManage = c["cpu_manage"].c_str(); @@ -72,7 +69,7 @@ void setupJail(){ const char* hostname = c["host_name"].c_str(); WRITE(CGROUP_MEM,memory); WRITE(CGROUP_CPU,cpuManage); - WRITE(concat(REQ_CGROUP,"/pid.max"),maxProcess); + //WRITE(concat(REQ_CGROUP,"/pid.max"),maxProcess); isOK(sethostname(hostname,strlen(hostname)),"hostname error"); setupENV(); @@ -80,47 +77,38 @@ void setupJail(){ } - int jail(void *args){ - setupJail(); + setupjail(); - //attach the procfs to our main fail hierarchy + //attach the procfs to our main file heirarchy mount("proc","/proc","proc",0,0); - pid_t shellPid = fork(); - isOK(shellPid,"can't create fork: "); - if(shellPid == 0) - { + isOK(shellPid, "cant create fork"); + if(shellPid == 0){ run("/bin/bash"); exit(0); } - //wait till all child processes are finished - while(wait(nullptr)>0); + //wait till all chid processes + while(wait(nullptr)>0); + //zombie check out //unmount the procfs when all processes are finished umount("proc"); - return EXIT_SUCCESS; } - - void makeCgroup(){ WRITE(CGROUP_SUBTREE,"+cpu +memory +pids"); mkdir(REQ_CGROUP,S_IRUSR | S_IWUSR); const char* pid = to_string(getpid()).c_str(); - std::cout<<"Child Pid: "< -#include -#include -#include #include -#include -#include -#include -#include #include -#include -#include +#include +#include +#include #define concat(a,b) (a"" b) #define CGROUP_MEM "/sys/fs/cgroup/cntr/memory.max" #define CGROUP_CPU "/sys/fs/cgroup/cntr/cpu.max" diff --git a/makefile b/day8/makefile similarity index 98% rename from makefile rename to day8/makefile index ddbf3cf..45cbe0c 100644 --- a/makefile +++ b/day8/makefile @@ -1,4 +1,3 @@ container: container.cpp rm -f container g++ container.cpp -o container - diff --git a/day8/parser.h b/day8/parser.h new file mode 100644 index 0000000..edc600f --- /dev/null +++ b/day8/parser.h @@ -0,0 +1,32 @@ +#include +#include +#include +#include + +using namespace std; + +map parse(const string& filename){ + map config; + ifstream file(filename); + if(!file.is_open()){ + cerr<<"Error in opening of config file"<