linux权限--普通用户使用livecd模式
来源:互联网 发布:linux服务器编程 pdf 编辑:程序博客网 时间:2024/05/18 15:27
目标
linux管理员希望有些用户操作该系统不写入磁盘(或者说重启之后恢复到他登陆之前的状态),从而屏蔽用户对系统的修改。
想法
可以简单的把linux权限归纳为2个种类,一为root权限,其余则为普通用户。root权限对于所有操作有写入磁盘的权限,其余则是有写入权限但是不写入磁盘。因此感觉对于普通的用户来说,该系统就是livecd的模式。
由此想到一种可能实现:使用内存作为根目录的挂载点。
如果要从文件系统入手,则需要对于文件系统分层,由此想到另外一种可能的实现:分层的文件系统–AUFS。
难点
- 使用内存
受限于内存大小 - 使用分层文件系统
- 共同的难点
如何区分用户权限,并执行写入。
使用aufs测试分层文件系统
所有操作全部处于根目录下
$mkdir aufs$mkdir mhj$vi /mhj/aufs.read#!/usr/bin/env pythonprint 'Read function of aufs!'$vi /mhj/aufs.write#!/usr/bin/env pythonimport osf = open('hello','w')f.write("This is write function of aufs")f.close()for root,dirs,files in os.walk('.'): print '----------directory <' + root + '> -----------' for d in dirs: print d for f in files: print f$mount -t aufs -o dirs=/aufs=rw:/mhj=ro aufs /aufs$chmod +x aufs/aufs.write$cd aufs&&./aufs.write
之后umount之后会发现在mhj目录下没有生成hello文件,而在aufs这个目录下生成了相应的hello文件
研究linux运行在内存上
要想搞定linux运行的方式,必须先了解linux的启动流程
linux启动详解
1.加电
2.BIOS检查硬件设施(加电自检POST power on self test),读取启动设备的第一个扇区(512K)即MRB
3.MRB由3部分组成(代码446B,分区记录表64B,检查MRB状态2B)
4.启动引导程序GRUB/Lilo
5.加载vmlinuz和initrd,initrd会在内核启动前加载到内存中去,vmlinuz是被加载到内存中去,并执行head.S进行解压,得到vmlinux(elf可执行文件,并执行),之后运行vmlinux执行内核初始化。
6.内核初始化流程—-start_kernel()->reset_init()->kernel_init(在这个方法中会执行initrd中的init文件)->init_post()
7.initrd中init文件加载一些必要的设备,准备好系统根目录,并chroot转换到准备好的根目录下,运行系统的init进程
8.init进程执行启动项,完成启动。
因此要把linux运行在内存上可能需要修改initrd和根文件目录。initrd有2种实现方式一种是ramdisk(initrd)一种是ramfs(initramfs)。前者较老,需要在内存中独立的开辟一个空间作为块设备使用;后者较新,是一种基于内存的文件系统,可以动态的扩容。本文基本ramfs研究。
initrd研究
$file initrd.img-3.2.0-4-amd64initrd.img-3.2.0-4-amd64: gzip compressed data, from Unix, last modified: Fri Nov 1 01:50:32 2013$gunzip -c initrd.img-3.2.0-4-amd64 > initrd.cpio$mkdir initrd$cd initrd&&cpio -ivmd < ../initrd.cpio#把创建一个新的initrd文件$find . | cpio -o -H newc | gzip > ../image.cpio.gz
initrd的核心就是init文件,init文件主要干这么几件事
1.创建目录
2.挂载设备
3.切换运行根目录
总而言之就是为了内核准备可以接管的运行环境。
试想我们使用tmpfs创建一个目录,把根文件中的数据拷贝到该目录下,然后让init脚本中switch_root到该目录下,即可。
switch_root必须在init进程中才能运行,同时做了这么几件事情:chroot,执行init。
因此我们需要制作一个根目录,我可以使用busybox来实现。
busybox制作根目录
1.创建目录,设置权限
$mkdir {bin,etc,dev,home,lib,mnt,opt,proc,root,sbin,sys,tmp,usr,var}$chmod 1777 tmp$mkdir usr/bin usr/lib usr/sbin lib/modules$mkdir var/lib var/lock var/log var/run var/tmp$chmod 1777 var/tmp/$cd dev/$mknod -m 600 console c 5 1$mknod -m 666 null c 1 3
2.下载busybox并且编译到指定目录
$make menuconfigBusybox Setting -----> Build Options -----> //1选择将busybox进行静态编译 [*]Build BusyBox as a static binary (no shared libs) General Configuration ---> //不要使用usr目录 [*] Don't use /usr (NEW) Installation Options ("make install" behavior) ---> //设置指定目录 (./_install) BusyBox installation prefix (NEW)Miscellaneous Utilities ---> //取消taskset功能 [ ] taskset (NEW)保存退出$make$make install$cp -rvf busybox-1.23.1/_install/* ./
busybox问题:make menuconfig HOSTCC scripts/basic/fixdep HOSTCC scripts/basic/docproc HOSTCC scripts/kconfig/conf.o HOSTCC scripts/kconfig/kxgettext.o *** Unable to find the ncurses libraries or the *** required header files. *** 'make menuconfig' requires the ncurses libraries. *** *** Install ncurses (ncurses-devel) and try again. *** make[1]: *** [scripts/kconfig/dochecklxdialog] Error 1make: *** [menuconfig] Error 2提示缺少了ncurses 库apt-get install libncurses5-dev
这样我们就获取了一个最最基本的根目录文件。
在修改了init中mountroot方法之后,成功让系统运行在了内存上。但与此同时还是无法达到根据权限分离读写的效果,还需要进一步的研究。
- linux权限--普通用户使用livecd模式
- linux 使用sudo开放普通用户权限
- linux 怎么让普通用户使用sudo权限不需要输入密码
- Linux系统下在普通用户如何使用root权限
- 解决linux系统下普通用户端口的使用权限问题
- 解决linux普通用户使用Wireshark的权限不足问题
- Linux赋予普通用户特殊权限
- linux 普通用户添加sudo权限
- linux下普通用户root权限
- linux赋予普通用户root权限
- Linux普通用户具备sudo权限
- 普通用户使用root权限-------unbuntu
- linux教程:使用Ubuntu LiveCD安装grub
- Linux赋予普通用户特殊权限(SUDO)
- [转]linux普通用户的su权限
- Linux环境下提升普通用户权限(sudo)
- Linux下赋予普通用户root权限
- linux中给普通用户赋权限
- 存储引擎
- openssl windows编译 32位&64位
- Ubuntu 14.04 下启动 VirtualBox里面的win7 出现vboxdrv模块加载失败的情况
- JBPM
- GCD
- linux权限--普通用户使用livecd模式
- 事务的编写
- windows下 pip安装
- js设置ie浏览器的文档模式为当前最高
- Association Class VS Full Class
- 如何统计每个小时用户在线人数?
- Enum的例子
- spring MVC的困惑--url-pattern的/和/*有区别
- Struts2+Spring4.0+Hibernate4.0 学习之二