学习笔记0321----linux基本命令(三)(用户和用户组管理)

预习内容

3.1 用户配置文件和密码配置文件
3.2 用户组管理
3.3 用户管理
3.4 usermod命令
3.5 用户密码管理
3.6 mkpasswd命令
3.7 su命令
3.8 sudo命令
3.9 限制root远程登录

扩展
sudo与su比较 http://www.apelearn.com/bbs/thread-7467-1-1.html
sudo配置文件样例 www.opensource.apple.com/source/sudo/sudo-16/sudo/sample.sudoer
sudo不错的教程 http://www.jianshu.com/p/51338e41abb7
sudo -i 也可以登录到root吗?http://www.apelearn.com/bbs/thread-6899-1-1.html

1.用户配置文件、密码配置文件

1.1 用户配置文件 /etc/passwd

[root@linux-02 ~]# 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
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin

第一列到第七列 属性
root 用户
x 密码是x或者!代表此用户无法登陆
0 用户的UID
0 用户的GID
root 用户注释,没有什么特别意思
/root 用户的家目录
/bin/bash 用户自己的shell

1.2 密码配置文件 /etc/shadow

[root@linux-02 ~]# cat /etc/shadow
root:$6$aJD4SIDzLG6d.1PV$KJJK5vR3GgaFaUs1TzJsgahf1oDknBFzhMVq0vS7GygUDV4cxjOwFsQJ4vvphqHjaSZ3TQ/eZ/lVrRdGcKZGQ1::0:99999:7:::
bin:*:17834:0:99999:7:::
daemon:*:17834:0:99999:7:::
adm:*:17834:0:99999:7:::
lp:*:17834:0:99999:7:::
sync:*:17834:0:99999:7:::
shutdown:*:17834:0:99999:7:::
halt:*:17834:0:99999:7:::
mail:*:17834:0:99999:7:::
operator:*:17834:0:99999:7:::
games:*:17834:0:99999:7:::
ftp:*:17834:0:99999:7:::
nobody:*:17834:0:99999:7:::
systemd-network:!!:17968::::::
dbus:!!:17968::::::
polkitd:!!:17968::::::
sshd:!!:17968::::::
postfix:!!:17968::::::   
第一列到第九列 属性
bin 帐户名
* 密码,经过编译
17834 最近更动密码的日期,上次更改密码到1970年1月1日的天数
0 记录了这个帐号的密码需要经过几天才可以被变更!是0的话,表示密码随时可以更动的意思
99999 密码需要修改的天数,过了这个天数不可以用,99999 的话,那就表示,密码不需要变更
7 密码需要变更期限前的警告期限
密码过期的恕限时间
帐号失效日期,账号生命周期
保留:最后一个栏位是保留的,看以后有没有新功能加入。没有什么意思。

1.3 创建用户useradd 删除用户userdel

useradd 命令参数详解的,如下表格:

参数 详解
-g 指定用户的所属组
-u 指定用户的UID
-d 指定用户的家目录
-M 不创建用户的家目录
-s 指定用户登陆的shell
-G 指定用户的组,可以添加多个: group;group1;group2

在这里插入图片描述

userdel username 删除用户不删除用户的家目录;
userdel -r username 删除用户同时删除用户的家目录;
在这里插入图片描述

[root@linux-01 ~]# !tail
tail -n3 /etc/passwd
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
xiha1:x:1000:1000::/home/xiha1:/bin/bash
xiha2:x:1010:1010::/home/xiha2:/bin/nologin
[root@linux-01 ~]# ll /home/
总用量 0
drwxr-xr-x. 2 root  root   6 3月  20 05:36 111
drwx------. 2 xiha1 xiha1 62 3月  20 19:04 xiha1


[root@linux-01 ~]# userdel -r xiha1
[root@linux-01 ~]# ll /home/
总用量 0
drwxr-xr-x. 2 root root 6 3月  20 05:36 111
[root@linux-01 ~]# !tail
tail -n3 /etc/passwd
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
xiha2:x:1010:1010::/home/xiha2:/bin/nologin
[root@linux-01 ~]# 

2.用户组配置文件、组密码配置文件

2.1 用户组 /etc/group

[root@linux-01 /]# head -n5 /etc/group
root:x:0:
bin:x:1:
daemon:x:2:
sys:x:3:
adm:x:4:

