一、shadow passwd文件结构
1./etc/passwd
passwd文件是存放用户的基本信息的。
passwd共有7个字段分别以冒号:隔开。
1.帐号名称
2.密码
现在放在了/etc/shadow里面了。用x代替。
3.UID
0为系统管理员,其他账号UID为0时拥有root权限。
1~499为系统账号
500~$一般用户登录的账号。
4.GID
与/etc/group有关。
5.用户信息说明
6.主文件夹
7.shell类型
2./etc/shadow
shadow是存放帐号密码的问题。
1.账号名称
对应/etc/passwd的第一列
2.经过加密的秘密
3.最近更改密码的日期
以1970年月1日开始算到今天的日期
4.密码不可被更改的天数。与第三段相比。
如果为3,最近更改过密码的日期,3天内不能修改密码。
5.密码需要被更改的天数。与第三段相比。
99999计算为273年,表示没有限制之意。
6.密码休要更改期限前的警告天数,与第五段相比。
如果为3,第5段到期前3天提醒该用户。
7.密码过期后的宽限日。与第五段相比。
第五段天数密码过期后,密码可以登录,需要重置密码才能继续使用。
8.账户失效日期
和第三段一样使用1970年的日期来计算。到期后不能继续使用。用于收费服务。
9.保留。
二、用户管理 useradd userdel usermod
1.useradd命令
新增用户
语法:
useradd [选项] [用户名]
u:指定UID
g:指定GID或所属组
G:次要用户组
m:强制创建家目录,默认
M:强制不创建家目录。
c:说明栏。
d:家目录的绝对路径。
s:shell类型 /bin/bash ; /sbin/nologin
r:系统账户
实例:
创建账户 wang 次要用户组users 不创建家目录 不允许登录 说明栏shaojun 指定UID 630
useradd -G users -M -s /sbin/nologin -c shaojun -u 630 wang
创建系统账号wang1 ,系统账号没有家目录
useradd -r wang1
useradd的配置文件
GROUP=100,新建账号的初始用户组使用的GID为100
CentOS上面默认的用户组和账号相同的用户组,针对用户组的角度有两种不同的极致所致,分别为私有用户组机制和公用用户组机制。私有就是CentOS的这种一用户一用户组,目录权限为700。公用机制就是新用户默认使用同一个用户组,目录权限755。CentOS是私有用户组机制,不会生效。
Home=/home 用户主文件夹的基准目录
INACTIVE=-1 密码过期后是否会失效的设置值
0表示密码过期后立即失效。-1 表示密码永远不会失效。30表示密码过期后30天失效。
EXPIRE= 账户失效的日期
SHELL=/bin/bash 默认使用的shell程序
不允许用户登录可以设置成/sbin/nologin
SKEL=/etc/skel 用户主文件夹的参考基准目录
用户的家目录就是把这个目录复制过去的。skel目录下有什么文件,新用户的家目录里面就有什么文件。
CREATE_MAIL_SPOOL=yes 创建用户的mailbox
用户的邮件箱在/var/spool/mail/用户名
MAIL_DIR
mailbox所在目录
PASS_MAX_DAYS
/etc/shadow的第5字段,多久更改一次密码
PASS_MIN_DAYS
shadow的第4段,多久不可重新更改密码
PASS_MIN_LEN
密码最短字符长度,已被PAM模块代替,失效。
PASS_WARN_AGE
shadow的第6段,过期前多少天警告。
UID_MIN
用户可使用最小的UID
UID_MAX
用户可使用最大的UID
GID_MIN
GID_MAX
CREATE_HOME
是否创建用户家目录
UMASK
用户家目录的umask,目录权限为700
USERGROUPS_ENAB
使用userdel删除时,是否删除初始用户组。
ENCRYPT_METHOD
加密方式
使用useradd创建用户至少参考
/etc/default/useradd
/etc/login.defs
/etc/skel/*
2.usermod命令
修改用户的参数
语法:
usermod [选项] [username]
参数:
c:账号说明/etc/passwd第5列
d:家目录,/etc/passwd第6列
e:日期,格式:YYYY-MM-DD,/etc/shadow第8列
f:天数。shadow的第7段
g:初始用户组
G:次要用户组
a:与-G合用。增加用户组的支持而非设置。
l:账号名称,/etc/passwd的第1列
s:修改shell类型
u:UID数字
L:暂时将用户密码冻结。其实仅修改/etc/shadow的密码
U:将/etc/shadow密码列的!去掉。
实例:
修改用户 wang 的UID 为 1002
usermod -u 1002 wang
3.userdel命令
删除用户以及相关数据。
语法:
userdel [选项] [用户名]
选项:
r:连同用户的主文件夹也一起删除。
如果只是暂时不启用该账号,将/etc/shadow的第8段设置为0,相关数据就回留下来。
如果真的想把该账户完整的删除,userdel -r username之前,先 find / -user username 查出属于username的文件。
实例:
删除用户wang,并删掉家目录
userdel -r wang
三、用户组管理 groupadd groupdel groupmod gpasswd
1.groupadd命令
新增用户组
语法:
groupadd [-g gid] [-r] 用户组名
选项:
g:指定为占用的GID
r:新建系统用户组,与/etc/login.defs内的GID_MIN有关
实例:
新建一个用户组,gid为1655 名称为group1
groupmod -g 1656 -n group2 group1
2.groupmod命令
修改用户组的相关参数
语法:
groupmod [-g gid] [-n group_name] 用户组名
选项:
g:指定新的GID,必须为不存在的
-n:指定新的用户组名字。
实例:
修改group1的gid为 1656 更名为group2
groupmod -g 1656 -n group2 group2
3.groupdel命令
删除用户组
语法:
groupdel 用户组名
实例:
删掉group2这个用户组。
如果用户组删除失败,可能是该用户组里面有用户,将用户usermod -g 更改用户组,即可删除。
groupdel group2
4.gpasswd命令
就是让某个用户组拥有一个管理员,管理员可以管理账号加入或移除该用户组。
root操作:
gpasswd group_nameg //设置用户组密码
passwd -A user1 -M user2,user3 group_name //-A添加管理员,-M添加用户
gpasswd [-rR] group_name //-r删除密码,-R密码栏失效
管理员操作:
gpasswd -a user4 group_name //新增user4用户到用户组
gpasswd -d user2 group_name //删除user2用户
四、mkpasswd命令 随机生成密码
1.mkpasswd命令
mkpasswd命令 是make password的简写。可以随机生成字符串。
2.mkpasswd命令使用方法
安装:
# yum install -y expect
语法:
mkpasswd [选项] [参数]
选项:
-l:指定长度
-d:数字的个数
-c:小写字母个数
-C:大写字母个数
-s:特殊字符个数
3.实例
生成一个15位的密码,特殊符号0个,数字5个
# mkpasswd -l 15 -s 0 -d 5
zv63Zw2Uj8mp1cy
五、passwd命令
1.passwd命令
创建帐号之后,该帐号是被封闭的,需要用时 passwd 命令设置密码。
如果想更改密码,用户可以自己执行 passwd 命令修改密码。
如果用户自己忘记了密码。可以让 root 执行 passwd username 来修改密码。
2.passwd命令的使用方法
语法:
passwd [选项] [用户名]
选项:
--stdin:通过前一个管道的数据作为密码输入,对shell script有用。
-l:lock 锁定的意思,将/etc/shadow的第二列前面加!,使密码失效。
-u:unlock 解锁的意思 ,与l相反。
S:列出密码相关的信息。
nxwi:接天数,分别shadow的第4567段。
3.passwd命令实例
修改当前用户的密码
# passwd
修改普通用户 wang 的密码
# passwd user1
锁定user1的密码
# passwd -l user1
锁定用户 user1 的密码 。
# cat /etc/shawod //两个感叹号表示锁定的意思,用户不能登录
user1:!!$6$emJiiHP0$nrWaUvhAmv.cOuXJJp9/jiZ.Aqwngb9YgGVtx6g7yzCvMqJkecDogtls9CPEDbD4hSuBphXQB.wLMxCblHB3U1:17619:0:99999:7:::
解锁user1的密码
# passwd -u user1
4.一条命令修改密码 用于shell脚本
passwd --stdin 选项可以只输入一遍密码即可更改密码。
echo -e "xxx\nxxx" -e选项支持换行扩展,可以使passwd不加选项更改密码。
修改user1的密码
echo "123456789" |passwd --stdin user1
echo -e "123456789\n123456789" |passwd user1
六、su命令 切换用户
1.su命令
su命令可以切换用户的命令,切换时需要输入用户名和密码。
2.su命令的使用方法
su username //切换到指定的用户,不加载配置文件和环境变量。
su - username //切换到指定的用户,加载配置文件和环境变量。
su - -c "touch /ymp/1.txt" username //用指定用户的身份执行一条命令。
3.实例
切换到用户 wang ,加载其配置。
# su - wang
退回到root权限,两种均可。
$ exit
$ logout
使用用户 wang 的身份 在/tmp下创建一个文件。
# su - -c "touch /tmp/wang.txt" wang
# ll /tmp/wang.txt
七、sudo命令
1.sudo命令
sudo命令用来以其他身份来执行命令,预设的身份为root。在/etc/sudoers中设置了可执行sudo指令的用户。若其未经授权的用户企图使用sudo,则会发出警告的邮件给管理员。用户使用sudo时,必须先输入密码,之后有5分钟的有效期限,超过期限则必须重新输入密码。
2.sudo的配置文件详解
sudo的配置文件是:/etc/sudoers
修改配置文件内容建议使用:visudo命令
[root@wangshaojun-01 ~]# visudo
root ALL=(ALL) ALL
root:授权的用户
ALL:来源IP,可以写IP段。
(ALL):以哪个用户身份运行
ALL:可以写命令,前面加上NOPASSWD: 则不用输入密码。
用户和命令栏,可以分组
Cmnd_Alias CMDS = /bin/nice, /bin/kill, /usr/bin/kill, /usr/bin/killall
User_Alias ADMINS = user1, user2, wang
3.实例
修改配置文件使用户 wang ,有ls touch命令权限。
[root@wangshaojun-01 ~]# visudo
wang ALL=(ALL) /usr/bin/ls, /usr/bin/cat
[wang@wangshaojun-01 ~]# su - wang
[wang@wangshaojun-01 ~]$ ls /root/
[wang@wangshaojun-01 ~]$ sudo ls /root/
[sudo] wang 的密码:
1.txt 2.txt 4.txt anaconda-ks.cfg
修改配置文件通过alias的方式,使用户 wang user1 ,有ls,cat,su的命令权限
[root@wangshaojun-01 ~]# visudo
User_Alias USERS = wang, user1
Cmnd_Alias CMDS = /usr/bin/ls, /usr/bin/cat, /usr/bin/su
USERS ALL=(ALL) CMDS
[root@wangshaojun-01 ~]# su - user1
[user1@wangshaojun-01 ~]$ sudo su - root
[sudo] user1 的密码:
[root@wangshaojun-01 ~]#