Linux用户管理
Linux用户管理
用户存在的意义
用户在系统中是分角色的,在Linux系统中,由于角色不同,权限和所完成的任务也不同。
目前我们接触到的就是超级用户root和普通用户
原因:多用户系统从系统管理角度来说更为方便。从安全角度来说,多用户管理的系统更为安全,比如harry用户下的某个文件不想让其它用户看到,只是设置一下文件的权限,只有harry这个用户可读可写可编辑就行了,这样一来只有harry一个用户可以对其私有文件进行操作。Linux 在多用户下表现最佳,Linux能很好的保护每个用户的安全,所以很多服务器用的都是linux系统而不是windows,而unix在安全方面做的更好,所以银行等重要的数据存储的服务器就用的是unix。
组存在的意义
将用户分组是Linux系统中对用户进行管理及控制访问权限的一种手段,通过定义用户组,在很大程度上简化了管理工作。
就好比公司分成各个部门一样,就是为了方便管理。
用户组(group)就是让某一类用户(user)具有相同权限的集合体。
比如有时我们要让多个用户具有相同的权限,比如查看、修改某一文件或执行某个命令,这时我们需要用户组,我们把用户都定义到同一用户组,我们通过修改文件或目录的权限,让用户组具有一定的操作权限,这样用户组下的用户对该文件或目录都具有相同的权限,这是我们通过定义组和修改文件的权限来实现的。
用户的查看
查看当前用户
[[email protected] /]$ whoami ##这个$表示普通用户,whoami查看当前用户
kiosk
[[email protected] ~]# whoami ##这个#表示超级用户
root
系统中用户的查看
[[email protected] /]$ id -u kiosk ##看用户uid
1000
[[email protected] /]$ id -g kiosk ##看用户gid
1000
[[email protected] /]$ id -G kiosk ##看用户所属组id
1000
[[email protected] /]$ id -n kiosk ##看用户名字而不是id
id: cannot print only names or real IDs in default format
[[email protected] /]$ id kiosk ##看指定用户id信息
uid=1000(kiosk) gid=1000(kiosk) groups=1000(kiosk)
用户切换
类似于windows的注销操作,直接注销图形界面:
[[email protected] ~]# gnome-session-quit --force
直接注销,用其他用户登录
在shell中切换用户:
学了linux,当然要用指令切换用户了:
[[email protected] ~]# su - tom
Last login: Tue Apr 2 22:00:34 CST 2019 on pts/1
[[email protected] ~]$
注意,su 后面要加-
su - 这个“-”表示在切换用户的同时也切换当前用户的环境!
su - 执行的时候,高级用户到低级用户不需要密码,低级到高级、平级之间切换都要密码。
注意:每次su切换到其他用户之后记得退出,然后在进行切换不然后台会出现多个bash,可能引起系统错乱!如下图,图中出现了三个bash。
用户在系统中的存储方式
/etc/passwd
用户的信息文本,类似于用户的注册表。
[[email protected] ~]$ cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
kiosk:x:1000:1000:kiosk:/home/kiosk:/bin/bash
tom:x:1001:1001::/home/tom:/bin/bash
1 2 3 4 5 6 7
数字 | 代表意义 |
---|---|
1 | 用户名 |
2 | 密码 |
3 | uid |
4 | gid |
5 | 说明 |
6 | 家目录 |
7 | 默认shell |
说明:默认的shell有哪些可以查看/etc/shells文件:
[[email protected] ~]$ cat /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
/usr/bin/sh
/usr/bin/bash
/usr/sbin/nologin
/bin/tcsh
/bin/csh
/etc/group
用户组的说明文件;
[[email protected] ~]$ cat /etc/group
root:x:0:
bin:x:1:
daemon:x:2:
sys:x:3:
tom:x:1001:
tom:x:1001:
kiosk:x:1000:kiosk
1 2 3 4
数字 | 代表意思 |
---|---|
1 | 用户名 |
2 | 组密码 |
3 | 组id |
4 | 组成员 |
用户认证信息——/etc/shadow
记录用户认证信息的文件
[[email protected] ~]# cat /etc/shadow
root:$6$oZ1JGQiQ$0lau6DEHSV81iQ54SJyjhI7s9DvAz2Ly5JVwGxMXJqDodk61DXZnF79ibX.scEeHKIe1tBTqLSCIfYV2k3AuW1::0:99999:7:::
bin:*:16925:0:99999:7:::
daemon:*:16925:0:99999:7:::
adm:*:16925:0:99999:7:::
kiosk:$6$0jQUhc9N.t6FbjtD$9z3WWL7.0jfWiTdiisLWu212AjvdFuB0eExG6UdeqUh6T82ktwQVPmCdcmpB3wfb4icaaMOGcd.klgAxYuy64.::0:99999:7:::
tom:!!:17986:0:99999:7:::
1 2 3 4 5 6 7 8 9
数字 | 代表含义 |
---|---|
1 | 用户名 |
2 | 密码 |
3 | 用户密码最后一次更改时间:从1970-1-1开始的天数 |
4 | 密码最短有效期,表示这个数字范围天内不能改密码 |
5 | 密码最长有效期,必须有效期内更新密码,超过这个时间则冻结 |
6 | 密码警告期限,在过期前的天数会发送警告 |
7 | 用户非活跃天数,默认为空,若设定数值,表示在最长有效期过后仍可使用的天数 |
8 | 用户到期日,默认为空,表示帐号一定会被冻结的时间点 |
9 | 用户自定义列,暂未启用 |
注意:这里的密码都是对称加密后的密码
查看密码相关信息(如加密协议)可以用:
[[email protected] ~]# passwd -S kiosk
kiosk PS 1969-12-31 0 99999 7 -1 (Password set, SHA512 crypt.)
/etc/skel/.*
默认开启shell的配置,是用户的骨文件,.*表示所有的隐藏文件。
[[email protected] ~]# ls -la /etc/skel/
total 28
drwxr-xr-x. 3 root root 78 Mar 24 21:04 .
drwxr-xr-x. 137 root root 12288 Apr 4 19:46 ..
-rw-r--r--. 1 root root 18 Jul 12 2016 .bash_logout
-rw-r--r--. 1 root root 193 Jul 12 2016 .bash_profile
-rw-r--r--. 1 root root 231 Jul 12 2016 .bashrc
drwxr-xr-x. 4 root root 39 Mar 24 21:03 .mozilla
/home/username
用户的家目录,通常用户目录挂载于此:
[[email protected] ~]# ls -l /home/
total 4
drwxr--r--. 17 kiosk kiosk 4096 Apr 3 11:14 kiosk
drwx------. 5 tom tom 128 Apr 2 21:57 tom
drwxrwsr-x+ 4 root root 44 Apr 4 11:12 westos
用户管理命令
用户的删除
userdel
userdel username ———— 表示删除用户但不删除用户的配置文件
userdel -r username ———— 表示删除用户并删除用户的配置文件
[[email protected] ~]# userdel -r tom
[[email protected] ~]# ls -l /home/
total 4
drwxr--r--. 17 kiosk kiosk 4096 Apr 3 11:14 kiosk
drwxrwsr-x+ 4 root root 44 Apr 4 11:12 westos
用户的建立
为了更清晰的看用户建立的过程,我们可以用watch命令监控用户的建立
[[email protected] ~]# watch -n 1 " tail -n 3 /etc/passwd /etc/group; ls -l /home"
[[email protected] ~]# useradd -u 7777 tom
[[email protected] ~]# useradd -g 21 harry
[[email protected] ~]# useradd -G 21 -c "fuck" -d /home/lee -s /bin/sh jerry
参数 | 含义 |
---|---|
-u | 指定uid |
-g | 指定组id,该用户组必须存在 |
-G | 指定附加组id,该用户组必须存在 |
-c | 说明 |
-s | 默认shell |
-d | 指定家目录 |
关于组的建立
命令 | 说明 |
---|---|
groupadd groupname | 建立用户组 |
groupadd -g 888 tom | 建立用户组并指定用户组id |
groupdel | 删除用户组 |
更改用户信息 usermod
用户建立好了,万一需要修改相关信息怎么办?
命令 | 含义 |
---|---|
usermod -l newname username | 更改用户名称 |
usermod -u 6666 username | 更该用户uid |
usermod -g 23 username | 更改用户gid,也就是初始组 |
usermod -G 24 username | 更改用户附加组 |
usermod -aG 21 username | 添加用户附加组 |
usermod -G “” username | 删除用户所有附加组身份 |
usermod -c “fuck” username | 指定用户说明文字 |
usermod -d /home/lee username | 更改用户的家目录指向,实际没更改 |
usermod -md /home/lee username | 更改用户的家目录 |
usermod -s /bin/sh username | 更改用户shell |
usermod -L | 冻结用户 |
usermod -U | 解锁用户 |
用户密码———passwd
命令 | 含义 |
---|---|
passwd tom | 更改tom密码 |
passwd -l tom | lock the password for the named account (root only)加锁 出现“!!”锁两次 |
passwd -u tom | 解锁 |
passwd -d tom | delete the password for the named account (root only)清空密码 |
usermod -L tom | lock the user account加锁 出现“!”锁一次 |
usermod -U tom | unlock the user account解锁 |
注意:设置密码规则
普通用户修改密码时:
1.必须知道当前用户初始密码
2.密码不能和账户名相似
3.密码不能纯数字或字母
4.密码不能有序
根据之间的用户认证信息/etc/shadow,关于密码的一些设置:
命令 | 作用 |
---|---|
passwd -e tom | 改变用户最后一次更改密码时间为0 |
chage -d 0 tom | 改变用户最后一次更改密码时间为0,用户在登录时会强制更改密码 |
passwd -n 1 tom | tom用户在1天之内不能修改密码 |
chage -m 1 tom | 同上 |
passwd -x 30 tom | 设定用户必须在30天内该密码 |
chage -M 30 tom | 功能同上 |
passwd -w 2 tom | 密码过期前两天警告 |
chage -W 2 tom | 同上 |
passwd -i 1 tom | 密码过期后仍可登录系统的天数 |
chage -I 1 tom | 同上 |
chage -E 2019-11-11 tom | 用户在2019-11-11时会被冻结 |
用户授权——/etc/sudoers
/etc/sudoers 权力下放文件
这个文件可以直接用vim编辑,但不提供语法检测,打错了不提示,最好用visudo编辑这个文件,visudo提供语法检测
vim /etc/sudoers
或者 visudo
怎么下放权限?
[[email protected] ~]# visudo
进入后,按:100进入100行左右
发现:
添加上
tom localhost=(root) /usr/sbin/useradd ##tom可以在localhost以root身份执行useradd
测试一下:
[[email protected] ~]$ useradd hello
-bash: /usr/sbin/useradd: Permission denied
发现还是不行,因为你没有用sudo
[[email protected] ~]$ sudo useradd hello
We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:
#1) Respect the privacy of others.
#2) Think before you type.
#3) With great power comes great responsibility.
[sudo] password for tom:
又发现要密码,不知道密码咋办??还是跟刚才一下进入visudo,修改成这样就不要密码了!
tom localhost=(root) NOPASSWD: /usr/sbin/useradd
在试一下:
[[email protected] ~]$ sudo useradd hello
[sudo] password for tom:
发现还是不行???排查原因!
发现:
[[email protected] ~]$ hostname
foundation2.ilt.example.com
所以我们写的localhost根本不对,当然就不会生效!!
所以修改visudo文件:
tom foundation2.ilt.example.com=(root) NOPASSWD:/usr/sbin/useradd
结果:成功!!!
[[email protected] ~]$ sudo useradd fuckass