| [9] | 1 | de - A Minix Disk Editor | 
|---|
|  | 2 |  | 
|---|
|  | 3 | Terrence W. Holm, Jan. 1989 | 
|---|
|  | 4 |  | 
|---|
|  | 5 |  | 
|---|
|  | 6 | INTRODUCTION | 
|---|
|  | 7 |  | 
|---|
|  | 8 | The de(1) disk editor allows a system administrator to | 
|---|
|  | 9 | look at and modify a Minix file system device. Commands | 
|---|
|  | 10 | allow movement throughout a file system device, displaying | 
|---|
|  | 11 | information in a couple of formats, writing blocks from | 
|---|
|  | 12 | the device onto another file, and rewriting words on the | 
|---|
|  | 13 | disk. | 
|---|
|  | 14 |  | 
|---|
|  | 15 | A few changes to the Minix file system aid recovering files. | 
|---|
|  | 16 | I-node numbers are retained in directory entries now (they | 
|---|
|  | 17 | get moved to the end). And all the i-node information is not | 
|---|
|  | 18 | zeroed-out when a file is unlinked. So, after a file is | 
|---|
|  | 19 | accidently rm(1)'ed, you can find the old i-node, and then | 
|---|
|  | 20 | manually (or automatically) go to each of the freed blocks | 
|---|
|  | 21 | and write them to a new file. | 
|---|
|  | 22 |  | 
|---|
|  | 23 |  | 
|---|
|  | 24 | USES FOR THE DISK EDITOR | 
|---|
|  | 25 |  | 
|---|
|  | 26 | 1)  EDUCATION. Students can look at a file system in | 
|---|
|  | 27 | a painless manner. For example you don't have to | 
|---|
|  | 28 | use od(1) to look at the zone numbers in i-nodes. | 
|---|
|  | 29 |  | 
|---|
|  | 30 | A simple assignment is to change the size of an un-mounted | 
|---|
|  | 31 | floppy disk file system from 360 to 300 blocks. (A more | 
|---|
|  | 32 | difficult assignment is to explain why this works, even | 
|---|
|  | 33 | though fsck(1) and df(1) do not report the correct number | 
|---|
|  | 34 | of free blocks. :-) | 
|---|
|  | 35 |  | 
|---|
|  | 36 | 2)  ADMINISTRATION. You can visually check inconsistencies | 
|---|
|  | 37 | reported by fsck(1) before letting fsck(1) fix them. | 
|---|
|  | 38 | You can change any word on the disk, this greatly simplifies | 
|---|
|  | 39 | editing file system information. For example, changing the | 
|---|
|  | 40 | size of a block special device is actually fun, no more | 
|---|
|  | 41 | "blind" writing to your partitions. | 
|---|
|  | 42 |  | 
|---|
|  | 43 | Bit maps can be displayed with 2048 "bits" per screen, | 
|---|
|  | 44 | (on the IBM/PC console), see how your zones are allocated! | 
|---|
|  | 45 |  | 
|---|
|  | 46 | 3)  RECOVERING LOST FILES. You can search a disk for an ASCII | 
|---|
|  | 47 | string, once found, the block can be written out to a file. | 
|---|
|  | 48 |  | 
|---|
|  | 49 | A one line change to fs/path.c allows users to get the i-node | 
|---|
|  | 50 | number for a file after it has been removed from a directory. | 
|---|
|  | 51 |  | 
|---|
|  | 52 | Another couple lines changed in the file system keep the | 
|---|
|  | 53 | i-node information available until the i-node is reused | 
|---|
|  | 54 | (normally this information is zeroed out when an i-node is | 
|---|
|  | 55 | released.) This allows a de(1) user to go to a released | 
|---|
|  | 56 | i-node, get all the block numbers, go to these blocks and | 
|---|
|  | 57 | write them back to a new file. | 
|---|
|  | 58 |  | 
|---|
|  | 59 | The whole recovery process is automated by running "de -r file". | 
|---|
|  | 60 | So, IF a file is unlink(2)'ed (eg. "rm file"), AND IF no one | 
|---|
|  | 61 | allocates a new i-node or block in the mean-time, THEN you | 
|---|
|  | 62 | can recover the file. | 
|---|
|  | 63 |  | 
|---|
|  | 64 |  | 
|---|
|  | 65 | RECOVERY SECURITY | 
|---|
|  | 66 |  | 
|---|
|  | 67 | Normally Minix hard disk partitions are r/w only by the super-user, | 
|---|
|  | 68 | and floppy disks are r/w by anyone. This means that only "root" | 
|---|
|  | 69 | can look at hard disk partitions, but others can use de(1) to play | 
|---|
|  | 70 | with their floppy disks. | 
|---|
|  | 71 |  | 
|---|
|  | 72 | When recovering files ("de -r file"), a user requires access to | 
|---|
|  | 73 | the major file system partitions. This can be done by: | 
|---|
|  | 74 |  | 
|---|
|  | 75 | (a) Give everyone access to the hard disks. DON'T DO THIS, it | 
|---|
|  | 76 | defeats all the file system protection we already have. | 
|---|
|  | 77 |  | 
|---|
|  | 78 | (b) Make de(1) set-uid "root". This is the way to go, IF you | 
|---|
|  | 79 | are running a Minix system that has NO ACCESS from the | 
|---|
|  | 80 | outside. This allows anyone to execute "de -r file", but only | 
|---|
|  | 81 | root to use "de /dev/hd3". De(1) does some checking when | 
|---|
|  | 82 | retrieving lost blocks, eg. making sure they really are | 
|---|
|  | 83 | free blocks and making sure the user owned the i-node. | 
|---|
|  | 84 | BUT, file system information has been lost when the file | 
|---|
|  | 85 | was unlink(2)'ed, so de(1) can not be 100% sure that a | 
|---|
|  | 86 | recovered block really belonged to the user. THIS IS A | 
|---|
|  | 87 | SECURITY HOLE. [Since the only access to my machine is from | 
|---|
|  | 88 | observable terminals and their associated humans, I run | 
|---|
|  | 89 | de(1) as set-uid root.] | 
|---|
|  | 90 |  | 
|---|
|  | 91 | (c) Keep the disks rw-------, and don't set-uid de(1). This | 
|---|
|  | 92 | means that only the super-user can recover lost files. | 
|---|
|  | 93 | So, if you accidently "rm", you must tell the system | 
|---|
|  | 94 | administrator to "su" and recover your file, (be sure to | 
|---|
|  | 95 | inform the other users to stop whatever they are doing | 
|---|
|  | 96 | until the file is restored). | 
|---|
|  | 97 |  | 
|---|
|  | 98 |  | 
|---|
|  | 99 | INSTALLATION | 
|---|
|  | 100 |  | 
|---|
|  | 101 | - Install de.1 in /usr/man/cat1. | 
|---|
|  | 102 |  | 
|---|
|  | 103 | - Install the files: Makefile, README, de.h, de.c, de_stdin.c, | 
|---|
|  | 104 | de_stdout.c, de_diskio.c and de_recover.c in commands/de. | 
|---|
|  | 105 | Add -F and -T. to the Makefile, if necessary. | 
|---|
|  | 106 |  | 
|---|
|  | 107 | - "make" de(1). If a header file is not found, don't worry: | 
|---|
|  | 108 | You probably have it somewhere, just link it to what de(1) | 
|---|
|  | 109 | is looking for. This program also requires the subroutine | 
|---|
|  | 110 | tolower(3), see EFTH MINIX report #50, if you don't have it. | 
|---|
|  | 111 |  | 
|---|
|  | 112 | - Do you really want set-uid root on de? | 
|---|
|  | 113 |  | 
|---|
|  | 114 | - Patch the files fs/path.c, fs/link.c and fs/open.c. If | 
|---|
|  | 115 | you don't patch the file system then the recover option | 
|---|
|  | 116 | "-r" and associated commands ('x' and 'X') will not work, | 
|---|
|  | 117 | but de(1) is still functional and useful. | 
|---|
|  | 118 |  | 
|---|
|  | 119 | - "make" a new fs, using -DRECOVER. Rebuild a boot diskette. | 
|---|
|  | 120 |  | 
|---|
|  | 121 |  | 
|---|
|  | 122 | USING DE(1) FOR THE FIRST TIME | 
|---|
|  | 123 |  | 
|---|
|  | 124 | De(1) starts up in "word" mode at block 0 of the specified | 
|---|
|  | 125 | device. Hit the PGDN (or space bar) a few times, observing | 
|---|
|  | 126 | all the information on the screen. Each PGUP/PGDN moves to | 
|---|
|  | 127 | the next 1024 byte block, (de(1) only knows about 1 block per | 
|---|
|  | 128 | zone file systems). Note that "word" mode only displays 32 | 
|---|
|  | 129 | bytes at a time, so you are only observing the first 32 bytes | 
|---|
|  | 130 | in the first few blocks when you skip using PGDN. | 
|---|
|  | 131 |  | 
|---|
|  | 132 | Now go back to block 3, (zone bit map), using "g 3 ENTER". | 
|---|
|  | 133 | Change to "map" mode "v m", and then use the down arrow key | 
|---|
|  | 134 | to check each 2 Megs in the zone bit map. | 
|---|
|  | 135 |  | 
|---|
|  | 136 | Now change to "block" mode using "v b". And go to some data | 
|---|
|  | 137 | block, eg. "g 1000 ENTER". Use PGUP/PGDN to see what data | 
|---|
|  | 138 | is in each nearby block. | 
|---|
|  | 139 |  | 
|---|
|  | 140 | Remember 'h' gives you a help page. | 
|---|
|  | 141 |  | 
|---|
|  | 142 | Try some more commands, for example: 'END', 'I', '/'. | 
|---|
|  | 143 | (Note: searching through a whole disk under Minix takes a | 
|---|
|  | 144 | long time: 30-60 seconds per megabyte, depending on your | 
|---|
|  | 145 | machine, drive and controller, [Minix is embarrassingly slow].) | 
|---|
|  | 146 |  | 
|---|
|  | 147 | Don't worry about looking at a mounted device, you must specify | 
|---|
|  | 148 | the "-w" option before the 's' command is operational, and | 
|---|
|  | 149 | this command is the only one which will try to modify the | 
|---|
|  | 150 | contents of the device. | 
|---|
|  | 151 |  | 
|---|
|  | 152 |  | 
|---|
|  | 153 | MINIX-ST | 
|---|
|  | 154 |  | 
|---|
|  | 155 | Please contact me if you are interesting in attempting a port | 
|---|
|  | 156 | to MINIX-ST. | 
|---|