PAM登陆与加密文件系统:保护你的照片

系统安装、升级讨论
版面规则
我们都知道新人的确很菜,也喜欢抱怨,并且带有浓厚的Windows习惯,但既然在这里询问,我们就应该有责任帮助他们解决问题,而不是直接泼冷水、简单的否定或发表对解决问题没有任何帮助的帖子。乐于分享,以人为本,这正是Ubuntu的精神所在。
回复
头像
windwiny
帖子: 2254
注册时间: 2007-03-13 17:26

PAM登陆与加密文件系统:保护你的照片

#1

帖子 windwiny » 2008-04-21 15:42

#!/usr/bin/gvim
#
# PAM认证与加密文件系统
# http://www.linuxsir.org/bbs/showthread.php?t=211899
# http://www.ubuntufans.com.cn/html/02/n-102.html
# http://forums.gentoo.org/viewtopic-t-27 ... eb524406d5

*. PAM 介绍: 查看以上链接

*. 在 ubuntu 8.04 里安装

代码: 全选

	apt-get install libpam-mount openssl dmsetup cryptsetup
1. 产生随机字符串

代码: 全选

	KEY=`tr -cd [:graph:] < /dev/urandom | head -c 79`
2. 加密生成密码文件,输入两次密码, 一般用 用户登录密码

代码: 全选

	echo $KEY | openssl aes-256-ecb > /home/user1_dc.key

3. 格式化分区 /dev/sdb5 (!注意查看自己的分区名)

代码: 全选

	openssl aes-256-ecb -d -in /home/user1_dc.key | cryptsetup -v -c aes -s 256 luksFormat /dev/sdb5
	## 也可以用文件代替
	# dd if=/dev/zero of=/home/user1_dc.img bs=1M count=100
	# losetup /dev/loop0 /home/user1_dc.img
	# openssl aes-256-ecb -d -in /home/user1_dc.key | cryptsetup -v -c aes -s 256 luksFormat /dev/loop0
4. 打开分区

代码: 全选

	openssl aes-256-ecb -d -in /home/user1_dc.key | cryptsetup luksOpen /dev/sdb5 user1_dc
	# openssl aes-256-ecb -d -in /home/user1_dc.key | cryptsetup luksOpen /dev/loop0 user1_dc

5. 创建FS (注意:设备是 /dev/mapper/ 里的,不是 /dev/sdb5 或 /dev/loop0)

代码: 全选

	mkfs.reiserfs /dev/mapper/user1_dc
6. mount

代码: 全选

	mkdir /media/test
	mount /dev/mapper/user1_dc /media/test
	chown user1: /media/test -R
	echo "TEST" > /media/test/testfile1
	umount /dev/mapper/user1_dc
7. 关闭

代码: 全选

	cryptsetup luksClose user1_dc
	# losetup -d /dev/loop0

8. 设置
libpam-mount 包带一个 /etc/pam.d/common-pammount 配置文件,
在 /etc/pam.d/ 里的 login gdm 等与用户登录有关的程序里加上一行 @include common-pammount

代码: 全选

	echo "@include common-pammount" >> /etc/pam.d/login
	echo "@include common-pammount" >> /etc/pam.d/gdm
不要加到 sshd 和 su 里,因为这样的登录在退出时不会自动卸载卷(后有说明)
更不要加到 common-auth 和 common-session 里,以 common- 开头的认证配置几乎每个服务的配置都会包含它们

另外,在安装 pam-mount 时会提示是否转换 /etc/security/pam_mount.conf 文件格式之类的
*) 如果有 /etc/security/pam_mount.conf.xml ,则在文件尾部(</pam_mount>)之前加入
在 /etc/security/pam_mount.conf.xml 文件里有很多示例

代码: 全选

    <volume
        user="user1"
        invert="0"
        fstype="crypt"
        path="/dev/sdb5"
        mountpoint="/home/CRYPTO_d1"
        options="user,exec"
        fskeycipher="aes-256-ecb"
        fskeypath="/home/user1_dc.key" />
    <!--
    <volume
        user="user1"
        invert="0"
        fstype="crypt"
        path="/home/user1_dc.img"
        mountpoint="/home/CRYPTO_d1"
        options="loop,user,exec"
        fskeycipher="aes-256-ecb"
        fskeypath="/home/user1_dc.key" />
    -->
    <!-- invert为0时,只有user选项中列出的用户登录时挂载这个卷,为1时表示除了user里列出的用户外登陆时都执行挂载 -->
*) 如果是 /etc/security/pam_mount.conf ,则在文件最后加入

代码: 全选

# volume <user> <type> <server> <volume> <mount point>
#        <mount options> <fs key cipher> <fs key path>
volume user1 crypt - /dev/sdb5 /home/CRYPTO_d1 user,exec aes-256-ecb  /home/user1_dc.key
#volume user1 crypt - /home/user1_dc.img /home/CRYPTO_d1 loop,user,exec aes-256-ecb  /home/user1_dc.key

