liunx之用户管理
用户管理
==============================================================
groupadd,groupdel
useradd,usermod,userdel
passwd,chage
==============================================================
内容提要:
用户管理 useradd usermod userdel
组管理 groupadd groupdel
用户密码管理 passwd chage
通过 su sudo 给普通用户提权
==============================================================
Linux 是一个可以实现多用户登陆的操作系统,允许多个用户同时登陆到系统上使用资源。系统根据账户来区分每个用户的文件、进程、任务,给每个用户提供特定的工作环境。
对用户组的管理主要包括:添加、修改、删除以及配置访问系统的资源。
1.1 Linux 用户组基本概念
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.
用户组group,就是具有相同特征的用户的集合体。
查看当前登录的用户信息:
[root@localhost ~]# id
uid=0(root) gid=0(root) groups=0(root)
查看文件的owner:
[root@localhost ~]# 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 localhost
查看运行进程的username:
[root@localhost ~]# ps aux |less
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]
和用户组相关的一些文件:
(1)用户账号文件:
/etc/passwd
root:x:0:0:root:/root:/bin/bash
用户名:x:uid:gid:描述:HOME:shell
(2)用户密码文件
/etc/shadow
root:$1$MYG2NDG6$a1wtyr5GDM2esAPjug0YP0:15636:0:99999:7:: :
登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志
参数一: sp_namp 用户名称
参数二: sp_pwdp 用户加密后的密码
参数三: sp_lstchg 用户密码最近一次修改时间,算法是今天的时间减去1,1,1970得到的时间间隔
参数四: sp_min 用户最少多少天后才能改密码的天数(默认为0,表示可以在任何时间修改,有啥意义?有种需求叫密码永不变= =。)
参数五: sp_max 用户最多多少天后一定要修改密码的天数,系统会强制用户修改密码(默认为99999,改为1 也能让密码改不了)
参数六: sp_warn 过期前多少天时间会被警告(改为-1 则永远不会提示)
参数七: sp_inact 过期后多少天内账号变为inactive状态,可登陆,但不能操作
参数八: sp_expire 多少天后账号会过期,无法登陆
参数九: sp_flag 保留参数
例:test01:$6$h6vM4nLR$baO2kmPoSYLHRhAvIjBHZF7Kf6vAT4fIlb.HRjJaF4dBGHb3Wsj8oBpXHujk9dXlFZy0W4VjiotrnR1p1.2nn.:18186:0:99999:7:::
查看最近一次修改密码是在那一天。
[root@localhost backup]# date -d "1970-01-01 18186 days" +%Y/%m/%d
2019/10/17
设置用户每次更新密码7天内禁止修改密码
[root@localhost backup]# passwd -n 7 test01
[root@localhost ~]# chage -d 7 test01
设置用户90天内必须修改密码
[root@localhost backup]# passwd -x 90 test01
设置用户密码过期前3天给出通知
[root@localhost ~]# passwd -w 3 test01
设置用户密码过期5天后禁止登陆系统
[root@localhost ~]# passwd -i 5 test01
设置用户初次登陆时强制修改密码
[root@localhost ~]# passwd -e test01
(3)用户组账号文件
/etc/group
root:x:0:
(4)用户组密码文件
/etc/gshadow
[root@localhost ~]# man 5 passwd
[root@localhost ~]# man 5 shadow
[root@localhost ~]# man 5 group
[root@localhost ~]# man 3 crypt
加密算法$id:
$1: MD5
$5: SHA-256
$6: SHA-512
1.2 Linux 用户组分类
1 用户分类
Linux系统中存在三种用户:root用户、系统用户(也称之为伪用户)、普通用户
系统约定: 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
RHEL6普通用户的UID 从500开始,RHEL7则是从1000开始;
系统约定: RHEL7
uid: 0 特权用户
uid:1-999为系统用户
uid:1000+为本地用户
2 组分类
基本组(私有组)
附加组(公有组)
系统组
根据账户功能,用户组可以分为:
超级用户组:root gid为0
系统用户组:gid 1-999
本地用户组:gid 1000+
1.3 Linux 用户组管理
如果要在图形化界面下管理用户与组,需安装包:system-config-users
用户组:
[root@localhost ~]# groupadd hr
[root@localhost ~]# groupadd sale
[root@localhost ~]# groupadd it
[root@localhost ~]# groupadd fd
[root@localhost ~]# groupadd market
[root@localhost ~]# groupadd net01 -g 2000 //添加组net01,并指定gid 2000
[root@localhost ~]# grep 'net01' /etc/group //查看/etc/group中组net01信息
[root@localhost ~]# groupdel net01 //删除组net01
用户:
useradd creates users
==创建用户 未指定选项==
[root@localhost ~]# useradd user01
. 未指定该用户的主组 默认和用户同名
. 未指定该用户的附加组 默认不添加附加组
. 未指定用户的HOME 默认 /home/username
. 未指定用户的SHELL 默认 /bin/bash
. 未指定用户的UID...
[root@localhost ~]# 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@localhost ~]# id user01
uid=507(user01) gid=512(user01) groups=512(user01)
[root@localhost ~]# ls /var/spool/mail/user01
/var/spool/mail/user01
小结:
如果创建一个用户时,未指定任何选项,系统会创建一个和用户名相同的组作为用户的Primary Group.
==创建用户 指定选项==
[root@localhost ~]# useradd user02 -u 503 //创建用户usr02,指定uid
[root@localhost ~]# useradd user03 -d /aaa //创建用户user03 指定家目录
[root@localhost ~]# useradd user05 -s /sbin/nologin //创建用户并指定shell
[root@localhost ~]# useradd user07 -G hr,it,fd //创建用户,指定附加组
[root@localhost ~]# useradd user10 -u 4000 -s /sbin/nologin
userdel deletes users
==删除用户==
[root@localhost ~]# userdel user10 //删除用户user10,但不删除用户家目录和mail spool
[root@localhost ~]# ll -d /home/user10/
drwx------ 3 506 510 4096 09-01 21:14 /home/user10/
[root@localhost ~]# ll /var/spool/mail/user10
-rw-rw---- 1 506 mail 0 09-01 21:14 /var/spool/mail/user10
[root@localhost ~]# userdel -r user2 //删除用户user2,同时删除用户家目录和mail spool
==用户密码==
[root@localhost ~]# passwd alice
[zhuzhu@localhost ~]$ passwd
usermod modifies existing users
==组成员管理==
注意:只针对已存在的用户
[root@localhost ~]# usermod -G hr niuniu2 //覆盖原有的附加组
[root@localhost ~]# usermod -G fd,it niuniu2
[root@localhost ~]# usermod -aG hr niuniu2 //增加新的附加组
修改用户 usermod
1、修改用户名 user1---User1: usermod -l User1 user1
2、增加描述信息 :usermod -c "install rpm" User1
3、修改登录shell :usermod -s /sbin/nologin User1
4、修改主目录: -d
5、设置过期日期: -e
6、锁定账号:-L 等价于 passwd -l
7、解锁账号:-U 等价于 passwd -u
8、-u,-g
==其它选项管理==
[root@localhost ~]# usermod -s /sbin/nologin niuniu2
1.4 扩展知识
useradd创建用户时,参照的文件...
[root@localhost ~]# 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@localhost ~]# vim /etc/default/useradd
SHELL=/sbin/nologin
Password aging
# 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.
手动创建用户示例:
[root@localhost~]# useradd maomao100
[root@localhost~]# echo 123456 |passwd --stdin maomao100
[root@localhost~]# chage -d 0 maomao100 //强制用户在下一次登录时修改密码
将多个用户加入到指定的组:
[root@localhost~]# gpasswd -a jack wheel //usermod -aG hr zhuzhu
[root@localhost~]# gpasswd -M zhuzhu,maomao100 hr
[root@localhost~]# gpasswd -d zhuzhu hr
1.5 给普通用户提权
以下两种方式都可以将普通用户提升为root
1)
Switching users with su
[alice@localhost ~]$ useradd u1
-bash: /usr/sbin/useradd: 权限不够
[alice@localhost ~]$ su - root
password:
[root@localhost ~]# useradd u1
管理员切换为普通用户不需要输入密码;
普通用户切换其他用户需要输入目标用户密码;
su的优缺点
su 命令的确为管理带来方便,但通过su切换到root后,也有不安全因素。
2)
Running commands as root with sudo
sudo配置文件/etc/sudoers
(1)别名规则
别名规则的定义格式:
Alias_Type NAME = item1, item2, ...
或者
Alias_Type NAME = item1, item2, item3 : NAME = item4, item5
其中:
Alias_Type是指别名类型,包括四种:Host_Alias、User_Alias、Runas_Alias和Cmnd_Alias。NAME就是别名;
NAME的命名是包含大写字母、下划线以及数字,但必须以一个大写字母开头,比如ADMIN、SYS1和NETWORKING都是合法的,而sYS和6ADMIN是非法的;
① Host_Alias
定义主机别名的例子如下:
Host_Alias HT1=localhost,ztg,192.168.0.0/24
主机别名是HT1,“=”号右边是成员。
Host_Alias HT1= localhost,ztguang,192.168.10.0/24:HT2=ztg2,ztg3
定义了两个主机别名HT1和HT2,别名之间用“:”号隔开。
② User_Alias
用户别名,别名成员可以是用户,用户组(前面要加%号)。
User_Alias ADMIN=ztg,ztguang
定义用户别名ADMIN,有两个成员ztg和ztguang,这两个成员要在系统中确实存在。
User_Alias PROCESSES= ztg1
定义用户别名PROCESSES,有一个成员ztg1,这个成员要在系统中确实存在。
③ Runas_Alias
用来定义runas别名,这个别名是指sudo允许切换到的用户;
Runas_Alias RUN_AS = root
定义runas别名RUN_AS,有一个成员root。
④ Cmnd_Alias
定义命令的别名,这些命令必须是系统存在的文件,要用绝对路径,文件名可以用通配符表示。
Cmnd_Alias SERVICES = /sbin/service, /sbin/chkconfig
Cmnd_Alias PROCESSES = /bin/nice, /bin/kill, /usr/bin/kill, /usr/bin/killall
(2)授权规则
授权规则的定义格式:
授权用户 主机=命令动作
或者
授权用户 主机=[(切换到哪些用户或用户组)] [是否需要密码验证] 命令1,[(切换到哪些用户或用户组)] [是否需要密码验证] [命令2],[(切换到哪些用户或用户组)] [是否需要密码验证] [命令3] …
这三个要素缺一不可,但在动作之前也可以指定切换到特定用户下,在这里指定切换的用户要用( )号括起来,如果不需要密码直接运行命令的,应该加
NOPASSWD:参数,但这些可以省略。
sudo的客户端应用
sudo -l:列出当前用户可以执行的命令。只有在sudoers里的用户才能使用该选项。
sudo -u 用户名 命令:以指定用户的身份执行命令。后面的用户是除root以外的,可以是用户名,也可以是UID。
sudo -k:清除存活期时间,下次再使用sudo时要再输入密码。
sudo -b 命令:在后台执行指定的命令。
sudo -p 提示语 <操作选项>:可以更改询问密码的提示语,其中%u会代换为使用者账号名称,%h会显示主机名称。
实例:授权规则举例
student ALL=(root) /bin/chown,/bin/chmod
以root身份授权普通用户
[root@localhost ~]# vim /etc/sudoers
%wheel ALL=(ALL) NOPASSWD: ALL
[root@localhost ~]# useradd yangyang -G wheel
[root@localhost ~]# id yangyang
uid=504(yangyang) gid=504(yangyang) 组=504(yangyang),10(wheel)
[yangyang@localhost ~]$ useradd gougou10
-bash: /usr/sbin/useradd: 权限不够
[yangyang@localhost ~]$ sudo useradd gougou10
[yangyang@localhost ~]$ id gougou10
uid=505(gougou10) gid=505(gougou10) 组=505(gougou10)
本节作业:
1. 完成课堂中学习的所有内容
2.
用户管理命令练习
增加两个用户并设置好密码(写2行):John、Lucy
查看各用户的基本信息(相关文件在/etc中)
查看各用户的密码信息(相关文件在/etc中)
查找用户summer并显示其相关信息
将当前用户切换到John(进入其主目录)
显示当前登录用户名
将John的登录密码改为:mima1234
将John的帐号有效期设为2017年12月31号
将John加入到summer组中
将用户名John改为Jack
将Jack的用户全名改为:Jack.Willianmus
用户切换到Lucy,删除Lucy的密码
删除用户Lucy
4. 组管理命令练习
增加以一个student组
查看所有组的基本信息(相关文件在etc中)
查看summer组中包含哪些用户名?
将student组名改为teacher
删除teacher组