什么是用户?
用户需要用账号来访问系统,服务和信息。系统中每个进程都使用一个特定的用户运行。每个文件都属于一个特定的额用户所有。
对文件和目录的访问会收到用户的限制。根据运行进程相关联的用户可确定该进程可以访问的文件和目录
id命令用于显示当前已登录用户的信息。也可以将用户名作为id命令的参数,来获取她的基本信息
[root@localhost ~]# id uid=0(root) gid=0(root) 组=0(root) 环境=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 [root@localhost ~]# id root uid=0(root) gid=0(root) 组=0(root)
若要查看与某一文件或目录相关联的用户,可以使用ls -l命令(第三列显示用户名)
[root@localhost ~]# ls -l /tmp/ 总用量 892 -rw-r--r--. 1 root root 1596 8月 20 19:21 anaconda.log drwx------. 2 zhang zhang 25 8月 21 09:49 firefox_zhang drwxr-xr-x. 2 root root 18 8月 20 19:07 hsperfdata_root -rw-r--r--. 1 root root 581 8月 20 19:21 ifcfg.log -rwx------. 1 root root 836 8月 20 19:18 ks-script-DypRd9 -rw-r--r--. 1 root root 0 8月 20 19:20 packaging.log -rw-r--r--. 1 root root 0 8月 20 19:20 program.log -rw-r--r--. 1 root root 0 8月 20 19:20 sensitive-info.log
使用ps命令可以查看进程信息。默认仅显示当期shell中的进程。添加a选项可以查看与终端相关的所有进程。若要查看进程相关联的用户,在命令中加u选项
[root@localhost ~]# ps au USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 12565 0.1 2.3 324024 44344 tty1 Ssl+ 02:55 1:12 /usr/bin/X :0 -background none -no zhang 55253 0.0 0.1 116688 2932 pts/0 Ss 05:57 0:00 bash root 55322 0.0 0.1 220852 3328 pts/0 S 05:57 0:00 su root 55330 0.0 0.1 116692 3248 pts/0 S+ 05:57 0:00 bash root 63929 0.0 0.1 116576 3388 pts/1 Ss 14:08 0:00 -bash root 64171 0.0 0.0 151064 1816 pts/1 R+ 14:22 0:00 ps au
以上命令的输出是使用名称来显示用户,但是操作系统内部是按照UID来标识用户的。默认情况下,本地用户名称和编号的映射被存储在/etc/passwd中
username:password:UID:GID:GECOS:/home/dir:shell username:是UID到名称的一种映射,便于用户使用 password:以前是以加密格式保存密码的位置,现在密码存在在/etc/shadow中 UID:用户的ID,标识用户的标号 GID:组的ID GECOS该字段可以是任意文本,通常包含用户的实际姓名 /home/dir 用户的个人数据和配置文件所处的位置 shell 用户登录是运行的程序
什么是组:
与用户一样,组也有自己的名称和编号(GID)。本地组在/etc/group中定义
组可以用来协助管理者访问
管理本地用户账号
创建,修改,锁定,删除,本地定义的用户账号
useradd创建用户
不带选项运行时,useradd username会为/etc/passwd 中的所有字段设置合理的默认值,在默认情况下,useradd命令不会设置任何有效的密码,用户必须要等设置了密码才可以登录
useradd --help 可以显示用于覆盖默认值的基本选项,在多数情况下,相同的选项可以用户usermod命令,可以对现有的用户进行修改
usermod修改现有用户
usermod --help 可以显示用户修改账号的基本选项,一些常见的选项包括
[root@localhost ~]# usermod --help 用法:usermod [选项] 登录 选项: -c, --comment 注释 GECOS 字段的新值 -d, --home HOME_DIR 用户的新主目录 -e, --expiredate EXPIRE_DATE 设定帐户过期的日期为 EXPIRE_DATE -f, --inactive INACTIVE 过期 INACTIVE 天数后,设定密码为失效状态 -g, --gid GROUP 强制使用 GROUP 为新主组 -G, --groups GROUPS 新的附加组列表 GROUPS -a, --append GROUP 将用户追加至上边 -G 中提到的附加组中, 并不从其它组中删除此用户 -h, --help 显示此帮助信息并推出 -l, --login LOGIN 新的登录名称 -L, --lock 锁定用户帐号 -m, --move-home 将家目录内容移至新位置 (仅于 -d 一起使用) -o, --non-unique 允许使用重复的(非唯一的) UID -p, --password PASSWORD 将加密过的密码 (PASSWORD) 设为新密码 -R, --root CHROOT_DIR chroot 到的目录 -s, --shell SHELL 该用户帐号的新登录 shell -u, --uid UID 用户帐号的新 UID -U, --unlock 解锁用户帐号 -Z, --selinux-user SEUSER 用户账户的新 SELinux 用户映射
userdel删除用户
userdel username可以将用户从/etc/passwd 中删除,但是默认情况下保留的家目录不变
userdel -r username 同事删除用户的家目录
id显示用户信息,包括用户的UID和组成员
id username 将显示username的用户信息,包括用户UID编号和组成成员
[root@localhost ~]# id zhang uid=1000(zhang) gid=1000(zhang) 组=1000(zhang),10(wheel)
passwd设置密码
passwd username可用于设置用户的初始密码或者更改该用户的密码
root用户可以将密码设置为任何值,即使密码不符合规范,也是会成功更新
普通用户的长度必须至少8个字符,切不可以是词语,用户名或者以前使用过的相似的密码
UID范围:
特定UID编号和编号范围可供RHEL用户特殊的目的
UID 0始终分配至超级用户root
UID 1-999 是系统用户,
UID 1000+可供分配给普通用户的范围
练习:
添加用户alex
[root@localhost ~]# useradd alex
通过检查/etc/passwd 文件确认alex已经添加
[root@localhost ~]# tail -2 /etc/passwd zhang:x:1000:1000:zhang:/home/zhang:/bin/bash alex:x:1001:1001::/home/alex:/bin/bash
使用passwd命令初始化alex的密码
[root@localhost ~]# passwd alex 更改用户 alex 的密码 。 新的 密码: 重新输入新的 密码: passwd:所有的身份验证令牌已经成功更新。
管理本地组账号
创建,修改,删除本地定义的组账户
管理补充组:组必须存在后,用户才能添加到其中
groupadd 创建组
groupadd groupname 如果不带选项,将使用/etc/login.defs文件中指定范围内的下一个可用GID
-g GID用户指定具体的GID
-r 选项将使用/ect/login.defs文件中有效系统GID编号范围内的GUID创建系统组
groupmod 修改现有的组
-n 选项用户将现有的组名的GID映射,指定到新的名称
-g 用于指定新的GID
groupdel删除组
如果组是任意现有用户的主要组,不能被删除,与userdel一样,先检查所有的文件系统,确保没有任何遗留由该组拥有的任何文件
usermod变更组成员
组成员可以通过用户管理进行控制,通过usermod -g groupname更改用户的主要组
通过usermod -aG groupname username将用户添加到补充组
可以分配一个普通用户到管理员组
[root@localhost ~]# gpasswd -A alex wheel
不像usermod命令必须要root运行,gpasswd可以让一个普通用户运行,但是用户仅能够添加和删除除他们以管理员分配的组成员
[root@localhost ~]# gpasswd -a zhang wheel
正在将用户“zhang”加入到“wheel”组中
练习:
创建名为shakespeare,组ID为30000的补充组
[root@localhost ~]# groupadd -g 30000 shakespeare
创建名为artists的补充组
[root@localhost ~]# groupadd artists
查看/etc/group文件,已确定shakespeare和artists已经添加成功
[root@localhost ~]# tail -5 /etc/group tcpdump:x:72: zhang:x:1000: alex:x:1001: shakespeare:x:30000: artists:x:30001:
将alex用户添加到作为补充组的shakespeare中
[root@localhost ~]# usermod -G shakespeare alex
确认已使用id命令添加了alex
[root@localhost ~]# id alex uid=1001(alex) gid=1001(alex) 组=1001(alex),30000(shakespeare)
用户密码管理
在shadow文件中手工锁定账号,设置密码时效策略
阴影密码和密码策略
在很早以前,加密的密码被存储在刻度的/etc/passwd文件中,
现在密码哈希中存储的三段信息
$1$gCjLa2/Z$6Pu0EK0AzfCjxjv2hoL0B/
1、1.哈希算法。数字1表示MD5哈希,数字6表示SHA-512哈希
2、gCjLa2/Z,用户加密哈希的加密盐,使用加密盐可以防止两个密码在相同的用户在/etc/shadow中拥有相同的条目
3、6Pu0EK0AzfCjxjv2hoL0B/ 表示已经加密过的哈希
用户尝试登陆时,系统在/etc/shadow中查询用户的条目,将用户的salt和键入的未加密密码组合,在使用指定的哈希算法加密。如果结果与已知加密哈希匹配,则用户输入了正确的密码,反之输入错误
* centos7 支持两种强大的新的密码哈希算法SHA-256和SHA-512.
/etc/shadow采用以冒号分割的9个字段
name:password:lastchange:minage:maxage:warning:inactive:expire:blank
name:登录名称,必须是系统中的有效账户名
password:已加密密码,密码字段的开头为感叹号时,表示改密码已经被锁定
lastchange:最近一次修改密码的日期
minage:可以更改密码前的最少天数
maxage:可以更改密码前的最多天数
warning:密码即将到期的警告期,表示为天数
inactive:账户在密码到期后保持活动的天数
expire:账户到期日期,以距离1970年1月1日的天数表示
blank:预留字段,供以后使用
chage -m 0 -M 90 -W 7 -I 14 username chage -d 0 username 将强制在下次登录时更新密码 chage -l username 将列出用户名的当前设置 chage -E YYYY-MM-DD 将在指定日期后账户过期
注意:
date命令可以用来计算未来的日期
[root@localhost ~]# date 2018年 08月 22日 星期三 15:20:02 CST [root@localhost ~]# date -d "+45days" 2018年 10月 06日 星期六 15:20:05 CST
限制访问:
通过chage命令可以设置账户过期,到了该日期无法以交互方式登录系统。usermod命令可以通过-L参数锁定账户
[root@localhost ~]# usermod -L alex
用户离开公司时,管理员可以通过usermod命令锁定账户并使其过期
必须使用距离1970年1月1日的天数来指定
[root@localhost ~]# usermod -L -e 1 alex
可以通过usermod -U username进行解锁,如果账户已经过期,务必也要更改到期日期
* 百度查找nologin shell
通过su sudo给普通用户提权
获得超级用户的访问权限,一超级用户的身份运行命令管理Linux系统
root用户
大多数操作系统具有某种类型的超级用户,即具有系统全部权限的用户,在centos7中,该用户就是root用户。该用户的特权高于文件系统的一半特权。用户管理系统
要执行安装或者删除软件操作,以及管理目录等任务,必须将特权升到root用户
大多数设备都仅受root控制,但是也有些设备并非如此。例如usb等移动设备一般用户就可以控制
无限制的特权也会带来很多问题。root用户具有破坏系统的无限制权限:删除文件和目录,删除用户账户,添加后门等。如果root账户泄露,则其他人就有可能拥有系统的管理控制权限
警告:
在Linux系统上建议不要直接以root身份登录,如果需要神犬可以用su或者sudo
利用su切换用户
su命令可以让用户切换至另一个账号,如果没有指定用户名,则使用root账户,当普通用户调用时,系统将提示输入要切换的目标账号的密码:
而root用户调用时,不需要密码
[root@localhost ~]# su zhang [zhang@localhost root]$ id zhang uid=1000(zhang) gid=1000(zhang) 组=1000(zhang),10(wheel) [zhang@localhost root]$ su 密码: [root@localhost ~]# id root uid=0(root) gid=0(root) 组=0(root)
命名 su username会启动non-login shell ,而命令su -username则启动login shell,
主要的区别是:su - 会将shell环境设置为该用户身份完全一样,而su仅以该用户身份使用当前环境变量设置启动shell。
练习:
锁定alex账户
[root@localhost ~]# usermod -L alex
尝试以alex用户登录
[root@localhost ~]# su - alex
解锁alex用户
[root@localhost alex]# usermod -U alex
更改alex密码策略,没90天需要更改密码
[root@localhost alex]# chage -M 90 alex [root@localhost alex]# chage -l alex 最近一次密码修改时间 :8月 22, 2018 密码过期时间 :11月 20, 2018 密码失效时间 :从不 帐户过期时间 :1月 02, 1970 两次改变密码之间相距的最小天数 :0 两次改变密码之间相距的最大天数 :90 在密码过期之前警告的天数 :7
确定未来180天后的日期
[root@localhost alex]# date -d "+180days" 2019年 02月 18日 星期一 15:42:16 CST
设置用户在该日期过期
[root@localhost alex]# chage -E 2020-12-12 alex [root@localhost alex]# chage -l alex 最近一次密码修改时间 :8月 22, 2018 密码过期时间 :11月 20, 2018 密码失效时间 :从不 帐户过期时间 :12月 12, 2020 两次改变密码之间相距的最小天数 :0 两次改变密码之间相距的最大天数 :90 在密码过期之前警告的天数 :7 [root@localhost alex]#