求一个Linux下的GUID的产生方法~~

求一个Linux下的GUID的产生方法~~,第1张

设置suid/guid的例子

CODE:

[Copy to clipboard]

命令 结果含义

chmod 4755 rws r-x r- x 文件被设置了s u i d,文件属主具有读、写和执行的权限,其他用户具有读和执行的权限

chmod 6711 rws --s --x文件被设置了s u i d和g u i d,文件属主具有读、写和执行的权限,其他用户具有执行的权限

chmod 4764 rws rw- r- - 文件被设置了s u i d,文件属主具有读、写和执行的权限,属组用户具有读和执行的权限,用户具有读权限

SUID 是 Set User ID, SGID 是 Set Group ID的意思。

UNIX下可以用ls -l 命令来看到文件的权限。用ls命令所得到的表示法的格式是类似这样的:-rwxr-xr-x 。下面解析一下格式所表示的意思。这种表示方法一共有十位:

9 8 7 6 5 4 3 2 1 0

- r w x r - x r - x

第9位表示文件类型,可以为p、d、l、s、c、b和-:

p表示命名管道文件

d表示目录文件

l表示符号连接文件

-表示普通文件

s表示socket文件

c表示字符设备文件

b表示块设备文件

第8-6位、5-3位、2-0位分别表示文件所有者的权限,同组用户的权限,其他用户的权限,其形式为rwx:

r表示可读,可以读出文件的内容

w表示可写,可以修改文件的内容

x表示可执行,可运行这个程序

没有权限的位置用-表示

setuid/setgid/Sticky,对应的权限数值依次为4000/2000/1000。

setuid标志出现在文件权限的u段,setgid标志出现在文件权限的g段,Sticky标志出现在文件权限的o段。这些标志都出现在各段的“执行”位上,其中setuid/setgid的标志为“s”,Sticky标志为“t”。

由于实际文件、目录的属主、权限各不相同,这些标志设置后,权限的实际综合效果可能会使这些设置无效,这时,setuid的标志由“s”变为“S”,setgid的标志由“s”变为“l”(小写“L”),Sticky的标志由“t”变为“T”。

setuid和setgid用于对位于公用目录中的可执行文件赋予使用者以等同于属主/属组的权限。

setgid还用来设置公用目录,以使在此目录中新创建的文件都具有同此目录的组别。

Sticky用于对位于公用目录中的文件进行保护。

3者综合使用,就可以有效地建立起一套共享机制,使符合条件的他人可以方便地使用别人放在公用目录中的可执行文件,而又确保不会因目录公用而造成他人随意地乱删。

GUID (global unique identifier) 是微软对UUID的叫法.

UUID( Universal Unique Identifier)

HP和RedHat上可以使用uuidgen来生成,solaris上命令:makeuuid

如何通过C++编程取得UUID?

1.安装libuuid库, libuuid.so.1包涵在e2fsprogs里,本人的系统为RedHat7.3,下载ftp://194.199.20.114/linux/redhat/7.3/en/os/i386/RedHat/RPMS/e2fsprogs-1.27-3.i386.rpm

2. 编辑文件uuid.cpp

#include <iostream>

#include <stdio.h>

#include <uuid/uuid.h>

int main()

