Linux 用户管理

linux用户管理

一、初识Linux系统用户管理

Linux系统中存在三种用户

  • 第一种超级管理用户 root用户,此用户唯一,UID是0 (其他用户其实也可以通过更改UID来成为超级管理员用户,但是此法很危险,不提倡)
  • 第二种是虚拟用户 虚拟用户的UID是1~499 虚拟用户是不能登录到系统的,虚拟用户的作用是用来管理某个软件的进程启动运行的。
  • 第三种是普通用户 ,这一类用户是有超级管理员创建,可以登陆系统,但是权限较小。此用户的UID CentOS6为500起 CentOS7为1000起。
    在Linux系统中,和用户用户组直接相关的文件主要有/etc/passwd(用户文件),/etc/shadow(用户密码所在文件),/etc/group(用户组所在文件),/etc/gshadow(用户组密码文件(废弃基本不用))这四个配置文件。
    每当我们创建或删除用户和用户组就是修改这四个文件,我们来测试一下
    先用MD5sum给这四个文件做文件计算和检测(指纹识别)
[root@node ~]# md5sum /etc/passwd /etc/shadow /etc/group /etc/gshadow
b8eae63b201fb5f36b0d968921402323  /etc/passwd
1ffe5fff81b6a26c9908847d497c5f9c  /etc/shadow
f6517909c59eecb857592278970d94ee  /etc/group
eb6c3c1496582ccb6cadcf4a3192aec9  /etc/gshadow

我们创建一个用户看看有没有没变化

[root@node ~]# useradd chj
[root@node ~]# md5sum /etc/passwd /etc/shadow /etc/group /etc/gshadow
e6c2c322801138625928355671e8285d  /etc/passwd
b96d24230f85569a56fac49d3e93250f  /etc/shadow
674673bb205813dacf83f62af17be137  /etc/group
8871d3e4ca9869d6e63bec33374ad044  /etc/gshadow
我们可以看到指纹识别码已经发生变化了,证明这四个文件被修改过
[root@node ~]# grep chj /etc/passwd /etc/shadow /etc/group /etc/gshadow
/etc/passwd:chj:x:1003:1003::/home/chj:/bin/bash
/etc/shadow:chj:!!:18365:0:99999:7:::
/etc/group:chj:x:1003:
/etc/gshadow:chj:!::

1.1.1 用户所在文件/etc/passwd

[root@node ~]# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
root :0 :0 root :/root :/bin/bash
用户名称 :用户密码 :用户UID :用户GID :用户说明 :用户家目录

1.1.2存储用户密码信息文件/etc/shadow

[root@node ~]# cat /etc/shadow
root:$6$1a5VFSee0goEi1Hn$AiJBbeR63N5wY24m8Rd54HZXOh.uJdmXRBFEmLmcHCD1iYwoIA15E/WrX3VONe0qc21rxKhsSVXNKO7GTQVKz.::0:99999:7:::
chj:!!:18365:0:99999:7:::
root :!! :18365 :0 :99999 :7 : : :
用户名称 用户密码 最近更改密码时间 禁止修改密码文件的天数 用户必须修改密码的天数 警告更改密码的期限 不活动时间 失效时间 标志

1.1.3 用户组文件/etc/group

[root@node ~]# cat /etc/group
root:x:0:
bin:x:1:
root :x :0 :
用户组名称 用户组密码 用户组ID 用户组成员

1.1.4 组密码文件/etc/gshadow

[root@node ~]# cat /etc/gshadow
root:::
root : : :
用户组名 用户组密码 用户组管理员用户 用户组成员

二、Linux用户命令介绍

  1. useradd命令使用
参数 说明
-u 指定uid
-s 指定登录的shell解释器
-M 不创建家目录
-g 指定用户组
-e 设定登录截止日期
[root@node ~]# useradd -u 888 jiaoji -s /sbin/nologin -M
[root@node ~]# tail -1 /etc/passwd
jiaoji:x:888:1004::/home/jiaoji:/sbin/nologin

查看用户登录截止日期

[root@node ~]# chage -l test
Last password change					: Apr 12, 2020
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

