用户管理
1.用户/组基本概念
概念
Users and groups:
. Every process (running program) on the system runs as aparticular user.
. Every file is owned by a particular user.
. Access to files and directories are restricted by user.
. The user associated with a running process determines the files and directories accessible to that process.
#查看当前登录的用户信息:
[root@tianyun ~]# id
uid=0(root) gid=0(root) groups=0(root)
#查看文件的owner:
[root@tianyun ~]# ll /home/
drwx------. 4 alice alice 4096 Jun 2 15:59 alice
drwx------. 2 root root 16384 Jun 1 23:09 lost+found
drwxr-xr-x 2 root root 4096 Jun 2 15:33 tianyun
#查看运行进程的username:
[root@tianyun ~]# ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 19360 1536 ? Ss 13:29 0:00 /sbin/init
root 2 0.0 0.0 0 0 ? S 13:29 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? S 13:29 0:00 [migration/0]
root 4 0.0 0.0 0 0 ? S 13:29 0:00 [ksoftirqd/0]
#用户组信息存储的文件:
/etc/passwd(7列)
root:x:0:0:root:/root:/bin/bash
#用户名:x:uid:gid:描述:HOME:shell
#系统约定: RHEL6
uid: 0 特权用户
uid: 1~499 系统用户
uid: 500+ 普通用户
#The root user
. uid is 0
. all power
. This user has the power to override normal privileges on the file system
. installing or removing software and to manage system files and directorie
. Most devices can only be controlled by root
#/etc/shadow(8列)
root:$1$MYG2NDG6$a1wtyr5GDM2esAPjug0YP0:15636:0:99999:7: : :
#加密算法$id$salt$encrypted
$1: MD5
$5: SHA-256
$6: SHA-512
root:$1$MYG2NDG6$a1wtyr5GDM2esAPjug0YP0:15636:0:99999:7:: :
--------------------------
1)“登录名”是与/etc/passwd文件中的登录名相一致的用户账号
2)“口令”字段存放的是加密后的用户口令字,如果为空,则对应用户没有口令,登录时不需要口令;
星号代表帐号被锁定;
双叹号表示这个密码已经过期了。
$6$开头的,表明是用SHA-512加密的,
$1$ 表明是用MD5加密的
$2$ 是用Blowfish加密的
$5$ 是用 SHA-256加密的。
3)“最后一次修改时间”表示的是从某个时刻起,到用户最后一次修改口令时的天数。时间起点对不同的系统可能不一样。例如在SCOLinux中,这个时间起点是1970年1月1日。
4)“最小时间间隔”指的是两次修改口令之间所需的最小天数。
5)“最大时间间隔”指的是口令保持有效的最大天数。
6)“警告时间”字段表示的是从系统开始警告用户到用户密码正式失效之间的天数。
7)“不活动时间”表示的是用户没有登录活动但账号仍能保持有效的最大天数。(软限制。到期后多少天就不能用账号了。)
8)“失效时间”字段给出的是一个绝对的天数,如果使用了这个字段,那么就给出相应账号的生存期。期满后,该账号就不再是一个合法的账号,也就不能再用来登录了。(硬限制。)
- 保留
/etc/group
root:x:0:
[root@tianyun ~]# man 5 passwd
PASSWD(5) File formats PASSWD(5)
NAME 名称
passwd - 密码文件
描述
Passwd 是个文本文件, 它包含了一个系统帐户列表,
给出每个帐户一些有用的信息,比如用户 ID,组 ID, 家目录, shell,等.
通常它也包含了每个用户经过加密的密码.
它通常应该是可读的(许多命令,工具程序,象 ls(1) 用它做用户 Id
到用户名称的映射),但是只允许超级用户有写方式权限.
在过去美好的日子里,这种一般的读许可没有什么大问题.
每个人都能读到加密了的密码,因为硬件太慢以至于不能解开一个
精选的密码,另外,这基本假定是为友好的使用团体使用的.
现在,许多人运行一些版本的影子密码套件,它们在 /etc/passwd
的密码域里是 *,而不再是加密的口令, 加密的口令放在 /etc/shadow
中,那个文件只有超级用户能读.
不管是否使用了影子密码,许多系统管理员使用一个星号在加密的密码字段
以确保用户不能鉴别他(她)自己的密码. (见下面的注意)
如果你建立了一个新的登录,首先放个星号在密码字段, 然后使用
passwd(1) 设置它.
(密码文件)里每行一条记录,并且每行有这样的格式:
account:password:UID:GID:GECOS:directory:shell
(帐号:密码:用户ID:组ID:一般的信息:目录:shell)
[root@tianyun ~]# man 5 shadow
[root@tianyun ~]# man 5 group
关于man手册
1、用户命令
2、系统调用
3、C库调用
4、设备文件及特殊文件
5、配置文件格式
6、游戏
7、杂项
8、管理命令及守护进程
9、Linux内核API(CentOS7以后出现)
之所以分这九个章节是应为有的命令分属不同类,查看命令具体属于man中的哪个章节需要使用命令
#2.用户/组管理
用户:
==创建用户 未指定选项==
[root@tianyun ~]# useradd user01
. 未指定该用户的主组
. 未指定该用户的附加组
. 未指定用户的HOME
. 未指定用户的SHELL
. 未指定用户的UID...
[root@tianyun ~]# grep 'user01' /etc/passwd /etc/shadow /etc/group
/etc/passwd:user01:x:507:512::/home/user01:/bin/bash
/etc/shadow:user01:!!:16589:0:99999:7:::
/etc/group:user01:x:512:
[root@tianyun ~]# id user01
uid=507(user01) gid=512(user01) groups=512(user01)
[root@tianyun ~]# ls /var/spool/mail/user01
/var/spool/mail/user01
小结:
如果创建一个用户时,未指定任何选项,系统会创建一个和用户名相同的组作为用户的Primary Group.
==创建用户 指定选项==
[root@tianyun ~]# useradd user02 -u 1503 //创建用户usr02,指定uid
[root@tianyun ~]# useradd user03 -d /aaa //创建用户user03 指定家目录
[root@tianyun ~]# useradd user05 -s /sbin/nologin //创建用户并指定shell
[root@tianyun ~]# useradd user07 -G hr,it,fd //创建用户,指定附加组
[root@tianyun ~]# useradd user10 -u 4000 -s /sbin/nologin
==删除用户========
[root@tianyun ~]# userdel user10
//删除用户user10,但不删除用户家目录和mail spool
[root@tianyun ~]# ll -d /home/user10/
drwx------ 3 506 510 4096 09-01 21:14 /home/user10/
[root@tianyun ~]# ll /var/spool/mail/user10
-rw-rw---- 1 506 mail 0 09-01 21:14 /var/spool/mail/user10
[root@tianyun ~]# userdel -r user2
//删除用户user2,同时删除用户家目录和mail spool
==用户密码========
方法一:root修改其他用户(alice)密码
[root@tianyun ~]# passwd alice
方法二:用户(zhuzhu)登录,自己修改密码。
[zhuzhu@tianyun ~]$ passwd
==组成员管理========
注意:只针对已存在的用户 -G 组名 组名 ... 用户名
[root@tianyun ~]# usermod -G hr niuniu2 //覆盖原有的附加组
[root@tianyun ~]# usermod -G fd,it niuniu2
[root@tianyun ~]# usermod -aG hr niuniu2 //增加新的附加组
==其它选项管理=======
[root@tianyun ~]# usermod -s /sbin/nologin niuniu2
#修改登录SHELL
用户组:
[root@tianyun ~]# groupadd hr
[root@tianyun ~]# groupadd net01 -g 2000
//添加组net01,并指定gid 2000
[root@tianyun ~]# grep 'net01' /etc/group
//查看/etc/group中组net01信息
[root@tianyun ~]# groupdel net01
//删除组net01
分类
#基本组
随用户创建,自动创建的同名组
用户的基本组,显示在/etc/passwd
#附加组
用户加入的其他组。
#案例
1 useradd是创建用户的命令。
2 usermod是修改用户的命令。
3 groupadd是创建组的命令。
4 -u 制定用户的UID。
5 -g 制定用户的基本组。
6 -G 制定用户的附加组。
7 /etc/passwd 可以查看的是用户的基本组。
8 /etc/group 可以查看用户的附加组。
#一、创建用户AAA,同时生成基本组AAA
[root@QF ~]# useradd AAA
[root@QF ~]# grep AAA /etc/passwd
AAA:x:6001:6001::/home/AAA:/bin/bash
#二、创建用户BBB,同时生成基本组BBB
[root@QF ~]# useradd BBB
[root@QF ~]# grep BBB /etc/passwd
BBB:x:6002:6002::/home/BBB:/bin/bash
#三、创建组CCC
[root@qf ~]# groupadd CCC
[root@qf ~]# grep CCC /etc/group
CCC:x:7001:
#四、修改用户AAA的基本组为CCC.
#五、查看passwd中,用户AAA的基本组是CCC。
[root@qf ~]# usermod AAA -g CCC
[root@qf ~]# grep AAA /etc/passwd
AAA:x:6001:7001::/home/AAA:/bin/bash
#六、修改用户BBB的附加组为CCC.
#七、查看group中,用户BBB的附加组是CCC。
[root@qf ~]# usermod BBB -G CCC
[root@qf ~]# grep CCC /etc/group
CCC:x:7001:BBB
3.提权(了解)
#永久提权Switching users with su
[alice@tianyun ~]$ useradd u1
-bash: /usr/sbin/useradd: 权限不够
[alice@tianyun ~]$ su - root
password:
[root@tianyun ~]# useradd u1
成功
#临时提权Running commands as root with sudo
#以root身份授权普通用户xulei
[root@tianyun ~]# vim /etc/sudoers (vim 脚本)
%wheel ALL=(ALL) NOPASSWD: ALL
允许wheel用户组中的用户在不输入该用户的密码的情况下使用所有命令
[root@tianyun ~]# useradd xulei -G wheel (-G 添加到附加组)
[root@tianyun ~]# id xulei
uid=504(xulei) gid=504(xulei) 组=504(xulei),10(wheel)
# passwd xulei
切换用户xulei登陆
[xulei@tianyun ~]$ useradd gougou10
-bash: /usr/sbin/useradd: 权限不够
[xulei@tianyun ~]$ sudo useradd gougou10
[xulei@tianyun ~]$ id gougou10
uid=505(gougou10) gid=505(gougou10) 组=505(gougou10)
4.命令概览
groupadd(创建组)groupdel(删除组)
passwd(修改密码)
5.扩展知识
1.用户创建时的默认设置能否改变呢?(比如SHELL是禁止登陆)
原理
/etc/default/useradd文件为设置添加的用户规则文件。
示例
[root@tianyun ~]# vim /etc/default/useradd (vim 脚本)
SHELL=/sbin/nologin (禁止shell登录)
---尝试新建用户吧。
2.用户密码策略能否设置?(比如密码有效期只有14天)
设置个别用户
#chage
原理
chage 命令负责管理用户密码时效问题
名词
last change 最后一次更改密码的时间
max days 最长过期天数
min days 两次修改密码的最小间隔时间
warn days 警告密码过期时间。
password expired 密码已过期
inactive days不活跃的时期,密码过期后,锁定帐号的天数
选项:
-d, --lastday 最近日期 将最近一次密码设置时间设为“最近日期”
-E, --expiredate 过期日期 将帐户过期时间设为“过期日期”
-h, --help 显示此帮助信息并推出
-I, --inactive INACITVE 过期 INACTIVE 天数后,设定密码为失效状态
-l, --list 显示帐户年龄信息
-m, --mindays 最小天数 将两次改变密码之间相距的最小天数设为“最小天数”
-M, --maxdays 最大天数 将两次改变密码之间相距的最大天数设为“最大天数”
-R, --root CHROOT_DIR chroot 到的目录
-W, --warndays 警告天数 将过期警告天数设为“警告天数”
#案例
1.设置用户密码最小天数(-m),最大天 数(-M),提醒天数(-W),不活跃天数(-l)
chage -m 0 -M 90 -W 7 -I 14 username
2.设置用户下次登录立刻更改密码。
chage -d 0 username
3.列出用户密码策略信息。
chage -l username
4.设置用户密码过期日期。
chage -E YYYY-MM-DD username
#设置新建用户
/etc/login.defs
#原理
/etc/login.defs是设置用户帐号密码限制的文件。该文件里的配置对root用户无效
#示例
[root@tianyun ~]# vim /etc/login.defs (vim 脚本)
MAIL_DIR /var/spool/mail
PASS_MAX_DAYS 30
PASS_MIN_DAYS 0
PASS_MIN_LEN 5
PASS_WARN_AGE 7
CREATE_HOME yes
ENCRYPT_METHOD SHA512
3.生产环境手动创建用户示例:
1.创建用户
[root@tianyun~]# useradd maomao100
2.免会话配置密码。
[root@tianyun~]# echo 123456 |passwd --stdin maomao100
3.强制用户在下一次登录时修改密码
[root@tianyun~]# chage -d 0 maomao100
4.如何将多个用户加入到指定的组:
#前言
usemod -G 改写用户的组之后,用户的组信息是覆盖,也就是说usermod使用户只能存在于一个组。那么如何使用户同时属于多个组呢? gpasswd -a试试吧
#案例
[root@localhost ~]# useradd user1
[root@localhost ~]# useradd user2
[root@localhost ~]# useradd user3
[root@localhost ~]# groupadd group1
[root@localhost ~]# gpasswd -a user1 group1
正在将用户“user1”加入到“group1”组中
[root@localhost ~]# gpasswd -a user2 group1
[root@localhost ~]# cat /etc/group
group1:x:1011:user1,user2
5.如何替换某个组的所有成员呢?
[root@localhost ~]# gpasswd -M user2,user3 group1
[root@localhost ~]# cat /etc/group
group1:x:1011:user2,user3
6.如何删除某个组的某个成员
原组中有三个用户,删除其中一个用户。
[root@localhost ~]# grep group1 /etc/group
group1:x:1011:user3,user1,user2
[root@localhost ~]# gpasswd -d user1 group1
正在将用户“user1”从“group1”组中删除
[root@localhost ~]# grep group1 /etc/group
group1:x:1011:user3,user2