登录过程:
首先去/etc/passwd检查有没有这个账号,没有直接退出,有的话把对应的UID和GID都读出来,并且把该账号的家目录和shell设置也一起读出。
然后去/etc/shadow核对密码,相符就进入了。
1./etc/passwd
[root@centos5 ~]# head -n 1 /etc/passwd
root:x:0:0:root:/root:/bin/bash
账号名称
密码 x表示已经移到shadow这个加密文件中了
UID:0是系统管理员,1~99系统保留账号 100~499是系统保留给一些服务的账号,500~65535是给一般用户用
GID:与/etc/group相关
用户信息栏:没什么用的
家目录:
Shell:
2./etc/shadow
[root@centos5 ~]# head -n 2 /etc/shadow
root:$1$0Gxp7iKr$qfolm.tEV4EfHNXqmzk8s1:14797:0:99999:7:::
bin:*:14791:0:99999:7:::
账号名称:这里和/etc/passwd里面的账号相对应的
密码:这是加密后的密码,如果密码栏的第一个字符为*或者!表示这个账号并不会用来登录
最近更改密码日期:这个数字是以1970年1月1日为1,然后依次累加
密码不可更改的天数
密码需要重新更改的天数
密码更爱期限钱的警告期限
密码过期的宽限时间
账号失效日期
保留
1.3 关于用户组,有效与初始用户组,groups newgrp
1./etc/group
[root@centos5 ~]# head -n 2 /etc/group
root:x:0:root
bin:x:1:root,bin,daemon
用户组名称
用户组密码:通常不需要设置,因为我们很少用到用户组登录,不过密码也是记录在/etc/gshadow中的
GID
支持的账号名称:假如这个组里的所有账号
假如我同事加入多个用户组,那我在工作的时候,到底是以哪儿个用户组为准?
有效用户组(effective group)与初始化用户组(initial group)
每个用户在/etc/passwd的第4栏都是GID那个就是初始用户组,也就是说当用户登录系统,立刻就拥有了这个用户组的相关权限
groups命令可以查看自己所属的组
[root@centos5 ~]# groups
root bin daemon sys adm disk wheel 第一个就是root的有效用户组,这个涉及到root在创建一个文件或者目录的时候 文件或目录所属的组。
更改有效用户组都是使用newgrp 命令 比如newgrp users root用户的有效用户组就是users了
14.2 账号管理
useradd
-u 直接指定一串数字为UID
-g 初始用户组
-G:后面接的
用户组是这个账号还支持的用户组
-M 强制不建立家目录
-d指定某个目录为家目录
-s 后面接一个shell 默认为/bin/bash
建立一个系统账号:
useradd –r vbird3
useradd时 /home/yourname 下的各项数据,都是从/etc/skel所复制过去的
passwd 创建密码
usermod
-d 修改家目录
-g修改组
-G修改支持的组
-l修改账号名称
-s shell
-u uid
-L 暂时将用户的密码冻结,其实就是更改的/etc/shadow的密码栏
-U 解冻
userdel
-r连同家目录一起删除
finger 账号 列出用户的详细信息
id 命令
groupadd
-g指定GID
groupmod
-g修改已有的GID数字
groupdel groupdelname
su – 与su
sudo
当用户执行sudo时,系统会主动去寻找/etc/sudoers文件,判断该用户是否与执行sudo的权限
确认用户有执行sudo的权限后,便让用户输入自己的密码确认
密码成功 开始执行sudo后续的命令
root执行sudo不要密码
编辑/etc/sudoers 需要使用visudo命令
staid ALL=(ALL) ALL
用户账户 登录的主机=(可变换的身份)可执行的命令
%whell ALL=(ALL) ALL
表示所有属于whell用户组的所有用户都能收进行sudo
%whell ALL=(ALL) NOPASSWD: ALL 不需要输入密码
特殊的shell /sbin/nologin
介绍用户登录linux主机:
除了必须通过/etc/passwd及/etc/shadow的验证并取得相关权限,获得一个shell外,并且要通过PAM(Pluggable Authentication Modules 嵌入式模块)的验证
PAM运行范例:
用户开始执行/usr/bin/passwd这个程序并输入密码
passwd开始调用PAM模块,PAM模块会搜索passwd程序的PAM相关设置文件,这个设置文件一般在/etc/pam.d/.里与程序同名的文件中,所以,在本例中,PAM会去搜索/etc/pam.d/passwd设置文件
通过/etc/pam.d/passwd设置文件的数据,采用PAM所提供的相关模块来进行验证
将验证结果回传给passwd程序,而passwd程序会根据PAM回传的结果决定下一个操作(重新输入新密码还是通过验证)
这个过程说明了:
1. PAM的设置文件放在/etc/pam.d这个目录中
2. 更多的环境相关的设置放在/etc/security/*中
3. PAM是通过自己提供的相关模块来进行验证,模块放在/lib/security/*中、
[staid@centos5 root]$ cat /etc/pam.d/passwd
#%PAM-1.0
auth include system-auth
account include system-auth
password include system-auth
You have new mail in /var/spool/mail/root
验证级别分4中:auth accout session password
password验证又分四种:required requisite optional sufficient
/etc/security/limits.conf
lastlog可以查看每个账号的最近登录时间
mail dmtsai –s “nice to meet you” 最后用.来结束
批量建立账号:
shell基础十二篇里面有。这里也有个shell例子
#!/bin/bash
#
# History:
# 2005/09/05 VBird
PATH=/sbin:/usr/sbin:/bin:/usr/bin; export PATH
accountfile="user.passwd"
# 1. 先进行帐号的相关信息输入
read -p "账号开头代码( Input title name, ex> std )======> " username_start
read -p "账号等级或年级( Input degree, ex> 1 or enter )=> " username_degree
read -p "起始号码( Input start number, ex> 520 )========> " nu_start
read -p "账号数量( Input amount of users, ex> 100 )=====> " nu_amount
read -p "密码标准(1)与账号相同(2)随机数自定义==============> " pwm
if [ "$username_start" == "" ]; then
echo "没有输入开头的代码,不执行。" ; exit 1
fi
testing1=`echo $nu_amount | grep '[^0-9]' `
testing2=`echo $nu_start | grep '[^0-9]' `
if [ "$testing1" != "" ] || [ "$testing2" != "" ]; then
echo "输入的号码不对,有非数字内容" ; exit 1
fi
if [ "$pwm" != "1" ]; then
pwm="2"
fi
# 2.开始输出账号与密码
[ -f "$accountfile" ] && mv $accountfile "$accountfile"`date +%Y%m%d`
nu_end=$(($nu_start+$nu_amount-1))
for (( i=$nu_start; i<=$nu_end; i++ ))
do
account=$username_start$username_degree$i
if [ "$pwm" == "1" ]; then
password="$account"
else
password=""
test_nu=0
until [ "$test_nu" == "8" ]
do
temp_nu=$(($RANDOM*50/32767+30))
until [ "$temp_nu" != "60" ]
do
temp_nu=$(($RANDOM*50/32767+30))
done
test_nu=$(($test_nu+1))
temp_ch=`printf "\x$temp_nu"`
password=$password$temp_ch
done
fi
echo "$account":"$password" | tee -a "$accountfile"
done
# 3. 开始建立账号和密码
cat "$accountfile" | cut -d':' -f1 | xargs -n 1 useradd -m
chpasswd < "$accountfile"
pwconv
echo "OK! 建立完成"
本文转自guoli0813 51CTO博客,原文链接:http://blog.51cto.com/guoli0813/350213,如需转载请自行联系原作者