**. pam_mount 工作流程:
用户执行如登录程序登录系统时,pam-mount模块根据设置判断当前用户是否要执行 mount 某个卷,
如果是就根据设置用用户登陆口令解密 /home/user1_dc.key 文件,得到 aes 密码,使用 aes 密码打开分区和挂载
gdm 登录时可能会提示输入两次密码,一次是登录密码,一次是解密 /home/user1_dc.key 的密码

**. 问题:可能还有设置选项没有设置
*) 如果在 /etc/pam.d/common-auth 里添加了 auth optional pam_mount.so use_first_pass
在 /etc/pam.d/common-session 里添加 session optional pam_mount.so
或者在 /etc/pam.d/su 和 /etc/pam.d/sshd 里添加了 @include common-pammount
在 ssh 登录以及用 su 切换用户都会挂载分区,但退出时不会自动卸载
相关信息: 设置 /etc/security/pam_mount.conf.xml 里 debug=1 后,用户登录退出后查看 /var/log/auth.log
查看 pmvarrun 程序及 /var/run/pam_mount/ 下以用户名为名字的文件
ssh 登陆及 su 切换用户的用户在 logout/exit 时,pam_mount 的日志显示没有权限 umount ?? 分区
https://bugs.launchpad.net/ubuntu/+sour ... bug/117736
https://lists.sourceforge.net/lists/lis ... mount-user
opensuse 10.3 的能 su ,exit 能自动卸载,ssh 登录不自动挂载,没有仔细对比
*) 如果配置里设置了user选项并且invert值为1,在user中未列出的不同用户如果密码相同,即密码能用来解密 /home/user1_dc.key 文件,则都会挂载分区!!
*) 在开启 selinux 后,cryptsetup 格式化设备,登录挂载设备都非常慢
*)

**. 其它:
*) 在一个单独分区加密用户数据,设置 mountpoint="~" 挂载点为用户家目录,把密码文件存优盘随身携带,理论上别人得了你的硬盘也看不到里面的艳照了(如果有的话) zz ;-)
*) 登陆时如果挂载失败,需要手工挂载,执行 4, 6, 7 步骤
*) 用户更改了登录密码,也应该更改 aes 密码文件的解密密码。

代码: 全选

	mv /home/user1_dc.key /home/user1_dc_old.key
	KEY=`openssl aes-256-ecb -d -in /home/user1_dc_old.key`
	echo $KEY | openssl aes-256-ecb > /home/user1_dc.key
注意不同时间执行同样加密命令,使用同样加密口令生成的密码文件也是不一样的。
密码文件应该多做几个备份,丢失了密码文件和忘记了解密 /home/user1_dc.key 的口令,那应该是一件很悲惨的事。。。 ^&^

## 如果你的电脑真的很重要,或者以为自己是一个人物,系统的根分区、交换分区都能加密,参考:
# 加密文件系统
# http://www.hacker.com.cn/article/view_13676_4.html
# http://wiki.ubuntu.org.cn/UbuntuHelp:En ... stemHowto3
# http://wiki.ubuntu.org.cn/UbuntuHelp:En ... mHowtoEdgy
# http://www.debian.org/releases/stable/s ... html.zh_CN


# ==============================================================================
头像
BigSnake.NET
帖子: 12522
注册时间: 2006-07-02 11:16
来自: 廣州
联系:

#2

帖子 BigSnake.NET » 2008-04-21 15:51

照片.....

reiser4 也有加密功能
^_^ ~~~
要理解递归,首先要理解递归。

地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。
头像
yiding_he
帖子: 2677
注册时间: 2006-10-25 18:10
来自: 长沙
联系:

#3

帖子 yiding_he » 2008-04-21 15:56

用 TrueCrypt 不简单些。
你是自由的。别人也是。
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

#4

帖子 eexpress » 2008-04-21 18:58

支持不同的方法研究。只是我不需要。没艳照。
● 鸣学
头像
BigSnake.NET
帖子: 12522
注册时间: 2006-07-02 11:16
来自: 廣州
联系:

#5

帖子 BigSnake.NET » 2008-04-21 18:58

BigSnake.NET 写了:照片.....

reiser4 也有加密功能
看了一下, reiser4 好像还没有加密的plugin
^_^ ~~~
要理解递归,首先要理解递归。

地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。
头像
windwiny
帖子: 2254
注册时间: 2007-03-13 17:26

#6

帖子 windwiny » 2008-04-22 11:30

这里主是不是介绍加密文件系统 ,是介绍 PAM 的 libpam-mount 模块,

可以实现在用户登录的时候 挂载某个卷(nfs,smb,各种加密的不加密的分区..等等) ,在用户退出登录的时候自动卸载

reiser4 还没用过,不知道是不是密码和文件系统可以分离的, 其它加密格式之类的,只要 libpam-mount 能挂载,爱用哪种用哪种
回复