一,用户/组基本概念
1,概念
Users and groups:
. Every process (running program) on the system runs as a particular 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.
2,查看当前登录的用户信息
[root@tianyun ~]# id
uid=0(root) gid=0(root) groups=0(root)
3,查看文件的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
4,查看运行的进程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]
5,用户组信息存储的文件
/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
8列所代表的含义
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)“失效时间”字段给出的是一个绝对的天数,如果使用了这个字段,那么就给出相应账号的生存期。期满后,该账号就不再是一个合法的账号,也就不能再用来登录了。(硬限制。)
9) 保留
/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
SHADOW(5) 文件格式和转化 SHADOW(5)
名称
shadow - 影子化了的密码文件
描述
shadow 是一个文件,它包含系统账户的密码信息和可选的年龄信息。
如果没有维护好密码安全,此文件绝对不能让普通用户可读。
此文件的每行包括 9 个字段,使用半角冒号 (“:”) 分隔,顺序如下:
登录名
必须是有效的账户名,且已经存在于系统中。
加密了的密码
请参考 crypt(3) 来了解关于解析此字符串的细节信息。
如果密码字段包含一些不是 crypt(3) 合法结果的字符,比如 ! 或
*,用户将无法使用 unix 密码登录(但是可以通过其它方法登录系统)。
此字段可以为空,此时认证为特定的登录名时,不要求密码。然而,一些读取
/etc/shadow
文件的应用程序,在密码字段为空时,可能决定禁止任何访问。
以叹号开始的密码字段意味着密码被锁定。该行的剩余字符表示锁定之前的密码。
最后一次更改密码的日期
最近一次更改密码的时间,表示从1970年1月1日开始的天数。
0 有特殊意思,表示用户应该在下次登录系统时更改密码。
空字段表示密码年龄功能被禁用。
密码的最小年龄
最小密码年龄是指,用户一次更改密码之后,要等多长时间才再次被允许更改密码。
空字段或 0 表示没有最小密码年龄。
最大密码年龄
最大密码年龄是指,这写天之后,用户必须更改密码。
这写天之后,密码仍然可用。用户将会在下次登录的时候被要求更改密码。
空字段表示没有最大密码年龄,没有密码警告时间段,没有密码禁用时间段(请看下边)。
如果最大密码年龄小于最小密码年龄,用户将会不能更改密码。
密码警告时间段
密码过期之前,提前警告用户的的天数(请参考上边的密码的最大年龄)。
空字段或者 0 表示没有密码警告期。
密码禁用期
密码过期(查看上边的密码最大年龄)后,仍然接受此密码的天数(在此期间,用户应该在下次登录时修改密码)。
密码到期并且过了这个宽限期之后,使用用户的当前的密码将会不能登录。用户需要联系系统管理员。
空字段表示没有强制密码过期。
账户过期日期
账户过期的日期,表示从1970年1月1日开始的天数。
注意,账户过期不同于密码过期。账户过期时,用户将不被允许登录;密码过期时,用户将不被允许使用其密码登
录。
空字段表示账户永不过期。
应该避免使用
0,因为它既能理解成永不过期也能理解成在1970年1月1日过期。
保留字段
此字段保留作将来使用。
文件
/etc/passwd
用户账户信息。
/etc/shadow
安全用户账户信息。
/etc/shadow-
/etc/shadow 的备份文件。
注意,此文件由 shadow
工具集使用,而不是所有的用户和密码管理工具都会使用。
[root@tianyun ~]# man 5 group(不演示了)
关于man手册
1、用户命令
2、系统调用
3、C库调用
4、设备文件及特殊文件
5、配置文件格式
6、游戏
7、杂项
8、管理命令及守护进程
9、Linux内核API(CentOS7以后出现)
之所以分这九个章节是应为有的命令分属不同类,查看命令具体属于man中的哪个章节需要使用命令
二,用户/组管理(重点掌握)
1,用户
1.1 创建用户未指定选项
[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.
1.2 创建用户并指定选项
[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
1.3 删除用户
[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
1.4 用户密码
方法一:root修改其他用户(alice)密码
[root@tianyun ~]# passwd alice
方法二:用户(zhuzhu)登录,自己修改密码。
[zhuzhu@tianyun ~]$ passwd
1.5 组成员管理
注意:只针对已存在的用户 -G 组名 组名 ... 用户名
[root@tianyun ~]# usermod -G hr niuniu2 //覆盖原有的附加组
[root@tianyun ~]# usermod -G fd,it niuniu2
[root@tianyun ~]# usermod -aG hr niuniu2 //增加新的附加组
1.6 其他选项管理
[root@tianyun ~]# usermod -s /sbin/nologin niuniu2
修改登录SHELL
2,用户组
[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
2.1 分类
2.1.1 基本组
随用户创建,自动创建的同名组用户的基本组,显示在/etc/passwd
2.1.2 附加组
用于加入的其他组
2.1.3 案例
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
三,提权(了解)
1,永久提权Switching users with su
[alice@tianyun ~]$ useradd u1
-bash: /usr/sbin/useradd: 权限不够
[alice@tianyun ~]$ su - root
password:
[root@tianyun ~]# useradd u1
成功
2,临时提权Running commands as root with sudo
以root身份授权普通用户xulei
[root@tianyun ~]# vim /etc/sudoers
%wheel ALL=(ALL) NOPASSWD: ALL
[root@tianyun ~]# useradd xulei -G wheel
[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)
四,命令概览
groupadd,groupdel
useradd,usermod,userdel
passwd,chage
五,扩展知识
1, useradd创建用户时,参照的文件...
[root@tianyun ~]# vim /etc/login.defs
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
[root@tianyun ~]# vim /etc/default/useradd
SHELL=/sbin/nologin
/etc/login.defs详解
man login.defs
/etc/login.defs文件定义了与/etc/password和/etc/shadow配套的用户限制设定。这个文件是需要的,缺失并不会影响系统的使用,但是也许会产生意想不到的错误。
如果/etc/shadow文件里有相同的选项,则以/etc/shadow里的设置为准,也就是说/etc/shadow的配置优先级高于/etc/login.defs。
# *REQUIRED* required
# Directory where mailboxes reside, _or_ name of file, relative to the
# home directory. If you _do_ define both, MAIL_DIR takes precedence.
# QMAIL_DIR is for Qmail
#
#QMAIL_DIR Maildir
MAIL_DIR /var/spool/mail
#创建用户时,要在目录/var/spool/mail中创建一个用户mail文件
#MAIL_FILE .mail
# Password aging controls:
#
# PASS_MAX_DAYS Maximum number of days a password may be used.
# PASS_MIN_DAYS Minimum number of days allowed between password changes.
# PASS_MIN_LEN Minimum acceptable password length.
# PASS_WARN_AGE Number of days warning given before a password expires.
#
PASS_MAX_DAYS 99999
#密码最大有效期
PASS_MIN_DAYS 0
#两次修改密码的最小间隔时间
PASS_MIN_LEN 5
#密码最小长度,对于root无效
PASS_WARN_AGE 7
#密码过期前多少天开始提示
#
# Min/max values for automatic uid selection in useradd
#创建用户时不指定UID的话自动UID的范围
UID_MIN 500
#用户ID的最小值
UID_MAX 60000
#用户ID的最大值
#
# Min/max values for automatic gid selection in groupadd
#自动组ID的范围
GID_MIN 500
#组ID的最小值
GID_MAX 60000
#组ID的最大值
#
# If defined, this command is run when removing a user.
# It should remove any at/cron/print jobs etc. owned by
# the user to be removed (passed as the first argument).
#
#USERDEL_CMD /usr/sbin/userdel_local
#当删除用户的时候执行的脚本
#
# If useradd should create home directories for users by default
# On RH systems, we do. This option is overridden with the -m flag on
# useradd command line.
#
CREATE_HOME yes
#使用useradd的时候是够创建用户目录
# The permission mask is initialized to this value. If not specified,
# the permission mask will be initialized to 022.
UMASK 077
# This enables userdel to remove user groups if no members exist.
#
USERGROUPS_ENAB yes
#用MD5加密密码
Password aging
last change 最后一次更改密码的时间
max days 最长过期天数
min days 两次修改密码的最小间隔时间
warn days 警告密码过期时间。
password expired 密码已过期
inactive days不活跃的时期
查找修改密码策略的方法
chage -m 0 -M 90 -W 7 -I 14 username
chage -d 0 username will force a password update on next login.
chage -l username will list a username's current settings.
chage -E YYYY-MM-DD will expire an account on a specific day.
2, 生产环境手动创建用户示例
[root@tianyun~]# useradd maomao100
[root@tianyun~]# echo 123456 |passwd --stdin maomao100
[root@tianyun~]# chage -d 0 maomao100 //强制用户在下一次登录时修改密码
3, 将多个用户加入到指定的组
[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 ~]# cat /etc/group
group1:x:1011:user1
4,替换某个组的成员
[root@localhost ~]# gpasswd -M user2,user3 group1
[root@localhost ~]# cat /etc/group
group1:x:1011:user2,user3
5,删除某个组的某个成员
原组中有三个用户,删除其中一个用户。
[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
[root@localhost ~]#