{

uuid_t uu

uuid_generate( uu )

std::cout <<uu <<std::endl

int i

for(i=0i<16i++)

{

printf("%x ",uu)

}

printf("\n"

return 0

}

#g++ -c –g uuid.o uuid.cpp

#g++ -o –luuid uuid uuid.o

其中/usr/include/uuid/uuid.h中有uuid_t的定义:

typedef unsigned char uuid_t[16]

有时,没有被授权的用户需要完成某项任务。一个例子是passwd程序,它允许用户改变口令,这就要求改变/etc/passwd文件的口令域。然而系统管理员决不允许普通用户拥有直接改变这个文件的权利,因为这绝对不是一个好主意。

为了解决这个问题,SUID/SGID便应运而生。UNIX允许程序被授权,当程序被执行的时候,拥有超级用户的权限,完成时又回到普通用户的权限。这个主意很好,所以AT&T对它申请了专利。

suid意味着如果A用户对属于他自己的shell脚本文件设置了这种权限,那么其他用户在执行这个脚本的时候就拥有了A用户的权限。所以,如果 root用户对某一脚本设置了这一权限的话则其他用户执行该脚本的时候则拥有了root用户权限。

同理,guid意味着执行相应脚本的用户则拥有了该文件 所属用户组中用户的权限。g就是group,组。

Win7下安装ubuntu (双硬盘用户加强版)起源还是学习上要用到linux *** 作系统,所以才在自己电脑上安装linux *** 作系统。先开始是在虚拟机上用的,但用过一两星期就感觉还是不适合,用虚拟机感觉只要ctrl+Alt就能退出来,给自己留了太多的退路,又回到了windows环境。所以个人很支持在硬盘上安装双系统,在 *** 作系统的选择上,我是支持ubuntu的,因为她拥有一个坚固的后盾,那就是http://forum.ubuntu.org.cn/,记住这个网址,有什么问题都可以找她。

好了废话也不多说了,就我自己的安装经历给大家讲一讲在win7 *** 作系统下安装Ubuntu过程中会遇到的各种问题(本人是两块硬盘,所以情况更复杂,但也更有参考价值!)。

STEP1:下载ubuntu

目前截止到2010/10/23最新的版本是10.10

http://www.verycd.com/topics/2857712/ 这是电驴上的资源,可以去下,600多M不是很大,下载完当然刻盘后就叫ubuntu 10.10 LiveCD。

STEP2:空出你的硬盘空间

安装ubuntu所需要的空间不大,10G足以(太够了,考虑到以后还要装其他一些东西,留大一点吧)。

STEP3:情况调查

QA:你机箱中安装了几块硬盘?

A1、一块 (太简单了,网上很多教程都适合你)

A2、两块 (情况复杂,引导需要小心)

QB:你愿意将liveCD刻录下来吗?(这会省去你许多麻烦,也可以收藏以备崩溃后重新安装。但没有刻录机和空白光盘的用户也不要着急,还是有办法的)

B1、愿意

B2、不愿意

一、A1B1用户

太简单了,将你的liveCD塞入光驱,从主板设置由CDROM启动系统也就是我下面要说的二、A1B2用户 的第6、7两步,呵呵,这时大多数人发现在开机的GNU GRUB中没有win7系统的选项只能进入ubuntu,请往下翻页至——从ubuntu中修复win7开机引导 就教你解决这个问题

二、A1B2用户

这就是网上说的很多的“win7下如何使用GRUB4DOS来引导硬盘安装LINUX系统”,好这里提到了一个新的名词“GRUB4DOS” 这是ubuntu社区上一篇帖子http://forum.ubuntu.org.cn/viewtopic.php?f=139&t=150541,可以去膜拜一下,当然如果想省一点时间,我就简单地说——这是一款在win7下能在启动主板后引导进入光盘或 *** 作系统的软件(虽然很不全面,但在本教程中就起到这点作用了),这是她的下载地址,去下一个最新版的(就是最新发布的,这个不会不懂吧)吧http://download.gna.org/grub4dos ,这是很多小软件的集成打包,我们只会用到其中的几个,这个待会再说。

1、将下载的grub4dos解压,复制其中的menu.lst、grldr和grldr.mbr三个文件到C盘根目录(就是C:\),如果想GRUB支持中文,那就把china文件夹中的grldr放在C盘根目录下。

2、将下载的ISO文件ubuntu-9.04-desktop- i386.iso放在分区根目录下,并将用winrar或者虚拟光驱打开LINUX的ISO文件,这里以ubuntu-10.10-dvd-i386.iso为例,该文件内casper文件夹里的initrd和vmlinuz这两个文件复制到C:盘根目录,(其实不一定放在C盘根目录,任何一个分区都可以,只要你的menu.lst文件参数配置正确就可以了,例如只有一块硬盘,放在C盘就是(hd0,0),D盘就是(hd0,1)依次类推),menu.lst中指定initrd.lz和vmlinuz两个文件的路径是正确的就可以了,并不一定要把initrd.lz和vmlinuz两个文件放到根目录的。

3、这里将会出现一个分歧,网上有些教程会使用boot.ini方法,有的会使用BCDedit方法。这里我推荐使用BCDedit方法,原因有一下两点: 1)、boot.ini方法对win7使用软改激活的用户会导致启动不能(虽然我也不确定软改的具体定义是什么,但君子不立危墙之下,不要没事找事了,当然纯学习时间的例外) 2)、 BCD(Boot Configuration Date)即系统引导配置数据,这是从Windows Vista开始才引入的。我们知道,在Windows Vista/Server 2008中BootManager组件负责系统的初始化和引导工作,而与之相匹配系统的引导数据就存储在BCD中。这才是win7引导的核心,已经不再用boot.ini引导了,当然win7还是承认boot.ini文件的这也是为什么boot.ini方法能起作用的原因。初步了解BCD,这也将是本次安装的额外收获。 PS:强烈推荐阅读ubuntu社区smallapple 所整理的grub2基础教程,http://forum.ubuntu.org.cn/viewtopic.php?f=139&t=229387这是帖子的地址,这个pdf教程有21页,我是打印下来放入文件夹好好阅读收藏的。事实上,教程非常详细,对ubuntu的引导问题基本都提到了,膜拜!如果说BCD是win7引导的核心,那么grub就是ubuntu的BCD了,现在自ubuntu9.10升级后就默认使用grub2了,一定要了解一下。