/etc/group中总共有4个字段,其中每个字段的含义:
(1)用户组名
(2)用户组密码
(3)用户组GID
(4)用户组下包含的用户名

2.2 用户组密码 /etc/gshadow

[root@linux-01 /]# head -n5 /etc/gshadow
root:::
bin:::
daemon:::
sys:::
adm:::

/etc/gshadow 中总共有4个字段,其中每个字段的含义:
(1)用户组名
(2)用户组密码
(3)表示这个组的管理员是哪个用户
(4)用于显示这个用户组中有哪些附加用户

2.3 创建用户组 groupadd 删除用户组 groupdel

[root@linux-01 ~]# groupadd  xiha  #创建一个xiha的组
[root@linux-01 ~]# tail -n2 /etc/group
slocate:x:21:
xiha:x:1002:

[root@linux-01 ~]# groupadd -g 999 xiha1  # -g选项可以指定gid,centos 7建议大于1000以上。
groupadd:GID “999”已经存在
[root@linux-01 ~]# groupadd -g 1111 xiha1
[root@linux-01 ~]# tail -n2 /etc/group
xiha:x:1002:
xiha1:x:1111:

[root@linux-01 ~]# groupdel xiha1   # 删除用户组必须事用户组下没有用户,不然会提示删除报错。类似于rmdik命令。
[root@linux-01 ~]# tail -n2 /etc/group
slocate:x:21:
xiha:x:1002:

3. 修改用户账户信息 usermod

usermod的参数以及含义如下表格

参数 详解
-a 把用户追加到某些组中,仅与-G选项一起使用
-c 修改/etc/passwd文件第五段comment
-d 修改用户的家目录通常和-m选项一起使用
-e 指定用户帐号禁用的日期,格式YY-MM-DD
-f 用户密码过期多少天后采用就禁用该帐号,0表示密码已过期就禁用帐号,-1表示禁用此功能,默认值是-1
-g 修改用户的gid,改组一定存在
-G 把用户追加到某些组中,仅与-a选项一起使用
-l 修改用户的登录名称
-L 锁定用户的密码
-m 移动用户家目录下的内容到新的家目录,通常和-d选项一起使用
-s 修改用户的shell
-u 修改用户的uid,该uid必须唯一
-U 解锁用户的密码
[root@linux-01 ~]# tail -n2 /etc/passwd
xihaji:x:1000:1000::/home/xihaji:/bin/bash
xihaji2:x:1001:1001::/home/xihaji_2:/bin/bash
[root@linux-01 ~]# usermod  -d /home/xihaji2    xihaji2
[root@linux-01 ~]# tail -n2 /etc/passwd
xihaji:x:1000:1000::/home/xihaji:/bin/bash
xihaji2:x:1001:1001::/home/xihaji2:/bin/bash

4.修改密码 passwd

密码设置原则,(请勿使用和自己真实信息相关的一些信息做为密码):

  • 长度设置10位+
  • 包含数字
  • 大小写字母
  • 特殊符号
## 之前在讲set_uid的时候有讲到过此命令是有set_uid的权限,可以让其他用户临死有修改所属主的权限。
[root@linux-01 home]# ll /bin/passwd 
-rwsr-xr-x. 1 root root 27832 6月  10 2014 /bin/passwd

## 修改root用户密码
[root@linux-01 home]# passwd 
更改用户 root 的密码 。
新的 密码:
无效的密码: 密码少于 7 个字符
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。

## 修改xihaji用户的密码 :passwd username
[root@linux-01 home]# passwd xihaji
更改用户 xihaji 的密码 。
新的 密码:
无效的密码: 密码少于 7 个字符
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。

## 查看下密码配置文件
[root@linux-01 home]# tail -n3  /etc/shadow  # 密码配置文件的第二行如果是!代表此用户无法登陆
sshd:!!:17968::::::
postfix:!!:17968::::::
xihaji:$6$GnBccwFA$bSAbk9uR5UVIO/Kr3tLLZRY9n6sJPEqIYjCfQUdOnZSLePD6M6IEdxtgrEH2aQ3FiY46LksZ7wwkjOsHGcoTB.:17975:0:99999:7:::

## passwd 可以锁定一个用户,-l 选项
[root@linux-01 home]# passwd -l xihaji
锁定用户 xihaji 的密码 。
passwd: 操作成功
[root@linux-01 home]# tail -n3  /etc/shadow  # 锁定的用户第二列前会加两个!号
sshd:!!:17968::::::
postfix:!!:17968::::::
xihaji:!!$6$GnBccwFA$bSAbk9uR5UVIO/Kr3tLLZRY9n6sJPEqIYjCfQUdOnZSLePD6M6IEdxtgrEH2aQ3FiY46LksZ7wwkjOsHGcoTB.:17975:0:99999:7:::

