用户和组
一、用户:
是用来操作系统中不同功能的身份.
Linux系统中用户的分类
1)超级用户: root uid=0
2)系统用户:不需要登录系统,服务于应用程序,维护系统的运行
bin nobody uid=1-499
3)普通用户:可以登录的用户 uid>=500
UID:用户标识
添加用户:useradd username 创建的时候可以指定u、g、c等选项
查看当前用户的ID:id username
查看当前用户的名字:whoami
设置用户密码:passwd username (普通用户只能通过passwd修改自己本身密码)
删除一个用户:userdel username (-r 选项会连同创建的家目录一同删除)
创建组:groupadd groupname
删除组:groupdel groupname (用户的主要组不可以删除)
修改用户信息:usermod -[u,g,G等] username
修改组的信息:groupmod groupname
为组添加一个管理员:gpasswd -A username groupname
用组管理员为组添加一个用户成员:gpasswd -a usrname groupname
删除一个组成员:gpasswd -d username group
为组设定一个密码:gpasswd groupname
系统文件:
/etc/passwd:用户信息
/etc/shadow:用户密码相关的信息
useradd user1
1、会在/etc/passwd添加一行
2、会在/etc/group添加一行
3、会在/etc/shadow添加一行
4、会在/etc/gshadow添加一行
5、会在/home目录下建立一个与用户同名的目录作为家目录,同时会从/etc/skel目录中复制出所有的隐藏文件到该目录
6、修改权限
-u 指定用户的uid
-g 指定用户的gid
-G 指定附属组,可以有多个, 但是这些附属组必须是系统内已经存在的
-c 指定描述
-d 指定家目录
-M 不建立家目录
-s 指定shell
-e 指定用户过期时间, 日期
-f 指定用户过期时间, 天数
#useradd u1 -u 2000 -g 2000 -G 516 -d /u1 -c user1 -s /sbin/nologin
usermod
与useradd参数差不多,一个是在创建用户时设定,一个是用户创建好
-u -g -G -d -s
-L 锁定用户
-U 解除锁定
-l 改名
-a 添加用户到组,结合-G使用
passwd -l 锁定用户
-u 解锁用户
-n 密码最小使用期限 天数
-x 密码最大使用期限 天数
-w 密码过期前几天提醒 天数
whoami
who
who am i
w
users
id
finger username 查看用户的相关信息
chfn username 修改用户相关信息
userinfo username X window下修改用户相关信息
对用户的操作:新增、删除、修改、查看、设置密码
1、查看用户 id
# id //默认查看的是当前用户的信息
uid=0(root) gid=0(root) groups=0(root)
# whoami //查看当前用户是谁
root
# id lp //查看指定用户的信息
uid=4(lp) gid=7(lp) groups=7(lp)
uid:用户标识
gid:组标识,用户的主组
groups:用户所属组信息
2、添加用户 useradd
注意:添加用户的操作只有root能操作
# useradd niulang
反例:
# su - niulang // switch user切换用户
$ useradd zhinv
-bash: /usr/sbin/useradd: Permission denied 权限被拒绝,普通用户是无法添加用户的
$ exit
logout
# id niulang
uid=500(niulang) gid=500(niulang) groups=500(niulang)
添加用户时,如果不指定用户的组,那么默认会创建一个与用户名同名的组作为用户的主要组。
1)添加用户时指定选项 man useradd
-c:注释性的描述信息
-d:指定用户的家目录
默认情况下:
root的家目录是/root
普通用户的家目录是/home
-g:指定用户的主要组,前提:组是必须存在的
-G:指定用户的附加组(附属组),前提:组是必须存在的
-s:指定用户的登录shell
-u:指定用户的uid
# head -1 /etc/passwd
root:x:0:0:root:/root:/bin/bash
用户名:密码:uid:gid:注释性描述:用户的家目录:用户的登录shell
-u -g -c -d -s
# echo $SHELL //查看当前shell,echo可以用来打印变量
/bin/bash
要求区分的两种shell
/bin/bash:可登录shell,如果用户的shell是这个,那么该用户可以登录到系统中
/sbin/nologin:非登录shell,如果用户的shell是这个,那么该用户是不允许登录到系统的
格式:useradd 选项 选项的参数 ... 用户名
例子:
# useradd -u 600 -s /sbin/nologin zhinv
# id zhinv
uid=600(zhinv) gid=600(zhinv) groups=600(zhinv)
# tail -1 /etc/passwd
zhinv:x:600:600::/home/zhinv:/sbin/nologin
# useradd -g 502 wangmu 错的
useradd: group '502' does not exist
# useradd -g zhinv wangmu
# id wangmu
uid=601(wangmu) gid=600(zhinv) groups=600(zhinv)
3、删除用户 userdel
# userdel wangmu //删除的时候不会删除用户的家目录和邮箱
# useradd wangmu //能添加,但是会有提示消息
useradd: warning: the home directory already exists.
Not copying any file from skel directory into it.
Creating mailbox file: File exists
-r: 可以干净的删除一个用户
# userdel -r wangmu
# cd /var/spool/mail/ 邮箱所在位置
4、给用户设置密码
passwd:
超级用户:既可以修改自己的密码,又可以修改别人的密码,并且不需要提供当前密码
普通用户:只能修改自己的密码,要求严格,并且需要提供当前密码
# passwd // 默认修改当前用户的密码
Changing password for user root.
New password:
BAD PASSWORD: it is based on a dictionary word
BAD PASSWORD: is too simple
Retype new password:
passwd: all authentication tokens updated successfully.
# passwd niulang //修改指定用户的密码
Changing password for user niulang.
New password:
BAD PASSWORD: it is too short
BAD PASSWORD: is too simple
Retype new password:
passwd: all authentication tokens updated successfully.
反例:
# su - niulang
$ passwd zhinv
passwd: Only root can specify a user name.
普通用户修改自己的密码,需要当前密码,而且长度最少6位,而且不能是字典单词
$ passwd
Changing password for user niulang.
Changing password for niulang.
(current) UNIX password:
New password:
BAD PASSWORD: it is based on a dictionary word
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
/etc/shadow:存放用户密码信息的文件
# head -1 /etc/shadow
root:$6$9AOmQbxm$3X1qbP0srKNql7jCXpmwhyNxGTHmIbT65zF.:16276:0:99999:7:::
用户名:加密后的密码:....
$6$:加密算法是sha512
$1$:加密算法是md5
5、修改用户:常用
usermod: //modify:修改
-G:修改用户的附属组,不管用户原来的附属组如何,直接覆盖
-g:修改用户的主要组
-a:一般和-G联合使用,追加附属组
-u:修改用户的uid
-d:修改用户的家目录
-s:修改用户的shell
# useradd -G niulang,zhinv sha
# id sha
uid=601(sha) gid=601(sha) groups=601(sha),500(niulang),600(zhinv)
# useradd sha2
# usermod -G sha2 sha
# id sha
uid=601(sha) gid=601(sha) groups=601(sha),602(sha2)
# usermod -a -G niulang sha
# id sha
uid=601(sha) gid=601(sha) groups=601(sha),500(niulang),602(sha2)
练习:
1)添加三个用户usr1,usr2,usr3
# useradd usr1
# useradd usr2
# useradd usr3
2)添加用户usr4,同时指定其主组为usr1,uid为2014,并验证用户创建是否正确
# useradd -g usr1 -u 2014 usr4
# id usr4
3)添加用户usr5,家目录为/tmp/usr5,附加组为usr2,usr3
# useradd -d /tmp/usr5 -G usr2,usr3 usr5
4)修改usr4的附加组为usr2,usr3,注意验证
# usermod -G usr2,usr3 usr4
# id usr4
5)修改usr1的shell为非登录shell
# usermod -s /sbin/nologin usr1
# grep usr1 /etc/passwd //仅过滤出文件中含有usr1的行
6)彻底删除usr5用户
# userdel -r usr5
7)为用户usr1设置密码redhat
# passwd usr1
二、组 group
用户和组的关系:组中可以没有用户、也可以有一个或者多个用户。用户只有一个主要组,可以同时属于多个组,但是除了主组以外的其他组称为附属组。
组的分类:从用户的角度分的,分为:
主组:primary group、initial group、first group,用户的默认组,也就是gid所标识的组
附属组:secondary group、supplementary group
1、添加组 groupadd
# groupadd g1
-g:添加组时,指定gid是多少
# groupadd -g 800 g2
# tail -2 /etc/group
g1:x:603:
g2:x:800:
组名:密码:gid:组里成员
2、修改组: groupmod
# groupmod -g 888 g2
# grep g2 /etc/group
g2:x:888:
修改组的名字 : -n 新名字
# groupmod -g 588 -n group1 g1
# grep gr /etc/group
group1:x:588:
3、删除组:groupdel
注意:不能够删除用户的主要组,能够删除用户的附属组
# groupdel group1
# grep group1 /etc/group //没有任何输出,表示文件中没有含有group1关键字的行
#
小实验:
# useradd t1
# useradd t2
# id t1
uid=603(t1) gid=603(t1) groups=603(t1)
# id t2
uid=604(t2) gid=604(t2) groups=604(t2)
# tail -2 /etc/group
t1:x:603:
t2:x:604:
# groupdel t1 //t1组是t1用户的主要组,不能删除
groupdel: cannot remove the primary group of user 't1'
# usermod -g t2 t1
# usermod -G t1 t2
# id t1
uid=603(t1) gid=604(t2) groups=604(t2)
# id t2
uid=604(t2) gid=604(t2) groups=604(t2),603(t1)
# groupdel t1 //t1组仅仅是t2用户的附属组,可以被删除
# grep t1 /etc/group
4、组管理 gpasswd
管理/etc/group和/etc/gshadow文件的,每一个组可以有管理员,成员和密码
给组加密码:可以让知道组密码的人,临时的切换到该组中,能够使用该组的资源。
1)指定组的管理员列表
# groupadd groups
# useradd u1
# gpasswd -A u1 groups //u1用户就是groups组的管理员了
2)向组中添加成员
# su - u1
$ gpasswd -a sha groups
Adding user sha to group groups
# tail /etc/group
groups:x:889:sha
3)给组设置密码
# gpasswd groups
Changing the password for group groups
New Password:
Re-enter new password:
4)切换组
# su - niulang
$ id
uid=500(niulang) gid=500(niulang) groups=500(niulang)
$ newgrp groups //临时切换组
Password:
$ id
uid=500(niulang) gid=889(groups) groups=500(niulang),889(groups)
5)将用户从组中删除
# gpasswd -d sha groups
Removing user sha from group groups
/etc/passwd: 保存用户信息的文件
/etc/shadow: 保存用户密码相关信息的文件
/etc/group: 保存组信息的文件
/etc/gshadow:保存组密码相关信息的文件
1、/etc/passwd: *****
# man 5 passwd
# head -1 /etc/passwd
root:x:0:0:root:/root:/bin/bash
用户名:密码占位符:UID:GID:描述信息:家目录:登录shell
2、/etc/shadow
# useradd zhangsan
用户有无密码两种情况:
# tail -1 /etc/shadow.
zhangsan:!!:16276:0:99999:7:::
# passwd zhangsan
Changing password for user zhangsan.
New password:
BAD PASSWORD: it is WAY too short
BAD PASSWORD: is a palindrome
Retype new password:
passwd: all authentication tokens updated successfully.
# tail -1 /etc/shadow
zhangsan:$6$/23ax9CR$IDSfqNF3gZqDq4L0.Bdqd19SLbzBa6CuSpuOn.9YrFmSWYy09xPGa47SVEsQXfQJDybUDOzsu4vG.FV
KMt91l/:16276:0:99999:7:::
# man 5 shadow
zhangsan:!!:16276:0:99999:7:::
1)用户名
2)加密后的密码
3)上一次密码修改时间(单位是天,是距离1970年1月1日多少天)
4)密码最小生存周期 单位:天 0表示随时可以修改密码;2表示两天内不能修改
5)密码最大生存周期 单位:天,密码使用的最长时间
6)密码到期前几天开始警告
7)密码过期之后到账户失效之前的时间限制 密码过期之后还可以用几天
8)账户过期时间
9)保留列
查看用户的密码相关的时间
# chage -l root
Last password change : Jul 25, 2014
Password expires : never
Password inactive : never
Account expires : never
Minimum number of days between password change : 0
Maximum number of days between password change : 99999
Number of days of warning before password expires : 7
# chage -d 0 用户名 用户下次登录必须更改密码
chage -m 2 u1 修改密码最少使用天数
chage -M 50 u1 修改密码最大使用天数(密码过期时间)
chage -I 5 u1 密码过期后到账户失效的天数(密码过期后还能使用的天数)
chage -E "2019-3-5" u1 修改的是账户的过期时间
3、/etc/group
# head -1 /etc/group
root:x:0:
组名:密码占位符:GID:用户列表
4、/etc/gshadow
# head -1 /etc/gshadow
root:::
组名: 加密后的密码:组管理员:组成员
/etc/login.defs 默认创建新用户的配置文件
和用户登录相关的文件或目录
/etc/profile
此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行. 并从/etc/profile.d目录的配置文件中搜集shell的设置
/etc/bashrc
为每一个运行bash shell的用户执行此文件.当bash shell被打开时,该文件被读取
~username/.bashrc
每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次!默认情况下,他设置一些环境变量,执行用户的.bashrc文件
~username/.bash_profile
该文件包含专用于你的bash shell的bash信息,当登录时以及每次打开新的shell时,该该文件被读取。
/etc/profile.d/*
profile类的文件:
设定环境变量
运行命令或脚本
bashrc类的文件:
设定本地变量
定义命令别名
站在用户登录的角度来说,SHELL的类型:
登录式shell:
正常通过某终端登录
su - USERNAME
su -l USERNAME
非登录式shell:
su USERNAME(使用su切换用户,不带任何参数)
GUI下打开命令窗口
自动执行的shell脚本
登录式shell如何读取配置文件:
/etc/profile -->/etc/profile.d/*.sh -->~/.bash_profile -->~/.bashrc -->/etc/bashrc
非登录式shell如何读取配置文件:
~/.bashrc -->/etc/bashrc -->/etc/profile.d/*.sh
su - :完全登录shell,切换后用户拥有自己的一套环境变量
su:不完全登录shell,切换后用户使用的是其他用户的环境变量
和新创建用户相关的文件:/etc/login.defs /etc/default/useradd
/etc/rc.local 是系统开机后执行的最后一个脚本,一般被管理员执行一些系统开机运行的命令