指定用户组

[root@node ~]# useradd test1 -g incahome
[root@node ~]# id test1
uid=1004(test1) gid=1001(incahome) groups=1001(incahome)

useradd 命令的配置文件

[root@node ~]# ll /etc/default/useradd 
-rw-r--r-- 1 root root 119 Aug  6  2019 /etc/default/useradd
[root@node ~]# cat /etc/default/useradd 
# useradd defaults file
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes

Linux添加用户要用到的文件
创建普通用户的默认配置文件

[root@node ~]# ll /etc/default/useradd 

创建用户时拷贝普通用户的环境变量(拷贝到普通用户的家目录下)

[root@node ~]# ll /etc/skel 

登录文件 (了解即可)

[root@node ~]# ll /etc/login.defs 
-rw-r--r-- 1 root root 2027 Aug  6  2019 /etc/login.defs

2.1.5 userdel 删除用户
-r 递归删除家目录及以下内容

[root@node ~]# userdel -r test1
[root@node ~]# userdel -r test
[root@node ~]# ls /home/
chj  oldboy  oldgirl
[root@node ~]# userdel -r chj
[root@node ~]# ls /home/
oldboy  oldgirl

2.1.6 usermod 修改用户属性

参数 说明
-u 指定uid
-s 指定登录的shell解释器
-M 不创建家目录
-g 指定用户组
-e 设定登录截止日期
[root@node ~]# useradd -u 1012 -s /sbin/nologin -M -g incahome -e "2020/5/1" chj
[root@node ~]# grep chj /etc/passwd
chj:x:1012:1001::/home/chj:/sbin/nologin
[root@node ~]# id chj
uid=1012(chj) gid=1001(incahome) groups=1001(incahome)
[root@node ~]# chage -l chj 
Last password change					: Apr 15, 2020
Password expires					: never
Password inactive					: never
Account expires						: May 01, 2020
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

[root@node ~]# usermod -u 8888 -s /bin/bash  -g root -e "2021/5/1" chj
[root@node ~]# id chj
uid=8888(chj) gid=0(root) groups=0(root)
[root@node ~]# chage -l chj
Last password change					: Apr 15, 2020
Password expires					: never
Password inactive					: never
Account expires						: May 01, 2021
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
[root@node ~]# grep  chj /etc/passwd
chj:x:8888:0::/home/chj:/bin/bash

2.1.7 passwd 添加或修改用户密码

参数 说明
--stdin 从标准输入接受密码并设置

root 给其它用户设置密码

[root@node ~]# passwd chj
Changing password for user chj.
New password: 
BAD PASSWORD: The password is shorter than 8 characters
Retype new password: 
passwd: all authentication tokens updated successfully.

普通用户自己设置密码

[oldboy@node ~]$ passwd 
Changing password for user oldboy.
Changing password for oldboy.
(current) UNIX password: 
New password: 
Retype new password: 
passwd: all authentication tokens updated successfully.

非交互设置密码--stdin

[root@node ~]# echo "123456"|passwd --stdin oldgirl
Changing password for user oldgirl.
passwd: all authentication tokens updated successfully.

也可以这样

[root@node ~]# passwd --stdin oldgirl <pass
Changing password for user oldgirl.
passwd: all authentication tokens updated successfully.

2.1.8 chpasswd 批量修改用户密码(从标准输入更改用户密码)

[root@node ~]# tail -4 /etc/passwd|awk -F ":" '{print $1":123456"}'
oldgirl:123456
ntp:123456
jiaoji:123456
chj:123456
[root@node ~]# tail -4 /etc/passwd|awk -F ":" '{print $1":123456"}'>pass.log
[root@node ~]# cat pass
pass      pass.log  
[root@node ~]# cat pass.log 
oldgirl:123456
ntp:123456
jiaoji:123456
chj:123456

出现以下报错:

[root@node ~]# chpasswd <pass.log 
chpasswd: cannot lock /etc/passwd; try again later.
解决方法:
[root@node ~]# ps -axu|grep  chpasswd
root       2011  0.0  0.0 125520   932 pts/0    T    20:47   0:00 chpasswd
root       2111  0.0  0.0 112712   968 pts/0    R+   21:03   0:00 grep --color=auto chpasswd
[root@node ~]# kill -9 2011
[root@node ~]# chpasswd <pass.log 