## passwd 解锁一个用户,-u 选项
[root@linux-01 home]# passwd -u xihaji
解锁用户 xihaji 的密码。
passwd: 操作成功
[root@linux-01 home]# tail -n3  /etc/shadow
sshd:!!:17968::::::
postfix:!!:17968::::::
xihaji:$6$GnBccwFA$bSAbk9uR5UVIO/Kr3tLLZRY9n6sJPEqIYjCfQUdOnZSLePD6M6IEdxtgrEH2aQ3FiY46LksZ7wwkjOsHGcoTB.:17975:0:99999:7:::

## passwd  --stdin  username 用法  ,明文显示密码
[root@linux-01 home]# passwd --stdin xihaji
更改用户 xihaji 的密码 。
123456
passwd:所有的身份验证令牌已经成功更新。
[root@linux-01 home]# echo "111222" | passwd --stdin  xihaji
更改用户 xihaji 的密码 。
passwd:所有的身份验证令牌已经成功更新。
[root@linux-01 home]# echo -e "111222\n111222" | passwd   xihaji
更改用户 xihaji 的密码 。
新的 密码:无效的密码: 密码少于 8 个字符
重新输入新的 密码:passwd:所有的身份验证令牌已经成功更新。
[root@linux-01 home]# 

5.生成密码工具 mkpasswd

## 系统中没有mkpasswd的这个命令,需要安装expect  ##
[root@linux-01 home]# yum -y install expect 
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
 * base: mirrors.163.com
 * extras: mirrors.cn99.com
 * updates: mirrors.163.com
base                                                                                                          | 3.6 kB  00:00:00     
extras                                                                                                        | 3.4 kB  00:00:00     
updates                                                                                                       | 3.4 kB  00:00:00     
(1/2): extras/7/x86_64/primary_db                                                                             | 187 kB  00:00:00     
(2/2): updates/7/x86_64/primary_db                                                                            | 3.3 MB  00:00:00     
正在解决依赖关系
--> 正在检查事务
---> 软件包 expect.x86_64.0.5.45-14.el7_1 将被 安装
--> 正在处理依赖关系 libtcl8.5.so()(64bit),它被软件包 expect-5.45-14.el7_1.x86_64 需要
--> 正在检查事务
---> 软件包 tcl.x86_64.1.8.5.13-8.el7 将被 安装
--> 解决依赖关系完成

依赖关系解决

=====================================================================================================================================
 Package                       架构                          版本                                  源                           大小
=====================================================================================================================================
正在安装:
 expect                        x86_64                        5.45-14.el7_1                         base                        262 k
为依赖而安装:
 tcl                           x86_64                        1:8.5.13-8.el7                        base                        1.9 M

事务概要
=====================================================================================================================================
安装  1 软件包 (+1 依赖软件包)

总下载量:2.1 M
安装大小:4.9 M
Downloading packages:
(1/2): expect-5.45-14.el7_1.x86_64.rpm                                                                        | 262 kB  00:00:00     
(2/2): tcl-8.5.13-8.el7.x86_64.rpm                                                                            | 1.9 MB  00:00:00     
-------------------------------------------------------------------------------------------------------------------------------------
总计                                                                                                 5.0 MB/s | 2.1 MB  00:00:00     
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  正在安装    : 1:tcl-8.5.13-8.el7.x86_64                                                                                        1/2 
  正在安装    : expect-5.45-14.el7_1.x86_64                                                                                      2/2 
  验证中      : 1:tcl-8.5.13-8.el7.x86_64                                                                                        1/2 
  验证中      : expect-5.45-14.el7_1.x86_64                                                                                      2/2 

已安装:
  expect.x86_64 0:5.45-14.el7_1                                                                                                      

作为依赖被安装:
  tcl.x86_64 1:8.5.13-8.el7                                                                                                          

完毕!

## 生成密码 ##
[root@linux-01 home]# mkpasswd    # 默认生成一个9位的密码。
O3sSjh6c+
[root@linux-01 home]# mkpasswd  -l 12  # -l b表示长,可以指定12位。
gUF8sy7on|kk
[root@linux-01 home]# mkpasswd  -l 12  -s 0  # -s 表示是否需要特殊字符,0表示不包含特殊字符。
vaac7AchxyS2

