登录过程:

首先去/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! 建立完成"