其实最简单的就是直接管道然后接chpasswd命令(前提你要保证管道之前的内容是正确的)

[root@node ~]# tail -4 /etc/passwd|awk -F ":" '{print $1":123456"}'|chpasswd

三、用户组命令介绍

3.1.1 groupadd 添加一个组

[root@node ~]# groupadd sa
[root@node ~]# grep sa /etc/group
sa:x:1005:

参数

参数 说明
-g 指定组id
[root@node ~]# groupadd -g 1235 sa1
[root@node ~]# grep sa1 /etc/group
sa1:x:1235:

3.1.2 groupdel 删除一个组

[root@node ~]# groupdel sa
[root@node ~]# grep sa /etc/group

3.1.3 chage 查看和修改密码属性
参数

参数 说明
-l 显示一个用户的密码信息
-E 修改账户过期时间
[root@node ~]# chage  -l oldboy
Last password change					: Apr 15, 2020  #最近密码修改的时间
Password expires					: never #密码过期时间
Password inactive					: never #密码停权日期
Account expires						: never  #账户过期时间
Minimum number of days between password change		: 0  #两次密码修改的时间间隔 0(随时可以)
Maximum number of days between password change		: 99999  #密码使用期限
Number of days of warning before password expires	: 7  #过期前第七天提示用户修改密码
[root@node ~]# chage  -E "2023/10/1" oldboy
[root@node ~]# chage  -l oldboy
Last password change					: Apr 15, 2020
Password expires					: never
Password inactive					: never
Account expires						: Oct 01, 2023
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

四、用户查询相关的命令

4.1.1 whoami 查看当前用户

[root@node ~]# whoami 
root

4.1.2 id 查看当前用户

[root@node ~]# id 
uid=0(root) gid=0(root) groups=0(root)

4.1.3 w 查看当前登录的所有用户

[root@node ~]# w
 22:21:36 up  2:27,  1 user,  load average: 0.00, 0.01, 0.05
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/0    192.168.36.1     19:55    0.00s  0.26s  0.00s w
[root@node ~]# su - oldboy
Last login: Wed Apr 15 20:20:48 CST 2020 on pts/0
[oldboy@node ~]$ 
[root@node ~]# w
 22:23:47 up  2:29,  2 users,  load average: 0.00, 0.01, 0.05
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/0    192.168.36.1     19:55    3.00s  0.27s  0.00s w
root     pts/1    192.168.36.1     22:23   11.00s  0.02s  0.01s -bash
[root@node ~]# who
root     pts/0        2020-04-15 19:55 (192.168.36.1)
root     pts/1        2020-04-15 22:23 (192.168.36.1)

4.1.4 显示登陆过的用户信息列表

[root@node ~]# last
root     pts/1        192.168.36.1     Wed Apr 15 22:23   still logged in   
root     pts/1        192.168.36.1     Wed Apr 15 21:11 - 21:33  (00:22)    
root     pts/0        192.168.36.1     Wed Apr 15 19:55   still logged in   
reboot   system boot  3.10.0-1062.18.1 Thu Apr 16 03:54 - 22:31  (-5:-22)   
root     pts/0        192.168.36.1     Thu Apr 16 03:08 - crash  (00:45)    
reboot   system boot  3.10.0-1062.18.1 Thu Apr 16 03:07 - 22:31  (-4:-36)   
root     pts/0        192.168.36.1     Tue Apr 14 17:19 - down   (07:48) 

4.1.4 查看用户最近登录时间

[root@node ~]# lastlog 
Username         Port     From             Latest
root             pts/1    192.168.36.1     Wed Apr 15 22:23:30 +0800 2020
bin                                        **Never logged in**
daemon                                     **Never logged in**

五、su 的功能讲解

su 是Linux用户身份切换的工具。