6.切换用户 su - username

## 切换用户 ##
[root@linux-01 home]# su xihaji
[xihaji@linux-01 home]$ pwd
/home
[xihaji@linux-01 home]$ exit
exit
[root@linux-01 home]# su - xihaji   # 加上 - 可以切换到xihaji用户的家目录
上一次登录:四 3月 21 04:30:59 CST 2019pts/0 上
[xihaji@linux-01 ~]$ pwd
/home/xihaji

## 指定切换一个用户执行一条命令,而不进如用户 ##
[root@linux-01 home]# su - -c "touch  /home/xihaji/1.txt"  xihaji     #  -c 表示指定一条命令
[root@linux-01 home]# ll /home/xihaji/1.txt   #  我们可以看到此命令执行后文件的所属主和所属组都是用户本身。
-rw-rw-r--. 1 xihaji xihaji 0 3月  21 04:34 /home/xihaji/1.txt
[root@linux-01 home]# 

## 创建一个用户,不创建用户的家目录,登陆此用户后的用户不在用户的家目录,创建一个用户的家目录,系统已经备份好一份 shell,在/etc/skel/下,.开头的文件是隐藏文件。 ##
[root@linux-01 home]# useradd -M xihaji2
正在创建信箱文件: 文件已存在
[root@linux-01 home]# ll
总用量 0
drwxr-xr-x. 2 root   root    6 3月  20 05:36 111
drwx------. 2 xihaji xihaji 96 3月  21 04:34 xihaji
[root@linux-01 home]# tail -n2 /etc/passwd
xihaji:x:1000:1000::/home/xihaji:/bin/bash
xihaji2:x:1001:1001::/home/xihaji2:/bin/bash

-bash-4.2$ pwd
/home
-bash-4.2$ ll
总用量 0
drwxr-xr-x. 2 root   root    6 3月  20 05:36 111
drwx------. 2 xihaji xihaji 96 3月  21 04:34 xihaji
-bash-4.2$ exit
登出
[root@linux-01 home]#  mkdir xihaji2
[root@linux-01 home]# chown -R xihaji2:xihaji2 /home/xihaji2/
[root@linux-01 home]# ll -d /home/xihaji2/
drwxr-xr-x. 2 xihaji2 xihaji2 62 3月  21 04:53 /home/xihaji2/    
[root@linux-01 home]# cp  /etc/skel/.bash*  /home/xihaji2/
[root@linux-01 home]# chown -R xihaji2:xihaji2 /home/xihaji2/

[root@linux-01 home]# su - xihaji2    #  进入用户xihaji2
上一次登录:四 3月 21 04:53:56 CST 2019pts/0 上
[root@linux-01 home]# ll -d /home/xihaji2/
drwxr-xr-x. 2 xihaji2 xihaji2 62 3月  21 04:53 /home/xihaji2/
[xihaji2@linux-01 ~]$ ll -a
总用量 12
drwxr-xr-x. 2 xihaji2 xihaji2  62 3月  21 04:53 .
drwxr-xr-x. 5 root    root     46 3月  21 04:52 ..
-rw-r--r--. 1 xihaji2 xihaji2  18 3月  21 04:53 .bash_logout
-rw-r--r--. 1 xihaji2 xihaji2 193 3月  21 04:53 .bash_profile
-rw-r--r--. 1 xihaji2 xihaji2 231 3月  21 04:53 .bashrc
[xihaji2@linux-01 ~]$ pwd
/home/xihaji2

7.sudo 为非根用户授予根用户的权限

sudo配置文件:/etc/sudoers
打开配置文件不能用vim,vim 编辑器没有排错功能,使用命令visudo。
扩展阅读:https://www.jianshu.com/p/51338e41abb7

[root@linux-01 home]# visudo
……前面省略
## Allow root to run any commands anywhere
 root    ALL=(ALL)       ALL
         说明: 
        第一个字段:root为能使用sudo命令的用户; 
		第二个字段:第一个ALL为允许使用sudo的主机,第二个括号里的ALL为使用sudo后以什么身份(目的用户身份)来执行命令; 
        第三个字:ALL为以sudo命令允许执行的命令; 
  上列解释: xihaji2     ALL=(root)  /usr/sbin/ls
