❶ 鍋囧傛妸涓涓猯inux鐨勭‖鐩樺嵏涓嬫潵鎸傝澆鍒板埆鐨刲inux鐢佃剳涓婂彲浠ョ洿鎺ュ圭‖鐩橀噷鐨勬暟鎹榪涜岃塊棶鍚楋紵錛
銆銆鎸備負絎浜岀‖鐩橈紝鍙浠ョ洿鎺ヨ繘琛屾暟鎹璁塊棶銆
銆銆浼佷笟銆佷釜浜虹殑閲嶈佹暟鎹錛岃侀噰鐢ㄥ姞瀵嗘柟娉曚繚瀛橈紝鎴栨嫹璐濅笌縐誨姩紜鐩銆乁鐩樹笂闈錛屽垹闄鐢佃剳紜鐩涓鐨勫唴瀹廣傚惁鍒欙紝浠諱綍浜洪兘鍙浠ヨ塊棶銆佹嫹璐濄
❷ linux Encryption HOWTO 怎樣製作一個加密的文件系統
設定分區
您的硬碟(hda)最少應該包含三個分區:
hda1:這個小的沒加密的分區 應該 要求 一個 口令 為了 載入 加密 的根文件系統
hda2:這個分區應該包含你的加密根文件系統;確保它足夠大
hda3:這個分區就是你的當前的GNU/Linux系統
在這時,hda1和hda2沒有使用。hda3就是當前你安裝的linux發行版; /usr 和/boot不能另外分區裝載。
你的分區分布也許會像下面這樣:
# fdisk -l /dev/hda
Disk /dev/hda: 255 heads, 63 sectors, 2432 cylinders
Units = cylinders of 16065 * 512 bytes
Device Boot Start End Blocks Id System
/dev/hda1 1 1 8001 83 Linux
/dev/hda2 2 263 2104515 83 Linux
/dev/hda3 264 525 2104515 83 Linux
/dev/hda4 526 2047 12225465 83 Linux
安裝 Linux-2.4.27
有兩種主要的方案可用於在內核上添加 loopback加密支持:cryptoloop 和 loop-AES。本文是基於loop-AES方案的,因為因為它的特點是非常快 和非常優化實行 of Rijndael 用匯編語言。如果你有一個IA-32 (x86) CPU ,它將為您提供 最大的性能。另外,還有一些關於cryptoloop的安全關切.
首先,下載和解壓 loop-AES 軟體包:
wget http://loop-aes.sourceforge.net/loop-AES/loop-AES-v2.2b.tar.bz2
tar -xvjf loop-AES-v2.2b.tar.bz2
然後再下載內核源代碼和補丁並為內核源碼打上補丁:
wget http://ftp.kernel.org/pub/linux/kernel/v2.4/linux-2.4.27.tar.bz2
tar -xvjf linux-2.4.27.tar.bz2
cd linux-2.4.27
rm include/linux/loop.h drivers/block/loop.c
patch -Np1 -i ../loop-AES-v2.2b/kernel-2.4.27.diff
設置鍵盤映射:
mpkeys | loadkeys -m - > drivers/char/defkeymap.c
下一步,配置你的內核;確定下面的選項你已經選上了:
make menuconfig
Block devices --->
<*> Loopback device support
[*] AES encrypted loop device support (NEW)
<*> RAM disk support
(4096) Default RAM disk size (NEW)
[*] Initial RAM disk (initrd) support
File systems --->
<*> Ext3 journalling file system support
<*> Second extended fs support
(important note: do not enable /dev file system support)
編譯並安裝內核:
make dep bzImage
make moles moles_install
cp arch/i386/boot/bzImage /boot/vmlinuz
如果你的啟動器是grub,更新你的 /boot/grub/menu.lst或 /boot/grub/grub.conf文件:
cat > /boot/grub/menu.lst << EOF
default 0
timeout 10
color green/black light-green/black
title Linux
root (hd0,2)
kernel /boot/vmlinuz ro root=/dev/hda3
EOF
啟動器是lilo的話就更新/etc/lilo.conf並運行 lilo :
cat > /etc/lilo.conf << EOF
lba32
boot=/dev/hda
prompt
timeout=100
image=/boot/vmlinuz
label=Linux
read-only
root=/dev/hda3
EOF
lilo
現在重啟你的系統。
安裝Linux 2.6.8.1
像之前所說的那樣進行前面的部分,所用補丁是loop-aes'kernel-2.6.8.1.diff 。要注意的是你要安裝mole-init-tools軟體包以便你的系統支持模塊。
安裝util-linux-2.12b
這個losetup程序包含在util-linux-2.12b軟體包中。必須打補丁並重新編譯以使它支持加密。下載,解壓並打為util-linux打補丁:
wget http://ftp.kernel.org/pub/linux/utils/util-linux/util-linux-2.12b.tar.bz2
tar -xvjf util-linux-2.12b.tar.bz2
cd util-linux-2.12b
patch -Np1 -i ../loop-AES-v2.2b/util-linux-2.12c.diff
使用少於20個字元的密碼,鍵入:
CFLAGS="-O2 -DLOOP_PASSword_MIN_LENGTH=8"; export CFLAGS
安全可能是你主要關心的一個問題。為此,請不要使您的密碼少於20個字元。數據保密性不是免費的, 你必須以『支付』的形式使用長的密碼。
使用root用戶編譯安裝 losetup程序:
./configure && make lib mount
mv -f /sbin/losetup /sbin/losetup~
rm -f /usr/share/man/man8/losetup.8*
cd mount
gzip losetup.8
cp losetup /sbin
cp losetup.8.gz /usr/share/man/man8/
創建加密的根文件系統
用隨機數據填充目標分區:
shred -n 1 -v /dev/hda2
安裝加密loopback設備:
losetup -e aes256 -S xxxxxx /dev/loop0 /dev/hda2
為防止比較快的字典攻擊,推薦加上-S xxxxxx 選項,"xxxxxx" 是你隨機選取的種子(例如,你可能選擇 "gPk4lA" )。 同樣,為了防止啟動時的鍵盤映射問題,在密碼中不要使用非ASCII字元(方言,等)。Diceware站點提供了一種簡單的的方法去創建強大並容易記住的密碼。
現在開始創建ext3文件系統:
mke2fs -j /dev/loop0
檢測你輸入的密碼是正確的:
losetup -d /dev/loop0
losetup -e aes256 -S xxxxxx /dev/loop0 /dev/hda2
mkdir /mnt/efs
mount /dev/loop0 /mnt/efs
你可以比較已加密的和未加密的數據:
xxd /dev/hda2 | less
xxd /dev/loop0 | less
現在是時候安裝你的加密的linux系統了。如果你使用的是GNU/Linux發行版(譬如Debian, Slackware, Gentoo, Mandrake, RedHat/Fedora, SuSE, etc.), 運行下面的命令:
cp -avx / /mnt/efs
如果你使用是Linux From Scratch手冊,照著lfs手冊上所說的那樣進行配置,但要做以下修改:
Chapter 6 - Installing util-linux:
在解壓源代碼後打上 loop-AES 的補丁。
Chapter 8 - Making the LFS system bootable:
指向我們的下一章(創建啟動設備)。
--------------------------------------------------------
創建啟動設備
創建ramdisk
在開始時,先用chroot命令進入你的加密分區並創建啟動設備的掛載點:
chroot /mnt/efs
mkdir /loader
然後創建 initial ramdisk (initrd),它將會在以後用到:
cd
dd if=/dev/zero of=initrd bs=1k count=4096
mke2fs -F initrd
mkdir ramdisk
mount -o loop initrd ramdisk
如果您使用 grsecurity . 您可能會收到"Permission denied"的提示錯誤的信息;如果是這樣你將必須在chroot命令之前運行 mount命令。
創建文件系統的目錄組織並復制所需要的的文件進去:
mkdir ramdisk/{bin,dev,lib,mnt,sbin}
cp /bin/{bash,mount} ramdisk/bin/
ln -s bash ramdisk/bin/sh
mknod -m 600 ramdisk/dev/console c 5 1
mknod -m 600 ramdisk/dev/hda2 b 3 2
mknod -m 600 ramdisk/dev/loop0 b 7 0
cp /lib/{ld-linux.so.2,libc.so.6,libdl.so.2} ramdisk/lib/
cp /lib/{libncurses.so.5,libtermcap.so.2} ramdisk/lib/
cp /sbin/{losetup,pivot_root} ramdisk/sbin/
如果你看到像"/lib/libncurses.so.5: No such file or directory","/lib/libtermcap.so.2: No such file or directory"的信息,這是正常的。bash 只要求用這兩個庫中的其中一個。 你可以檢測哪一個才是你實際所需要的:
ldd /bin/bash
編譯sleep程序,它將防止密碼提示被內核信息所淹沒(例如當usb設備注冊時)。
cat > sleep.c << "EOF"
#include <unistd.h>
#include <stdlib.h>
int main( int argc, char *argv[] )
{
if( argc == 2 )
sleep( atoi( argv[1] ) );
return( 0 );
}
EOF
gcc -s sleep.c -o ramdisk/bin/sleep
rm sleep.c
創建初始化腳本(不要忘記替換掉你之前報選的種子 "xxxxxx" ):
cat > ramdisk/sbin/init << "EOF"
#!/bin/sh
/bin/sleep 3
/sbin/losetup -e aes256 -S xxxxxx /dev/loop0 /dev/hda2
/bin/mount -r -n -t ext3 /dev/loop0 /mnt
while [ $? -ne 0 ]
do
/sbin/losetup -d /dev/loop0
/sbin/losetup -e aes256 -S xxxxxx /dev/loop0 /dev/hda2
/bin/mount -r -n -t ext3 /dev/loop0 /mnt
done
cd /mnt
/sbin/pivot_root . loader
exec /usr/sbin/chroot . /sbin/init
EOF
chmod 755 ramdisk/sbin/init
卸載 loopback 設備並壓縮initrd:
umount -d ramdisk
rmdir ramdisk
gzip initrd
mv initrd.gz /boot/
從CD-ROM啟動
我強烈建議您從只讀的媒體里啟動您的系統,例如可啟動的光碟。
下載並解壓syslinux:
wget http://ftp.kernel.org/pub/linux/utils/boot/syslinux/syslinux-2.10.tar.bz2
tar -xvjf syslinux-2.10.tar.bz2
配置isolinux:
mkdir bootcd
cp /boot/{vmlinuz,initrd.gz} syslinux-2.10/isolinux.bin bootcd
echo "DEFAULT /vmlinuz initrd=initrd.gz ro root=/dev/ram0" \
> bootcd/isolinux.cfg
把iso映像刻錄到可啟動光碟中:
mkisofs -o bootcd.iso -b isolinux.bin -c boot.cat \
-no-emul-boot -boot-load-size 4 -boot-info-table \
-J -hide-rr-moved -R bootcd/
cdrecord -dev 0,0,0 -speed 4 -v bootcd.iso
rm -rf bootcd{,.iso}
從硬碟啟動
當你丟失了你的可啟動光碟時,啟動分區就可以派上用場了。請記住hda1是個可寫分區,因而並不是很可靠的,只有當你遇到緊急的情況時才使用它!
創建並掛載ext2文件系統:
dd if=/dev/zero of=/dev/hda1 bs=8192
mke2fs /dev/hda1
mount /dev/hda1 /loader
復制內核和initial ramdisk:
cp /boot/{vmlinuz,initrd.gz} /loader
如果你使用的是grub :
mkdir /loader/boot
cp -av /boot/grub /loader/boot/
cat > /loader/boot/grub/menu.lst << EOF
default 0
timeout 10
color green/black light-green/black
title Linux
root (hd0,0)
kernel /vmlinuz ro root=/dev/ram0
initrd /initrd.gz
EOF
grub-install --root-directory=/loader /dev/hda
umount /loader
如果你使用lilo:
mkdir /loader/{boot,dev,etc}
cp /boot/boot.b /loader/boot/
mknod -m 600 /loader/dev/hda b 3 0
mknod -m 600 /loader/dev/hda1 b 3 1
mknod -m 600 /loader/dev/ram0 b 1 0
cat > /loader/etc/lilo.conf << EOF
lba32
boot=/dev/hda
prompt
timeout=100
image=/vmlinuz
label=Linux
initrd=/initrd.gz
read-only
root=/dev/ram0
EOF
lilo -r /loader
umount /loader
最後一步 仍然保持chroot的狀態,修改/etc/fstab增加以下選項:
/dev/loop0 / ext3 defaults 0 1
去除 /etc/mtab 並從chroot中退出。最後 ,運行 "umount -d /mnt/efs"命令然後重啟系統。 如果有某些錯誤發生,你仍然可以在 LILO提示中用"Linux root=/dev/hda3"來啟動你未加密的分區。
如果一切都順利,你就可以重新分區你的硬碟和繼續加密你的hda3或hda4分區。在下面的腳本中,我們假設 hda3將掛載swap設備,hda4掛載/home目錄;你應該先初始化這兩個分區:
shred -n 1 -v /dev/hda3
shred -n 1 -v /dev/hda4
losetup -e aes256 -S xxxxxx /dev/loop1 /dev/hda3
losetup -e aes256 -S xxxxxx /dev/loop2 /dev/hda4
mkswap /dev/loop1
mke2fs -j /dev/loop2
然後在系統的啟動目錄里創建一個腳本並更新 /etc/fstab:
cat > /etc/init.d/loop << "EOF"
#!/bin/sh
if [ "`/usr/bin/md5sum /dev/hda1`" != \
" /dev/hda1" ]
then
echo -n "WARNING! hda1 integrity verification FAILED - press enter."
read
fi
echo "1st password chosen above" | \
/sbin/losetup -p 0 -e aes256 -S xxxxxx /dev/loop1 /dev/hda3
echo "2nd password chosen above" | \
/sbin/losetup -p 0 -e aes256 -S xxxxxx /dev/loop2 /dev/hda4
/sbin/swapon /dev/loop1
for i in `seq 0 63`
do
echo -n -e "\33[10;10]\33[11;10]" > /dev/tty$i
done
EOF
chmod 700 /etc/init.d/loop
ln -s ../init.d/loop /etc/rcS.d/S00loop
vi /etc/fstab
...
/dev/loop2 /home ext3 defaults 0 2
❸ linux為什麼只有4個主分區
MBR(Master Boot Recorder)主要開機扇區,放置硬碟的信息。MBR 可以說是整個硬碟最重要的地方了,因為在 MBR 裡面記錄了兩個重要的東西,分別是:開機管理程序,與磁碟分區表 ( partition table )。所以我們所做的硬碟分區,也就是在修改partition table。
由於這個 MBR 區塊的容量有限,所以,當初設計的時候,就只有設計成 4 個分區紀錄(這個說法不太准確,下文有詳細說明),這些分區記錄就被稱為 Primary ( 主分區 ) 及 Extended ( 擴展分區 ) ,也就是說,一顆硬碟最多可以有 4 個 Primary + Extended 的扇區,其中,Extended 只能有一個,因此,你如果要分區成四塊磁碟分區的話,那麼最多就是可以:
P + P + P + P
P + P + P + E
的情況來分區了。需要特別留意的是,如果上面的情況中, 3P +E 只有三個『可用』的磁碟,如果要四個都『可用』,就得分區成 4P 了!( 因為 Extended 不能直接被使用,還需要分區成 Logical 才行)
思考一:如果我要將我的大硬碟暫時分區成四個 partition ,同時,還有其它的空間可以讓我在未來的時候進行規劃,那麼該如何分區?
由剛剛的說明,我們可以知道, Primary + Extended 最多隻能有四個 partition,而如果要超過 5 個 partition 的話,那麼就需要 Extended 的幫忙。因此,在這個例子中,我們千萬不能分區成四個 Primary 為什麼呢?假如您是一個 20 GB 的硬碟,而 4 個 primary 共用去了 15 GB ,您心想還有 5 GB 可以利用對吧?錯!剩下的 5 GB 完全不能使用,這是因為已經沒有多餘的 partition table 紀錄區可以記錄了,因此也就無法進行額外的分區,當然啰,空間也就被浪費掉了!因此,請千萬注意,如果您要分區超過 4 槽以上時,請記得一定要有 Extended 分區區,而且必須將所有剩下的空間都分配給 Extended ,然後再以 logical 的分區區來規劃 Extended 的空間。
思考二:我可不可以僅分區 1 個 Primary 與 1 個 Extended 呢?
當然可以!基本上, Logical 可以有 64 個,因此,你可以僅分區一個主分區,並且將所有其它的分區都給 Extended ,利用 Logical 分區來進行其它的 partition 規劃即可!
思考三:假如我的硬碟安裝在 IDE 1 的 Master ,並且我想要分區成 6 個可以使用的硬碟扇區,那麼每個磁碟在 Linux 底下的代號為何?
說明:
由於硬碟在 Primary + Extended 最多可以有四個,因此,在 Linux 底下,已經將 partition table 1 ~ 4 先留下來了,如果只用了 2 個 P + E 的話,那麼將會空出兩個 partition number 呦!再詳細的說明一下,假設我將四個 P + E 都用完了。其中Extended /dev/hda4包括三個邏輯分區。
實際可以使用的是 /dev/hda1, /dev/hda2, /dev/hda3, /dev/hda5, /dev/hda6, /dev/hda7 這六個 partition!至於 /dev/hda4 這個 Extended 扇區本身僅是用來規劃出讓 Logical 可以利用的磁碟空間而已!
那麼萬一我只想要分區 1 個 Primary 與 1 個 Extended 呢?
因為 1~4 號已經被預留下來了,所以第一個 Logical 的代號由 5 號開始計算起來,而後面在被規劃的,就以累加的方式增加磁碟代號啰!而其中 /dev/hda3, /dev/hda4 則是空的,被保留下來的代號。
這個問題,結合歷史來說會說得比較准確。為什麼最多隻可以分四個主要分區,並不是單由操作系統所決定的。
第一,為什麼一個扇區只有512位元組,為什麼不是1024位元組呢?
首先,我想說一個扇區是多少位元組是可以自己(硬碟生產廠家)定義的,可以是1024位元組的。所以說,一個扇區是512位元組並不是理論值,而是習慣值。也就是一個扇區的大小為512位元組對於硬碟的生產廠家來說都是習慣的這樣定義了,誰也不想更改這種習慣。
第二,硬碟的第一扇區可以分成三個部分:第一部分MBR,需要佔用446位元組,第二部分DPT,需要佔用64位元組,這是因為一個分區表需要佔用16位元組,64/16=4,所以剛好能存放四個分區的表,這就是為什麼只能分四個分區。還有兩個位元組就用來存放結束標志。這樣
446+64+2=512位元組。
對硬碟加密其實就是改寫最後兩個位元組的結束標志。
試想如果當初硬碟廠家將一個扇區設置成1024位元組,還是只能分四個分區嗎?邏輯驅動器也需要分區表,它存放在擴展分區的第一扇區,所以邏輯驅動器也不是隨便想分多少就分多少的。
❹ 虛擬機下linux磁碟加密後無法啟動
您好,你的問復題,我之前好像也遇到制過,以下是我原來的解決思路和方法,希望能幫助到你,若有錯誤,還望見諒!展開全部
LINUX輸入密碼不是輸入不進去,輸入完密碼後點回車鍵,系統自動接收你的密碼。只要繼續輸入沒有輸入錯誤的,最後輸入完按回車鍵就能自動進入用戶了。
他只是不顯示,不存在輸入不進去的情況。
(4)linux硬碟加密擴展閱讀:
切換用戶命令:#su 用戶名稱, 然後輸入password後輸入密碼就可以了
linux命令是對Linux系統進行管理的命令。對於Linux系統來說,無論是中央處理器、內存、磁碟驅動器、鍵盤、滑鼠,還是用戶等都是文件,Linux系統管理的命令是它正常運行的核心,與之前的DOS命令類似。linux命令在系統中有兩種類型:內置Shell命令和Linux命令。
cp個命令相當於dos下面的命令,具體用法是:cp –r源文件(source) 目的文件(target)
rm移除文件命令 非常感謝您的耐心觀看,如有幫助請採納,祝生活愉快!謝謝!