4、我们使用BCD方法:

1)、在WIN7里以管理员的身份运行cmd,打开命令提示符

2)、输入 bcdedit /export "D:\BCD Backup"

#将系统存储的内容导出到文件。此文件可以在以后用于还原系统存储的状态。此命令仅对系统存储有效。注意:一定要备份,一方面以还原防止 *** 作错误,另一方面,后面再说(顺带一提:bcdedit /import "D:\BCD Backup"就是与之相对的还原 *** 作)

3)、输入bcdedit /create /d “GRUB4DOS” /application bootsector

#这个命令会产生一个guid打印在cmd窗口中,通俗讲就是在启动队列中占一个位置。注意:guid类似于{******xx-***x-***x-***x-************}格式,具体数字根据硬盘或分区参数会有相应变化。例如我的就是{dadaa27d-c9f1-11df-a802-ce8c84d8192b},我们把它复制下来,我们下面有用(有同学提到:怎么复制呀?这里提一种方法 在cmd窗口右键→标记→选中要复制的东西再点鼠标右键,此时选中的文本会变成未选中的状态,不过没关系,按下Ctrl+C,information就到你的剪贴板里了~到目的地去Ctrl+V吧~!)

4)、bcdedit /set {dadaa27d-c9f1-11df-a802-ce8c84d8192b} device partition=C:

#设定 *** 作系统{dadaa27d-c9f1-11df-a802-ce8c84d8192b}引导分区“C”,设置刚刚添加启动项的启动分区,这里设的是C盘,因为我们的文件都在C盘。

5)、bcdedit /set {dadaa27d-c9f1-11df-a802-ce8c84d8192b} path \grldr.mbr

#设置启动时运行的文件。

6)、bcdedit /displayorder {dadaa27d-c9f1-11df-a802-ce8c84d8192b} /addlast

#这个只是为了将增加的启动项放到其他启动项的后面。注意:也可以用/bootsequence 选项,具体可以去百度再了解一下,我就不具体列举了。

7)、最后可以用 bcdedit /enum 查看一下,会看到执行上述命令后产生的启动项配置。

实模式启动扇区

———————

标识符 {dadaa27d-c9f1-11df-a802-ce8c84d8192b}

device partition=C:

path\grldr.mbr

description GRUB4DOS

这样就完成了在WIN7启动菜单添加GRUB的选择项了,只要你在C盘根目录下写一个正确的menu.lst文件就可以引导硬盘安装LINUX啦。

5、书写正确的menu.lst文件

回到我们的C根目录下从GRUB4DOS中拷贝出来的menu.lst文件,里面有一些书写说明,不过是英文的,我略微说一下我们要用到的内容。首先将里面的说明都删掉,写下内容如下:

default 0

timeout 0

title ubuntu 10.10 install

rootnoverify (hd0,0)

kernel /vmlinuz boot=casper iso-scan/filename=/ubuntu-10.10-desktop-i386.iso ro quiet splash locale=zh_CN.UTF-8

initrd /initrd.gz

title Windows 7

rootnoverify (hd0,1)

chainloader +1

不懂?没事也不需要太了解,具体的menu.lst写法可以参考网上的教程,我记得比如:http://www.360doc.com/content/09/0817/19/74585_4997923.shtml 很不错的简单介绍。

6、接下来,就是重启,安装ubuntu了,很简单也许在分区那边会遇到一些问题。我的建议是用手动指定分区然后把你在STEP2中空出的盘选择ext4,挂载在 / 上(注意剩下2G空间),剩下的2G可以用作swap分区,关于分区方面的知识建议阅读《鸟哥的私房菜》,现在已经是第三版了,强烈推荐通读此书,写的很好,很基本。

7、安装完成后她会要求你重启,这时大多数人发现在开机的GNU GRUB中没有win7系统的选项只能进入ubuntu,请往下翻页至——从ubuntu中修复win7开机引导 就教你解决这个问题

三、A2B1用户

拥有两块硬盘,那么注定你在安装上没有什么问题,但是在系统引导上肯定会出现问题。我的建议是,一定要搞清楚你的硬盘状况,比如每一个分区是什么 ?你的win7Loader在哪里?……

1、不要被吓唬住了!先通过LiveCD安装ubuntu吧,不管怎样都是要装的。