表示允许xihaji2用户从任何主机登录,以root的身份执行/usr/sbin/ls命令。 

## 给xihaji2用户设置允许使用root的权限,来查看下效果 ##
[root@linux-01 home]# su - xihaji2
上一次登录:四 3月 21 17:36:52 CST 2019pts/0 上
[xihaji2@linux-01 ~]$ sudo ls /root/

我们信任您已经从系统管理员那里了解了日常注意事项。
总结起来无外乎这三点:

    #1) 尊重别人的隐私。
    #2) 输入前要先考虑(后果和风险)。
    #3) 权力越大,责任越大。

[sudo] xihaji2 的密码:
1.txt  anaconda-ks.cfg

8. 限制root用户远程登陆

服务器root用户不可以直接远程,为了保证服务器得安全性,那普通用户想要执行root用户权限得命令,普通用户不知道root用户的密码,这个时候怎么办?
这个时候可以用到visudo了,修改sudoers:

  • 把普通用户添加到一个用户组,User_Alias ADMINS = jsmith, mikem
  • 给这个用户群组设置执行su - 权限,root用户在使用su -是不需要输入密码的。
    Allow root to run any commands anywhere root
    ALL=(ALL) /usr/bin/su
  • 这样即可实现root用户无法远程登陆,普通用户可以使用 sudo su - 的权限切换到root用户。
## 禁止用户远程登陆配置文件 /etc/ssh/sshd_config ##
[root@linux-01 home]# vim /etc/ssh/sshd_config
#PermitRootLogin yes  # 找到文件中的这一行,这一行控制root用户可以远程登陆,yes改为no
PermitRootLogin no  # 修改之后保存,重启sshd服务
[root@linux-01 home] systemctl restart sshd.service  # 重启之后在新建shell窗口远程登陆root会提示无法登陆

##  配置了禁止root用户远程登陆后,我们需要修改sudoers文件 ##
[root@linux-01 ~]# visudo

## User Aliases
## These aren't often necessary, as you can use regular groups
## (ie, from files, LDAP, NIS, etc) in this file - just use %groupname
## rather than USERALIAS
# User_Alias ADMINS = jsmith, mikem
User_Alias ADMINS = xihaji2     # 增加一条虚拟用户,把普通用户加入到此用户下面


## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL
ADMINS  ALL=(ALL)       /usr/bin/su   # 给此虚拟用户增加root用户的权限

Connecting to 192.168.141.128:22...
Connection established.
To escape to local shell, press 'Ctrl+Alt+]'.

WARNING! The remote SSH server rejected X11 forwarding request.
Last login: Thu Mar 21 18:52:04 2019 from 192.168.141.1

## sudo su -  第一次使用命令的时候需要输入此用户的密码,后续就不会输入密码  ##
[xihaji2@linux-01 ~]$ sudo su - 
[sudo] xihaji2 的密码: 
上一次登录:四 3月 21 18:52:12 CST 2019pts/0 上
[root@linux-01 ~]# 

课后总结

1.用户管理在工作中如何体现?

  • 创建一些项目的时候应该要用到,创建的项目一般会以项目名来作为用户;(这个是我工作的时候遇到的)
  • 服务器打开给开发查看日志的时候,这时候我们可能会需要创建一个readonly账号给开发同学使用,通过配置sudo,给新建的readonly账号设置一定的权限。

2.密码配置文件中第二列密码的配置项

  • “*” "!"代表帐号被锁定,
  • “!!”表示这个密码已经过期了。
  • 字符串是以 6 6 开头的,表明是用SHA-512加密的, 1 1 表明是用MD5加密的、 2 2 是用Blowfish加密的、 5 5 是用 SHA-256加密的。

3. sudo的配置文件/etc/sudoers

  • 配置文件字段 root ALL=(ALL) ALL
  • root :用户,用户组,别名用户,别名组
  • 第一个ALL:登陆到主机的:主机名,hostname,ip段
  • 第二个ALL:身份,如果没有设置,默认root身份
  • 第三个ALL:和第二个ALL直接可以设置NOPASSWD;命令必须是绝对路劲,多个命令之间使用“,”号
扩展阅读:https://www.jianshu.com/p/51338e41abb7

4.问题:把普通用户锁在家目录,不让切换目录,应该怎样操作?

解析:(通过网上搜索,搜到以下答案)

  • 下图是老师的解答方案。
    在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/u011709380/article/details/88665940