参数 说明
- 加载切换用户自己的环境变量
-c 指定一个用户身份执行命令而不用切换到用户
[root@node ~]# su - oldboy
Last login: Wed Apr 15 22:23:43 CST 2020 on pts/1
[oldboy@node ~]$ 
[oldboy@node ~]$ whoami 
oldboy
[root@node ~]# su -l oldboy
Last login: Thu Apr 16 17:05:05 CST 2020 on pts/0
[oldboy@node ~]$ whoami 
oldboy

注意加“-” 是携带环境变量登录 -l也可以

如果我们不加-或-l就会出现环境变量还是原来用户的。

[root@node ~]# env|grep root
USER=root
MAIL=/var/spool/mail/root
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
PWD=/root
HOME=/root
LOGNAME=root

[oldboy@node /root]$ env|grep root
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
MAIL=/var/spool/mail/root
PWD=/root
#环境变量还是root的

加“-”

[root@node ~]# su - oldboy
Last login: Thu Apr 16 17:09:16 CST 2020 on pts/0
[oldboy@node ~]$ env|grep oldboy
USER=oldboy
MAIL=/var/spool/mail/oldboy
PATH=/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/oldboy/.local/bin:/home/oldboy/bin
PWD=/home/oldboy
HOME=/home/oldboy
LOGNAME=oldboy

-c 指定一个用户身份执行命令而不用切换到用户

[root@node ~]# su - oldboy -c pwd
/home/oldboy
[root@node ~]# su - oldboy -c whoami
oldboy

5.1.1 在企业生产环境中怎么使用su
不能直接登录root账户,先登录普通用户,没事的时候就是用普通用户,只有执行的任务需要root权限的时候,才允许你登录root。

六、sudo命令的使用

sodu 这个命令可以在普通用户在执行某个命令的时候赋予root权限(前提你得赋予普通用户执行这个命令的权限),这要做的目的是最小化权限控制管理,防止意外错误发生。
6.1.1 在生产过程中如何配置sudo权限

 [root@node ~]# visudo或者[root@node ~]# vim /etc/sudoers (语法严格,不太推荐,如果一定要用,配置完成,要检查语法)
 [root@node ~]# visudo -c
/etc/sudoers: parsed OK

6.1.2 授权oldboy用户可以使用ls命令访问root目录
1.首先oldboy 对/root 目录是没有访问权限的

[oldboy@node ~]$ ls /root
ls: cannot open directory /root: Permission denied
[root@node ~]# visudo
  100 root    ALL=(ALL)       ALL 
#     用户    主机=(角色)   命令
  101 oldboy  ALL=(ALL)       /bin/ls #添加oldboy用户以及授权的命令
  #oldboy  ALL=(ALL)       NOPASSWD: /bin/ls
  #不用每五分钟输入一次验证密码

切换到oldboy用户 先查看是否有权限(首次输入需要oldboy密码。时效5分钟,如果你嫌麻烦授权的时候这样配置:oldboy ALL=(ALL) NOPASSWD: /bin/ls)

[oldboy@node ~]$ sudo -l

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 oldboy: 
Matching Defaults entries for oldboy on node:
    !visiblepw, always_set_home, match_group_by_gid, always_query_group_plugin, env_reset, env_keep="COLORS DISPLAY HOSTNAME
    HISTSIZE KDEDIR LS_COLORS", env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE", env_keep+="LC_COLLATE
    LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES", env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE",
    env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY", secure_path=/sbin:/bin:/usr/sbin:/usr/bin

User oldboy may run the following commands on node:
    (ALL) /bin/ls (用于执行ls的权限)
[oldboy@node ~]$ sudo ls /root
90  anaconda-ks.cfg  a.txt  b.txt  d.txt  oldboy.txt  oldgirl.txt  pass  pass.log  passwd.sh  test

不需要root密码普通用户直接切换到root用户

[root@node ~]# visudo
oldboy  ALL=(ALL)       NOPASSWD: ALL
[root@node ~]# sudo su - root
Last login: Thu Apr 16 17:45:44 CST 2020 from 192.168.36.1 on pts/2
[root@node ~]# 
原文地址:https://www.cnblogs.com/woaiyunwei/p/12886110.html