在引导程序的安装位置上,我建议就装在/目录所在的分区,这样重启后你会进入win7就像我当初一下,直接进入win7,就像没装过ubuntu一样。别急,用LiveCD引导进入ubuntu。

2、这时 就是通过脚本script,完整了解你的系统情况的时候了,感谢ubuntu社区的onshoestring 他向我提供了这个脚本,http://sourceforge.net/projects/bootinfoscript/

把文件先复制到桌面,在终端运行:sudo bash ~/桌面/boot_info_script055.sh

生成的RESULTS.txt文件中有详细的信息

3、你这时了解你的硬盘了吗?呵呵,下面可以通过

——从ubuntu中修复win7开机引导(利用Ubuntu-GRUB2来引导)

——从win7中修复ubuntu开机引导(利用BCDedit来引导)

来自由选择你的引导程序是通过Ubuntu-grub2 进入win7还是通过win7-BCD来调用Grub2以进入ubuntu

四、A2B2用户

你选择了一条最艰巨的路,先把A1B2的执行一遍以安装ubuntu ,再选择

——从ubuntu中修复win7开机引导(利用Ubuntu-GRUB2来引导)

——从win7中修复ubuntu开机引导(利用BCDedit来引导)

来自由选择你的引导程序是通过Ubuntu-grub2 进入win7还是通过win7-BCD来调用Grub2以进入ubuntu,呵呵。

——从ubuntu中修复win7开机引导(利用Ubuntu-GRUB2来引导)

既然是从ubuntu修复win7的启动项,那就必须进入ubuntu,对于那些只能进入win7却无法进入ubuntu的用户,可以用LiveCD引导进入(就是最开始选择试用Ubuntu,LiveCD的作用终于体现出来了)。当然对于B2而且无法进入ubuntu的情况,我们还有下面的教程——从win7中修复ubuntu开机引导。好,废话不多说,进入正题。

进入ubuntu后,请打开终端输入:

1、sudo fdisk -l

(注意是小写的L,不是数字的1,此步用于确定电脑中安装 Ubuntu10.10 的所在分区的位置,输入以后会输出类似如下信息,找到system为Linux的那行,记住/dev/sdaX的情况,比如本人的电脑是/dev /sda7,以下就以此为例,你自己的请加以更改)

2、 sudo -i (此步用于得到root权限,无需输入密码,方便以下 *** 作)

3、 mount /dev/sda7 /mnt (注意,sdaX是第一步查到的/目录所安装的盘)

4、 mount /dev/sda7 /mnt/boot (如果boot是单独分区装的话才需要这一步,……总之把其他单独分区安装的目录都挂上去,例如/home 、/var等)

5、 mount --bind /dev /mnt/dev (重要,一定要挂)

6、 mount --bind /proc /mnt/proc (重要,一定要挂)

7、 chroot /mnt (chroot挂好的ubuntu)

8、 grub-install /dev/sda (双硬盘的用户注意,此处的sda是由win7loader所在位置所决定的,就是说,如果你的win7和ubuntu假如都安装在sdb,但win7loader却在sda的话,也只能写sda,具体怎样查看win7loader在哪里,我在A2B1中有所讲解)

Ps:这一步执行后会有几行代码出现,总体来说就是成功的,用liveCD引导进入的用户可能会遇到 cannot find ***prition 等字样,无视他,没关系的,重启后你就会发现终于可以进入ubuntu了,然后再按照这个步骤执行一遍。 关于这个问题的记载我在一个英文的叫做:小石头工作室的网页上找到的……很遗憾,网址没记录下来,遗失了,还是感谢他们!

9、update-grub(重装grub2)

感谢ubuntu社区的foxman997在他的帖子中我才正确

知道为什么吗?好好阅读ubuntu社区smallapple 所整理的grub2基础教程,http://forum.ubuntu.org.cn/viewtopic.php?f=139&t=229387这是帖子的地址,下载他整理的pdf文档。

——从win7中修复ubuntu开机引导(利用BCDedit来引导)

前4步的流程和 二、A1B2用户 中的win7下如何使用GRUB4DOS来引导硬盘安装LINUX系统步骤一样,区别就在第5步,书写正确的menu.lst文件

文件如下:

Timeout 0

Default 0

Title grub2

Find --set-root /boot/grub/core.img

Kernel /boot/grub/core.img

Boot

(当然,若果/boot单独分区的话,改为

Find --set-root /grub/core.img

Kernel /grub/core.img)


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/tougao/6079004.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-03-14
下一篇2023-03-14

发表评论

登录后才能评论

评论列表(0条)

    保存