linux kickstart文件里rootpw密码可以使用明文,也可以使用加密过的值,这里主要介绍下三种加密方法:md5、sha256、sha512
使用明文的方法
使用加密的方法
二、加密生成方法,这里统一用password来加密
1、md5加密
使用openssl passwd命令:
使用grub-crypt命令,会提示输出密码:
使用python,同样也会提示输出密码:
2、sha256加密
使用grub-crypt命令,会提示输出密码:
使用python,提示输入密码:
3、sha512加密
使用grub-crypt命令,会提示输出密码:
使用python,提示输入密码:
rootpw密码可以使用明文,也可以使用加密过的值(密码为:IPPBXADMINROOT)
注意:在这里要使用加密过的值,否则安全性就太低了
rootpw --iscrypted $1$IPPBXADM$qlbCgDSCK/a.1ZzfEk/mT.
linux系统的密码shadow一样,生成方法如下:
perl -e 'print crypt("IPPBXADMINROOT",q($1$IPPBXADM))," "'
当使用特殊字符时,例如@$符时需要在前面加上,例:@$,否则加密字符串会错误;
其中IPPBXADMINROOT为要给用户设置的密码,11IPPBXADM字符串是自定义字符串,shadow里一般用11后面跟8个字符这种格式。
生成的密码串样式如下:
$1$IPPBXADM$qlbCgDSCK/a.1ZzfEk/mT.
中间有个$,前面算salt,后面的加密值,合在一起叫hash
crypt 本身默认用des算法
如果salt以11开头就使用md5算法
des算法命令如下:
perl -e 'print crypt("IPPBXADMINROOT","/g")," "'
生成的密码串样式如下:
/g5fpEc81O2B2
exit(0):正常运行程序并退出程序;
exit(1):非正常运行导致退出程序;
return():返回函数,若在主函数中,则会退出函数并返回一值。
详细说:
1. return返回函数值,是关键字; exit 是一个函数。
2. return是语言级别的,它表示了调用堆栈的返回;而exit是系统调用级别的,它表示了一个进程的结束。
3. return是函数的退出(返回);exit是进程的退出。
4. return是C语言提供的,exit是操作系统提供的(或者函数库中给出的)。
5. return用于结束一个函数的执行,将函数的执行信息传出个其他调用函数使用;exit函数是退出应用程序,删除进程使用的内存空间,并将应用程序的一个状态返回给OS,这个状态标识了应用程序的一些运行信息,这个信息和机器和操作系统有关,一般是 0 为正常退出, 非0 为非正常退出。
6. 非主函数中调用return和exit效果很明显,但是在main函数中调用return和exit的现象就很模糊,多数情况下现象都是一致的。
函数名: exit()
所在头文件:stdlib.h(如果是”VC6.0“的话头文件为:windows.h)
功 能: 关闭所有文件,终止正在执行的进程。
exit(1)表示异常退出.这个1是返回给操作系统的。
exit(x)(x不为0)都表示异常退出
exit(0)表示正常退出
exit()的参数会被传递给一些操作系统,包括UNIX,Linux,和MS DOS,以供其他程序使用。
stdlib.h: void exit(int status);
exit():
在调用时,会做大部分清理工作,但是决不会销毁局部对象,因为没有stack unwinding。
会进行的清理工作包括:销毁所有static和global对象,清空所有缓冲区,关闭所有I/O通道。终止前会调用经由atexit()登录的函数,atexit如果抛出异常,则调用terminate()。
abort():
调用时,不进行任何清理工作。直接终止程序。
retrun:
调用时,进行stack unwinding,调用局部对象析构函数,清理局部对象。如果在main中,则之后再交由系统调用exit()。
return返回,可析构
main或函数中的局部变量,尤其要注意局部对象,如不析构可能造成
内存泄露。exit返回不析构main或函数中的局部变量,但执行收工函数,
故可析构全局变量(对象)。abort不析构main或函数中的局部变量,也不
执行收工函数,故全局和局部对象都不析构。
所以,用return更能避免内存泄露,在C++中用abort和exit都不是好习惯.
Linux下产生随机密码10方法
有特殊符号的:
cat /dev/urandom | tr -dc "a-zA-Z0-9_+~!@#$\%^&*"| fold -w 16 |head -n 16
无特殊符号的:
#1
date +%s | sha256sum | base64 | head -c 32 ; echo
上述命令使用SHA来哈希日期,输出头32个字节。
#2
< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c${1:-32};echo;
上述命令使用内嵌的/dev/urandom,只输出字符,结果取头32个。
#3
openssl rand -base64 32
上述命令使用系统自带的openssl的随机特点来产生随机密码
#4
tr -cd ‘[:alnum:]‘ < /dev/urandom | fold -w30 | head -n1
#5
strings /dev/urandom | grep -o ‘[[:alnum:]]’ | head -n 30 | tr -d ‘ ’; echo
通过过滤字符命令,输出随机密码
#6
< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c6
这个命令比起来比较简单了
#7
dd if=/dev/urandom bs=1 count=32 2>/dev/null | base64 -w 0 | rev | cut -b 2- | rev
上述命令使用命令dd的强大功能
#8
</dev/urandom tr -dc ’12345!@#$%qwertQWERTasdfgASDFGzxcvbZXCVB’ | head -c8; echo “”
上述命令输出很简洁
#9
randpw(){ < /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c${1:-16};echo;}
使用randpw随时产生随机密码,可以把它放到~/.bashrc文件里面。
(我这里没有什么密码产生,可留言讨论)
#10
date | md5sum
如果只用这一个,足够了,因为它太简洁了,:-)
用户、权力下放、非登录状态root用户密码修改
1.用户理解
用户就是系统使用者的身份,用户以数据身份存在。在系统中用户存储为若干窜字符+若干个系统配置文件。
用户信息涉及到的系统配置文件:
(1)/etc/passwd ###用户信息
用户:密码:uid:gid:说明:家目录:用户使用的shell
,在shell窗口输入 cat /etc/passwd即可查出用户的信息
(2)/etc/shadow ###用户认证信息
用户:密码:最后一次密码修改该时间:最短有效期:最长有效期:警告期:非活跃期:帐号到期日
,输入cat /etc/shadow即可查出用户认证信息。
(3)/etc/group ###组信息
组名称:组密码:组id:附加组成员
输入cat /etc/group即可查出组信息。
(4)/etc/gshadow ###组认证信息
如下图所示,输入cat /etc/gshadow即可查出组认证信息。
(5)/home/username ###用户家目录
(6)/etc/skel/.* ###用户骨架文件
如下图所示,输入cat /etc/skel/.*即可查出用户骨架文件。
注意:/etc/skel/这个目录中的所有文件或目录
2.用户管理
(1)用户建立
useradd 参数 用户名字
-u ##指定用户uid
如下图所示,建立一个用户,并指定uid为888。
-g ##指定用户初始组信息,这个组必须已经存在
,建立一个用户,并指定初始组为linux。
-G ##指定附加组,这个组必须存在
如下图所示,建立一个用户,并指定附加组的id为21。
-c ##用户说明
新建用户,用户说明为westos user。
-d ##用户家目录
建立一个用户,并指定家目录为/mnt/westos
-s ##用户所使用的shell,/etc/shells记录了用户能使用shell的名字
如下图所示,建立一个用户,并指定用户能使用的shell名字为/bin/tcsh。
##用户和组的id须一致,否则提示组不存在。
## 用户名不要为数字。数字的id与bin相同,用户名为数字时用户id的显示为bin。
useradd -s /sbin/nologin westos ##新建用户westos,并禁止该用户交互登陆
如图所式,新建用户westos,然后切换到用户westos,系统提示该用户不可用
shell类型查询:cat /etc/shells
(2)用户删除
userdel -r 用户名称 ##-r表示删除用户信息及用户的系统配置
如下图所示删除用户必须加上参数-r,否则会留下用户的系统配置。
(3)组的建立
groupadd -g ##建立组
groupdel 组名字 ##删除组
组的存在意义是共享权限,组分为初始组(1个)和附加组(多个)。
- 作以上实验的监控命令:
watch -n 1 ‘tail -n 3 /etc/passwd /etc/group;echo ====;ls -l /home;echo ===;ls -l /mnt’
(4)用户id信息查看
id 参数 用户
-u ##用户uid
-g ##用户初始组id
-G ##用户所有所在组id
-n ##显示名称而不是id数字
-a ##显示所有信息
- 如下图所示,id -a westos即可显示该用户的所有信息;加上参数-u、-g、 -G分别可查询用户的uid、初始组id、所有所在组id
(5)用户信息更改
usermod 参数 用户
-l ##更改用户名称
-u ##更改uid
-g ##更改gid
-G ##更改附加组
-aG ##添加附加组
-c ##更改说明
-d ##更改家目录指定
-md ##更改家目录指定及家目录名称
-s ##更改shell
-L ##冻结帐号
-U ##解锁
- 注意:(1)passwd -l 用户 ##冻结帐号,使用usermod -u 用户解锁需要使用该命令两次。而passwd -u 用户执行一次就可以解锁。如下图所示
(2) passwd -u 用户 ##解锁
usermod命令及参数使勇如下图所示。
3.用户权力下放
(1)在系统中超级用户可以下放普通用户不能执行的操作给普通用户
下放权力配置文件:/etc/sudoers
(2)下放权力的方法
*)超级用户执行visudo进入编辑/etc/sudoers模式
*)格式:
获得权限用户 主机名称=(获得到的用户身份) 命令
test desktop0.example.com=(root) /usr/sbin/useradd
test用户能在desktop0.example.com以超级用户身份执行/usr/sbin/useradd
- root用户执行visudo进入到/etc/sudoers文件,开始进行下放权力操作,添加内容如下图中的第100及101行。
(3)执行下放权限命令
sudo 命令 ##如果第一次执行sudo需要输入当前用户密码
在/etc/sudoers中如果设置如下:
test desktop0.example.com=(root) NOPASSWD: /usr/sbin/useradd
表示用户调用sudo命令的时候不需要自己密码
当我们编辑结束保存文件后,即可使用下放的权力,如下图所示。
4.用户认证信息的控制
chage 参数 用户
-d ##用户密码组后一次修改的时间,如果设定成0,用户登陆系统后必须修改自己的密码
-m ##最短有效期
-M ##最长有效期
-W ##警告期
-I ##用户非活跃天数
-E ##帐号到期日格式 -E "YYYY-MM-DD"
- chage命令及参数的使用如下图所示。
当使用-m参数将最短有效期修改为1(表示需要在一天之后才能修改密码),立即修改密码就会得到如下提示,表示需要等一段时间才能改密码。
5.root密码忘记
操作程序如下:
1.重新启动系统
2.在系统启动阶段按上下健停止系统系统引导
3.选择启动引导标题,按“E”进行编辑
按E进入如下图所示界面。
4.找到linux16引导条目这一行,从这行最后删除到ro选项,并把ro改为rw,然后添加rd.break选项
修改后的结果如下图所示。
5.ctrl+x启动设定过后的系统引导条目
6.进入系统后执行chroot /sysroot切换到真实的系统环境
7.passwd root修改超级用户密码
8.建立文件/.autorelabel让系统从新扫描所有文件(touch /.autorelabel)
9.exit两次使系统自动重新启动
第6-9步的操作如下图所示。