Linux系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统。
用户的账号一方面可以帮助系统管理员对使用系统的用户进行跟踪,并控制他们对系统资源的访问;另一方面也可以帮助用户组织文件,并为用户提供安全性保护。
每个用户账号都拥有一个唯一的用户名和各自的口令。
用户在登录时键入正确的用户名和口令后,就能够进入系统和自己的主目录。
实现用户账号的管理,要完成的工作主要有如下几个方面:
- 用户账号的添加、删除与修改。
- 用户口令的管理。
- 用户组的管理。
用户管理
为什么需要有用户?
- linux是一个多用户系统
- 权限管理(权限最小化)
用户和用户组
-
用户:存在的目录是为了对系统中的资源做归属
密码:存在的目的是为了对用户做身份认证 -
用户组,在用户组中可以包含一个或者多个用户,方便对多个用户进行授权操作
用户管理相关文件
/etc/passwd
:用户基本信息
/etc/shadow
:用户密码信息、过期时间等
/etc/group
:用户组信息
/etc/gshadow
:用户组密码
/etc/default/useradd
:创建用户的默认配置信息
/etc/skel
:用户家目录模板
/etc/login.defs
:全局用户设定信息
/etc/passwd
:每行是一个用户,用来记录用户的基本信息,每行的格式:
account:password:UID:GID:GECOS:directory:shell
accout:用户名
password:用户密码,密码位置默认是x
UID:用户身份id,用来唯一的标识一个用户
GID:用户组id,用来在系统中唯一的标识一个用户组(这里指的是其基本组的组ID)
GECOS:用户描述信息,可以空白,也可以随意写(useradd -c )
directory:用户家目录
shell:用户所使用的shell类型
/bin/bash-->可以登录系统
/sbin/nologin-->该用户一定无法登录系统
比如:
root : x : 0 : 0 : newuser : /root : /bin/bash
用户名 密 码 用户id 用户所在组的id 描述信息 家目录 shell类型
/etc/group
:用户组信息
在Linux中,创建用户的时候,会自动创建一个组,组名和组ID都和所创建的用户相同,而且,该用户会自动加入到这个组中
c:x:1007:
组成:groupname:password:GID: [user1, user2.....]
groupname:组名
password:组密码
GID:组id
[user1, user2.....]:改组中的用户列表
概念:
用户的基本组(主组):当前用户具有哪个组的权限
用户的附加组:用户额外属于的组
zx
主组:gp02
附加组:gp01、gp03
/etc/default/useradd
:定义创建用户默认选项的文件
#useradd defaults file
:useradd默认文件
GROUP=100
:表示可创建普通组
HOME=/home
:用户的家目录建在/home中,用户的家目录默认创建地
INACTIVE=-1
:是否启用账号过期停权,-1表示不启用;宽限天数,0及以下数字皆为无效数字
EXPIRE=
:账号终止日期,不设置表示不启用,账号失效日期(如:20200715)
SHELL=/bin/bash
:所有SHELL的类型,登录后执行的程序
SKEL=/etc/skel
:用户家目录中的环境文件,默认添加用户的目录默认文件存放位置;也就是说,当我们用adduser添加用户时,用户家目录下的文件,都是从这个目录中复制过去的
CREATE_MALL_SPOOL=yes
:是否创建用户邮箱缓冲,yes表示创建
Linux中的用户类别
可以登录系统的用户:
管理员用户:UID为0的用户
普通用户:就是可以登录系统,但是没有管理员权限的用户
不能登录系统的用户:
系统用户:用来运行一个程序,而不是用来登录系统(一般不用来登录系统,不是不能登录)
各类用户的ID
管理员用户:0
系统用户:1-999
普通用户:1000-60000(自定义UID最大4294967294)
系统用户的特点:
- 因为不需要登录,所以shell类型通常为/sbin/nologin
- 系统用户没有家目录
- 系统用户ID通常小于1000
useradd命令
useradd [options] username
options:
★-d
, --home HOME_DIR:指定用户家目录
-c
, --comment COMMENT:用户说明信息
-e
, --expiredate EXPIRE_DATE:指的账号的过期时间,时间格式 YYYY/MM/DD
★-g
, --gid GROUP:指的用户的基本组的组id
★-G
, --groups GROUP1[,GROUP2,...[,GROUPN]]]:指的用户的附加组列表
★-u
,--uid UID:指的用户的uid
★-m
, --create-home:创建用户的时候自动创建用户家目录(默认就已经使用)
★-M
:不自动创建用户家目录
-o
, --non-unique:通常和-u一起使用,用来让两个用使用相同的uid
★-r
, --system:创建一个系统用户
★-s
, --shell SHELL:在创建用户的时候,指定用户的shell类型
(/bin/bash/,/sbin/nlogin)
创建一个系统用户
useradd -s /sbin/nologin -M -r Jony
passwd命令
passwd [options] username]
(如果不指定用户名,那么就是修改当前用户的密码)
options:
--stdin
-l:锁定用户
-u:解锁用户
-d:删除用户密码
-e:让用户密码过期
echo "123" | passwd --stdin Jony
表示给Jony用户设置密码123 (Jony用户必须存在)
设置密码的原则:
- 长度要够
- 密码复杂度(数字+字母+特殊符号)
userdel命令
功能说明:删除用户帐号。
语 法:userdel [-r][用户帐号]
补充说明:userdel可删除用户帐号与相关的文件。若不加参数,则仅删除用户帐号,而不 删除相关文件。
参 数:
-r
删除用户登入目录以及目录中所有文件。
-f
强制删除用户(甚至当用户已经登入 Linux 系统时此选项仍旧生效)。
userdel很简单,只有一个参数可选 -r ;如果加参数-r ,表示在删除用户的同时,一并把用 户的家目录及本地邮件存储的目录或文件也一同删除;比如我们现在有个用户Jony,其家 目录位于/var目录中,现在我们来删除这个用户;
userdel Jony
注:删除用户Jony,但不删除其家目录及文件;
userdel -r Jony
注:删除用户Jony,其家目录及文件一并删除;
创建用户组groupadd
groupadd [options] groupname
options:
-g GID
:指定组ID
删除用户组groupdel
groupdel groupname
shadow文件详解
zxhk: $6$dgnPoZ0s$6xNKEWz : 17729 : 0 : 99999 : 7 : : :
第一段:用户名
第二段:加密后的密码
第三段:上次修改密码举例元年经过的天数1970年1月1日(如果该字段空,意味着该用户密码被禁用)
第四段:密码最短使用时间(0表示不限制)
第五段:密码最长有效期(99999表示不限制)(如果第5的值小于第四段,那么用户无法修改自己的密码)
第六段:密码到期前几天开始发送警告,提示密码即将过期,请立即修改
第七段:非活动期间,密码到期后的宽限时间(登录系统的时候必须先修改密码,才能登录)
第八段:密码过期时间(也是举例计算机元年经过的天数)(这里和前面的几个时间没有联系)
第九段:保留字段
usermod命令
Linux usermod命令用于修改用户帐号
usermod可用来修改用户帐号的各项设定
语法:
usermod [-LU][-c <备注>][-d <登入目录>][-e <有效期限>][-f <缓冲天数>][-g <群组>][-G <群组>][-l <帐号名称>][-s <shell>][-u <uid>][-m<新的家目录位置>][用户帐号]
-c<备注>
:修改用户账号的备注文字
-d<登入目录>
:修改用户登入时的目录
-e<有效期限>
:修改账号的有限期限
-f<缓存天数>
:修改在密码过期后多少天即关闭改账号
-g<群组>
:修改用户所属的群组
-G<群组>
:修改用户所属的附加群组
-l<账号名称>
:修改用户账号名称
-L
:锁定用户密码,使密码无效
-s<shell>
:修改用户登入后所使用的shell
-u<uid>
:修改用户ID
-U
:解除密码锁定
-m
:移动用户家目录到新的位置
id命令
Linux id命令用于显示用户的ID,以及所属群组的ID。
id会显示用户以及所属群组的实际与有效ID。若两个ID相同,则仅显示实际ID。若仅指定用户名称,则显示目前用户的ID。
作用:用来查看指定的用户信息(或者判断用户是否存在)
语法:
id [-g、-G、-n、-r、-u][--help][--version][用户名称]
参数说明:
-g或--group
:显示用户所属群组的ID
-G或--groups
:显示用户所属附加群组的ID
-n或--name
:显示用户,所属群组或者附加群组的名称
-r或--real
:显示实际ID
-u或--user
:显示用户ID
-help
:显示帮助信息
-version
:显示版本信息
su命令(switch user)
su命令用于变更为其他使用者的身份,除root外,需要键入该使用者的密码
使用权限:所有使用者
语法:
su [-fmp][-c command][-s shell][USER[ARG]]
参数说明:
-f 或 --fast
:不必读启动档(如 csh.cshrc 等),仅用于 csh 或 tcsh
-m -p 或 --preserve-environment
: 执行 su 时不改变环境变数
-c command
: 变更为帐号为 USER 的使用者并执行指令(command)后再变回原来使用者
-s shell
: 指定要执行的 shell (bash csh tcsh 等),预设值为 /etc/passwd 内的该使用者(USER) shell
--help
: 显示说明文件
--version
: 显示版本资讯
--l 或 --login
: 这个参数加了之后,就好像是重新 login 为该使用者一样,大部份环境变数(HOME SHELL USER等等)都是以该使用者(USER)为主,并且工作目录也会改变,如果没有指定 USER ,内定是 root
USER
: 欲变更的使用者帐号
ARG
: 传入新的 shell 参数
实例:
变更账号为root并在执行ls指令后退出变回原使用者
su -c ls root
变更帐号为 root 并传入 -f 参数给新执行的 shell
su root -f
切换用户
hnlinux@Jony:~$ whoami //显示当前用户
hnlinux
hnlinux@Jony:~$ pwd //显示当前目录
/home/hnlinux
hnlinux@Jony:~$ su root //切换到root用户
密码:
root@Jony:/home/hnlinux# whoami
root
root@Jony:/home/hnlinux# pwd
/home/hnlinux
切换用户,改变环境变量
hnlinux@Jony:~$ whoami //显示当前用户
hnlinux
hnlinux@Jony:~$ pwd //显示当前目录
/home/hnlinux
hnlinux@Jony:~$ su - root //切换到root用户
密码:
root@Jony:/home/hnlinux# whoami
root
root@Jony:/home/hnlinux# pwd //显示当前目录
/root
Comments NOTHING