用户和组管理

一、用户配置文件和密码配置文件

1、useradd为创建用户命令

1)/etc/passwd文件

[root@mxk-01 ~]# ls /etc/passwd
/etc/passwd
[root@mxk-01 ~]# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
......
xiaokang:x:1000:1000::/home/xiaokang:/bin/bash
linlin:x:1001:1001::/home/linlin:/bin/bash
mxk:x:1002:1002::/home/mxk:/bin/bash     

(每增加一个用户,该配置文件就会增加一行) 知识点

2)文件结构:

每一个用户为一行,有冒号分割为7段
第一段:用户名
第二段:表示密码(早期为密码) 
第三段:为uid(centos7的普通用户标识号从1000开始)
第四段:gid
第五段:用户注释信息
第六段:用户家目录
第七段:用户的shell(用户登录后,要启动一个进程,用来将用户的指令传给内核,这就是shell,Linux的shell有sh、csh、ksh、tcsh、bash等多种,而Red Hat/CentOS的shell就是bash)

2、专门用来存放或者控制密码的文件路径

1) /etc/shadow 文件

[root@mxk-01 ~]# ls /etc/shadow
/etc/shadow
[root@mxk-01 ~]# cat /etc/shadow
root:$6$gt7K3Cyd$gRSzczcTE5IpEJAPStWBuCSI7XLxdPUHhOfm4l.g04DTR9E994IEmQ46suoOqGxNbVp0262bk6pQHVS7YJd.G/:17662:0:99999:7:::
bin:*:17110:0:99999:7:::
......
xiaokang:!!:17663:0:99999:7:::
linlin:$6$nyAHFIg8$rXUXCooGbauZgSkmkT7419Q.9LJOx9sb2H.dSdWcNj0T95xO2xdURjtd.YNGjjk3FQZmnh4..MCJqOLg3hyaV1:17664:0:99999:7:::
mxk:$6$ri9mAbJc$lDTqD1x1EGeInlrZnENM/DYaFbaXEoZcZg53ciBdFvq/0yBEGldbV7DMpDUvrJ7SsbcoNKlgxi7M7p300qGEb0:17664:0:99999:7:::

2)文件结构:

此文件与passwd一一对应,每一行为用户密码,用冒号分割9段,每一行含义可以用 man shadow 可以查看
第一段:用户名
第二段:密码(未加密密码,不能编译,可以有明文获得密码,反过来不行)
第三段:为上次更改密码日期
第四段:要过多少天才可以更改密码
第五段:密码多少天后到期,记多少天必须更改密码
第六段:密码到期前较高期限
第七段:账号失效期限
第八段:账号的生命周期
第九段:作为保留用的

[root@mxk-01 ~]# man shadow  
每个字段的含义是:

   ·   sp_namp - 指向以 null 结束的用户名的指针

   ·   sp_pwdp - 指向 null 结束的密码的指针

   ·   sp_lstchg - 最近更改密码的日期(日期计算方法是从1970年1月1日开始的天数)

   ·   sp_min - days before which password may not be changed

   ·   sp_max - days after which password must be changed

   ·   sp_warn - days before password is to expire that user is warned of pending password expiration

   ·   sp_inact - days after password expires that account is considered inactive and disabled

   ·   sp_expire - days since Jan 1, 1970 when account will be disabled

   ·   sp_flag - reserved for future use

3)为用户设置密码,与root用户相同的密码,但是密码字符串不同。

[root@mxk-01 ~]# head -n1 /etc/shadow; tail -n2 /etc/shadow
root:$6$gt7K3Cyd$gRSzczcTE5IpEJAPStWBuCSI7XLxdPUHhOfm4l.g04DTR9E994IEmQ46suoOqGxNbVp0262bk6pQHVS7YJd.G/:17662:0:99999:7:::
linlin:$6$nyAHFIg8$rXUXCooGbauZgSkmkT7419Q.9LJOx9sb2H.dSdWcNj0T95xO2xdURjtd.YNGjjk3FQZmnh4..MCJqOLg3hyaV1:17664:0:99999:7:::
mxk:$6$ri9mAbJc$lDTqD1x1EGeInlrZnENM/DYaFbaXEoZcZg53ciBdFvq/0yBEGldbV7DMpDUvrJ7SsbcoNKlgxi7M7p300qGEb0:17664:0:99999:7:::  

二、用户组管理

关于用户组的文件 /etc/group (与/etc/passwd以及etc/shadow差不多相对应)

1、查看具体内容

1)

[root@mxk-01 ~]# ls /etc/group
/etc/group
[root@mxk-01 ~]# cat /etc/group
root:x:0:
bin:x:1:
......
mxk:x:1002:
slocate:x:21:

2)带有波浪号的文件是系统自动备份的文件

[root@mxk-01 ~]# ls /etc/passwd
passwd   passwd-  
[root@mxk-01 ~]# ls /etc/shadow
shadow   shadow-  
[root@mxk-01 ~]# ls /etc/gshadow
gshadow   gshadow-
[root@mxk-01 ~]# ls /etc/group
group   group-

2、关于用户组的命令

1)groupadd 创建用户组命令 ###

命令格式:groupadd [ -g GID ] groupname

[root@mxk-01 ~]# groupadd grp1
[root@mxk-01 ~]# tail -n1 /etc/group
grp1:x:1003:
增加用户组的同时,可以指定id
[root@mxk-01 ~]# groupadd -g 1234 grp2
[root@mxk-01 ~]# tail -n3 /etc/group
slocate:x:21:
grp1:x:1003:
grp2:x:1234:

即 -g 选项可以自定义gid号

2)groupdel 删除用户组命令

[root@mxk-01 ~]# groupdel grp1
[root@mxk-01 ~]# tail -n3 /etc/group
mxk:x:1002:
slocate:x:21:
grp2:x:1234:
要想删除某个用户组,只要该用户组里有用户,是无法删除的
[root@mxk-01 ~]# groupdel mxk
groupdel:不能移除用户“mxk”的主组

三、用户管理

1、增加用户命令 useradd(也可以使用 adduser)

如果增加用户时不加任何选项,直接跟用户名,则会创建一个跟用户名同名的组

[root@mxk-01 ~]# useradd user1
[root@mxk-01 ~]# tail -n3 /etc/passwd
linlin:x:1001:1001::/home/linlin:/bin/bash
mxk:x:1002:1002::/home/mxk:/bin/bash
user1:x:1003:1003::/home/user1:/bin/bash  

(普通用户的uid是从1000开始的,第三段)

1)创建用户时选项的使用

-u 自定义uid
-g 是新增用户属于已存在的某个组,后可以跟id,也可以跟组名
-d 自定义用户的家目录
-M 创建用户时不创建家目录
-s 自定义shell

[root@mxk-01 ~]# useradd -u 1005 -g grp2 -d /home/mxk123 -s /sbin/nologin user3
[root@mxk-01 ~]# tail -n3 /etc/passwd
user1:x:1003:1003::/home/user1:/bin/bash
user2:x:1004:1234::/home/user2:/bin/bash
user3:x:1005:1234::/home/mxk123:/sbin/nologin
查看 home 下是否存在 mxk123 目录
[root@mxk-01 ~]# ls /home/
linlin  mxk  mxk123  user1  user2  xiaokang

2)创建用户的同时指定不创建家目录

[root@mxk-01 ~]# useradd -M user4
[root@mxk-01 ~]# tail -n3 /etc/passwd
user2:x:1004:1234::/home/user2:/bin/bash
user3:x:1005:1234::/home/mxk123:/sbin/nologin
user4:x:1006:1006::/home/user4:/bin/bash
查看 home 下是否存在 user4 目录
[root@mxk-01 ~]# ls /home/
linlin  mxk  mxk123  user1  user2  xiaokang  

3)创建用户uid会根据指定的uid继续自动递增,创建用户组时gid不会自动递增,会根据uid增加

[root@mxk-01 ~]# useradd -u 1008 user5
[root@mxk-01 ~]# tail -n6 /etc/passwd
mxk:x:1002:1002::/home/mxk:/bin/bash
user1:x:1003:1003::/home/user1:/bin/bash
user2:x:1004:1234::/home/user2:/bin/bash
user3:x:1005:1234::/home/mxk123:/sbin/nologin
user4:x:1006:1006::/home/user4:/bin/bash
user5:x:1008:1008::/home/user5:/bin/bash
[root@mxk-01 ~]# useradd user6
[root@mxk-01 ~]# tail -n6 /etc/passwd
user1:x:1003:1003::/home/user1:/bin/bash
user2:x:1004:1234::/home/user2:/bin/bash
user3:x:1005:1234::/home/mxk123:/sbin/nologin
user4:x:1006:1006::/home/user4:/bin/bash
user5:x:1008:1008::/home/user5:/bin/bash
user6:x:1009:1009::/home/user6:/bin/bash

2、删除用户命令 userdel

删除命令格式: userdel [-r] username

[root@mxk-01 ~]# tail -n2 /etc/passwd
user4:x:1006:1006::/home/user4:/bin/bash
user6:x:1009:1009::/home/user6:/bin/bash
[root@mxk-01 ~]# userdel user6
[root@mxk-01 ~]# tail -n2 /etc/passwd
user3:x:1005:1234::/home/mxk123:/sbin/nologin
user4:x:1006:1006::/home/user4:/bin/bash

删除用户但是不删除用户的家目录(将用户家目录留给管理员手动删除,以防删除某些文件)

[root@mxk-01 ~]# ls /home/
linlin  mxk  mxk123  user1  user2  user5  user6  xiaokang

删除用户时,直接删除家目录的选项: -r

[root@mxk-01 ~]# tail -n2 /etc/passwd
user2:x:1004:1234::/home/user2:/bin/bash
user3:x:1005:1234::/home/mxk123:/sbin/nologin
[root@mxk-01 ~]# ls /home/
linlin  mxk  mxk123  user1  user2  user5  user6  xiaokang
[root@mxk-01 ~]# userdel -r user3
[root@mxk-01 ~]# ls /home/
linlin  mxk  user1  user2  user5  user6  xiaokang  

使用 chfn 命令更改用户的finger,比如:name、office、office phone以及home phone,修改完在用户的第五段里就可以看到信息了

四、usermod命令

1、更改用户属性的命令

命令格式:usermod -u 新的uid号 用户名( -u 为选项,选项不同更改的内容则不同)
-g 指定用户组gid
-d 指定家目录
-s 指定shell

知识点:

1、扩展组

用 id username 命令查看用户uid、gid、以及所属组

[root@mxk-01 ~]# id user2
uid=1004(user2) gid=1234(grp2) 组=1234(grp2)    

(组不仅包括gid,还包括其他扩展组)

一个用户可以属于多个用户组,但是gid只有一个,将其他的组称为:扩展组
[root@mxk-01 ~]# id user2
uid=1004(user2) gid=1234(grp2) 组=1234(grp2)
[root@mxk-01 ~]# usermod -G user1 user2
[root@mxk-01 ~]# id user2
uid=1004(user2) gid=1234(grp2) 组=1234(grp2),1003(user1)  

(此组为扩展组,即选项 -G 为添加扩展组)

还可以继续添加扩展组,但是用选项 -G 会替换之前的扩展组
[root@mxk-01 ~]# id user2
uid=1004(user2) gid=1234(grp2) 组=1234(grp2),1003(user1)
[root@mxk-01 ~]# usermod -G mxk user2
[root@mxk-01 ~]# id user2
uid=1004(user2) gid=1234(grp2) 组=1234(grp2),1002(mxk)
同时给添加扩展组
[root@mxk-01 ~]# usermod -G mxk,user1 user2
[root@mxk-01 ~]# id user2
uid=1004(user2) gid=1234(grp2) 组=1234(grp2),1002(mxk),1003(user1)    

(选项 -g 不可以, -g 只可以指定用户组)

五、用户密码管理

初创用户没有密码,只有设置密码才能安全使用

1、用户设置密码时尽量遵循以下规则

密码长度大于10位
密码中包含大小写字母、数字以及特殊符号
不规则性 不要带有自己名字、生日等特殊信息

2、设置密码命令passwd格式:passwd [username]

1)如果后边不加用户名,则默认为更改root密码

[root@mxk-01 ~]# passwd
更改用户 root 的密码 。
新的 密码:
无效的密码: 密码未通过字典检查 - 过于简单化/系统化
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。  

2)如果登录的是root用户,passwd [uesrname] 就可以直接更改

[root@mxk-01 ~]# passwd user1
更改用户 user1 的密码 。
新的 密码:
无效的密码: 密码未通过字典检查 - 过于简单化/系统化
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。  

更改完密码之后,执行 tail /etc/shadow,会发现user1二段有字符串,这是加密的密码

[root@mxk-01 ~]# tail /etc/shadow
dbus:!!:17661::::::
polkitd:!!:17661::::::
postfix:!!:17661::::::
sshd:!!:17661::::::
chrony:!!:17661::::::
xiaokang:!!:17663:0:99999:7:::
linlin:$6$nyAHFIg8$rXUXCooGbauZgSkmkT7419Q.9LJOx9sb2H.dSdWcNj0T95xO2xdURjtd.YNGjjk3FQZmnh4..MCJqOLg3hyaV1:17664:0:99999:7:::
mxk:$6$ri9mAbJc$lDTqD1x1EGeInlrZnENM/DYaFbaXEoZcZg53ciBdFvq/0yBEGldbV7DMpDUvrJ7SsbcoNKlgxi7M7p300qGEb0:17664:0:99999:7:::
user1:$6$jyqZkSyc$jf3HkYfpvHx8UOSIINAujTFBh3Huxcb1zKMSYdhGgCgr0xl9XUc9.VSafMvQKI6OiPoXpUJC6EH08LCh.7j7S/:17668:0:99999:7:::
user2:!!:17666:0:99999:7:::  

第二段
如果是双感叹号 !! 则表示该用户密码为空,不能登陆
如果是星号 * 则表示该用户密码是锁定的,不能使用登录

3、选项

1)-l 锁定用户密码

[root@mxk-01 ~]# passwd -l user1
锁定用户 user1 的密码 。
passwd: 操作成功
[root@mxk-01 ~]# tail /etc/shadow
dbus:!!:17661::::::
polkitd:!!:17661::::::
postfix:!!:17661::::::
sshd:!!:17661::::::
chrony:!!:17661::::::
xiaokang:!!:17663:0:99999:7:::
linlin:$6$nyAHFIg8$rXUXCooGbauZgSkmkT7419Q.9LJOx9sb2H.dSdWcNj0T95xO2xdURjtd.YNGjjk3FQZmnh4..MCJqOLg3hyaV1:17664:0:99999:7:::
mxk:$6$ri9mAbJc$lDTqD1x1EGeInlrZnENM/DYaFbaXEoZcZg53ciBdFvq/0yBEGldbV7DMpDUvrJ7SsbcoNKlgxi7M7p300qGEb0:17664:0:99999:7:::
user1:!!$6$jyqZkSyc$jf3HkYfpvHx8UOSIINAujTFBh3Huxcb1zKMSYdhGgCgr0xl9XUc9.VSafMvQKI6OiPoXpUJC6EH08LCh.7j7S/:17668:0:99999:7:::
user2:!!:17666:0:99999:7:::

2)-u 解锁用户密码

tail /etc/shadow
dbus:!!:17661::::::
polkitd:!!:17661::::::
postfix:!!:17661::::::
sshd:!!:17661::::::
chrony:!!:17661::::::
xiaokang:!!:17663:0:99999:7:::
linlin:$6$nyAHFIg8$rXUXCooGbauZgSkmkT7419Q.9LJOx9sb2H.dSdWcNj0T95xO2xdURjtd.YNGjjk3FQZmnh4..MCJqOLg3hyaV1:17664:0:99999:7:::
mxk:$6$ri9mAbJc$lDTqD1x1EGeInlrZnENM/DYaFbaXEoZcZg53ciBdFvq/0yBEGldbV7DMpDUvrJ7SsbcoNKlgxi7M7p300qGEb0:17664:0:99999:7:::
user1:$6$jyqZkSyc$jf3HkYfpvHx8UOSIINAujTFBh3Huxcb1zKMSYdhGgCgr0xl9XUc9.VSafMvQKI6OiPoXpUJC6EH08LCh.7j7S/:17668:0:99999:7:::
user2:!!:17666:0:99999:7::: 

选项
usermod -L username 同样可以锁定用户密码,只是在第二段会出现一个感叹号 ! 
usermod -U username可以解锁用户密码,一个感叹号会消失

[root@mxk-01 ~]# usermod -L user1  
[root@mxk-01 ~]# tail /etc/shadow
dbus:!!:17661::::::
polkitd:!!:17661::::::
postfix:!!:17661::::::  
......
user1:!$6$jyqZkSyc$jf3HkYfpvHx8UOSIINAujTFBh3Huxcb1zKMSYdhGgCgr0xl9XUc9.VSafMvQKI6OiPoXpUJC6EH08LCh.7j7S/:17668:0:99999:7:::
user2:!!:17666:0:99999:7:::
[root@mxk-01 ~]# usermod -U user1
[root@mxk-01 ~]# tail /etc/shadow
dbus:!!:17661::::::
polkitd:!!:17661::::::
postfix:!!:17661::::::
......
user1:$6$jyqZkSyc$jf3HkYfpvHx8UOSIINAujTFBh3Huxcb1zKMSYdhGgCgr0xl9XUc9.VSafMvQKI6OiPoXpUJC6EH08LCh.7j7S/:17668:0:99999:7:::
user2:!!:17666:0:99999:7:::  

知识点

1)
passwd --stdin username 也可以更改用户密码,而且输入一次,密码会明文显示

[root@mxk-01 ~]# passwd --stdin user1
更改用户 user1 的密码 。
123456789
passwd:所有的身份验证令牌已经成功更新。  
这个命令以后会在shell脚本中用到,格式为:echo “123456789” |passwd --stdin user1   
[root@mxk-01 ~]# echo “123456789” |passwd --stdin user1
更改用户 user1 的密码 。
passwd:所有的身份验证令牌已经成功更新。   

“|”为管道符号,作用是把前面的命令的输出再输入给后边的命令

2)
echo -e “123\n321” 可以在一行命令里出现换行符,如果不加 -e 不会实现换行的功能

[root@mxk-01 ~]# echo -e "123\n321"
123
321
[root@mxk-01 ~]# echo "123\n321"
123\n321  
echo -e “123\t321”  t=tab,会有空格  
[root@mxk-01 ~]# echo -e "123\t321"
123 321  

3)
一条命令可以实现更改密码的格式: echo -e “123456789\t123456789” |passwd user1

六、mkpasswd命令

命令mkpasswd是用来生成密码的,mkpasswd=make passwd

1、此命令是不存在的,需要做安装expect软件包

[root@mxk-01 ~]# mkpasswd
-bash: mkpasswd: 未找到命令
[root@mxk-01 ~]# yum install -y expect
已加载插件:fastestmirror
base | 3.6 kB  00:00:00 
extras   | 3.4 kB  00:00:00 
......
已安装:
  expect.x86_64 0:5.45-14.el7_1 

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

完毕!  

此命令随机生成一段字符串,可以将随机字符串设置为密码,可以指定密码长度,以及特殊符号个数

选项

-l 指定密码长度
-s 指定特殊符号个数
-d 指定数字个数

[root@mxk-01 ~]# mkpasswd
BmwD^c53j
[root@mxk-01 ~]# mkpasswd -l 12
u$aUXldio53l
[root@mxk-01 ~]# mkpasswd -l 12 -s 3  

通常写脚本时,会非常实用

七、su 命令

su 命令是用来切换用户的,命令格式:su [-] username

1、加 - 的目的是为了彻底的切换用户,包括配置,环境变量

[root@mxk-01 ~]# su - mxk
上一次登录:日 5月 13 17:30:52 CST 2018pts/1 上
[mxk@mxk-01 ~]$ id
uid=1002(mxk) gid=1002(mxk) 组=1002(mxk) 环境=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023  

如果不加 - 也可以切换,但是 pwd 后会发现目录在 /root 下

[root@mxk-01 ~]# su mxk
[mxk@mxk-01 root]$ pwd
/root  

如果不加 - 切换到root账户时,当前目录没有变化;而加上 - 切换到root账户时,当前目录为root用户的家目录

[root@mxk-01 ~]# su - mxk
上一次登录:四 5月 17 22:03:58 CST 2018pts/0 上
[mxk@mxk-01 ~]$ pwd
/home/mxk
[mxk@mxk-01 ~]$ su
密码:
[root@mxk-01 mxk]# pwd
/home/mxk
[root@mxk-01 mxk]# su -
上一次登录:四 5月 17 22:05:14 CST 2018pts/0 上
[root@mxk-01 ~]# pwd
/root  

2、在执行 su 时不在 1 用户身份,用 1 用户的身份执行一条命令,格式:su - -c “命令内容” 1 (以指定用户的身份去执行命令)

[root@mxk-01 ~]# su - -c "touch /tmp/love.11" mxk
[root@mxk-01 ~]# su - mxk
上一次登录:四 5月 17 22:16:40 CST 2018pts/0 上
[mxk@mxk-01 ~]$ ls -lt /tmp/
总用量 124
-rw-rw-r--. 1 mxk  mxk   0 5月  17 22:16 love.11
-rw-rw-r--. 1 mxk  mxk   0 5月  17 22:14 love.111
drwx------. 3 root root 17 5月  17 20:36 systemd-private-6f081857cd9f4646a55473426cb0aefb-chronyd.service-3E6Iab
......
drwx------. 3 root root 17 5月  11 00:01 systemd-private-541ce99b302347a39ba8bba86c26b2ec-vgauthd.service-pEgsWD
drwx------. 3 root root 17 5月  11 00:01 systemd-private-541ce99b302347a39ba8bba86c26b2ec-chronyd.service-KYBJgF  

由于:mxk用户的所属组属于:mxk,即创建的文件所属组:mxk

[mxk@mxk-01 ~]$ id mxk
uid=1002(mxk) gid=1002(mxk) 组=1002(mxk)   

3、

1)在普通用户下,也可以切换到其他用户下

[mxk@mxk-01 ~]$ id mxk
uid=1002(mxk) gid=1002(mxk) 组=1002(mxk)
[mxk@mxk-01 ~]$ su - linlin
密码:
上一次登录:四 5月 17 21:58:04 CST 2018pts/0 上  

2)若是要切换的普通用户家目录不存在

[mxk@mxk-01 ~]$ su - user1
密码:
上一次登录:四 5月 17 22:31:13 CST 2018pts/0 上
su: 警告:无法更改到 /home/user1 目录: 没有那个文件或目录
-bash-4.2$ ^C
-bash-4.2$ exit
登出  
即要为user1用户创建家目录,查看user1所有者和所属组,并且配置user1的所有者和所属组
[mxk@mxk-01 ~]$ su -
密码:
上一次登录:四 5月 17 22:32:43 CST 2018pts/0 上
[root@mxk-01 ~]# id user1
uid=1003(user1) gid=1003(user1) 组=1003(user1)
[root@mxk-01 ~]# mkdir /home/user1
[root@mxk-01 ~]# chown user1:user1 /home/user5/
[root@mxk-01 ~]# su - user1
上一次登录:四 5月 17 22:33:39 CST 2018pts/0 上
-bash-4.2$ ls -la
总用量 0
drwxr-xr-x. 2 root root  6 5月  17 22:35 .
drwxr-xr-x. 9 root root 99 5月  17 22:35 ..
-bash-4.2$ exit
登出  
发现依然不能切换登录,那是因为该用户家目录下没有配置文件,既要为该家目录配置文件,在系统中有其模板目录(模板文件的路径:/etc/skel/),可以将配置文件拷贝到user1家目录下,之后再更改所有者和所属组
[root@mxk-01 ~]# ls -la /etc/skel/
总用量 24
drwxr-xr-x.  2 root root   62 5月  11 06:29 .
drwxr-xr-x. 74 root root 8192 5月  17 22:29 ..
-rw-r--r--.  1 root root   18 8月   3 2017 .bash_logout
-rw-r--r--.  1 root root  193 8月   3 2017 .bash_profile
-rw-r--r--.  1 root root  231 8月   3 2017 .bashrc
[root@mxk-01 ~]# cp /etc/skel/.bash* /home/user1
[root@mxk-01 ~]# chown user1:user1 /home/user5/
[root@mxk-01 ~]# su - user1
上一次登录:四 5月 17 22:36:18 CST 2018pts/0 上
[user1@mxk-01 ~]$  

八、sudo 命令

sudo命令用来以其他身份来执行命令,预设的身份为root。在/etc/sudoers中设置了可执行sudo指令的用户。 格式:sudo [选项]

选项

-b:在后台执行指令
-h:显示帮助
-H:将HOME环境变量设为新身份的HOME环境变量
-k:结束密码的有效期限,也就是下次再执行sudo时便需要输入密码
-l:列出目前用户可执行与无法执行的指令
-p:改变询问密码的提示符号
-s:执行指定的shel
-u<用户>:以指定的用户作为新的身份。若不加上此参数,则预设以root作为新的身份
-v:延长密码有效期限5分钟
-V:显示版本信息

1、查开sudoers的配置文件(/etc/sudoers),用:visudo打开

 ## Allow root to run any commands anywhere
root  ALL=(ALL)   ALL  
mxk   ALL=(ALL)   ALL  

注:

1)配置结构:mxk ALL=(ALL) ALL

第一段为用户,指定让哪个用户有sudo权限
第二段ALL=(ALL),左边的ALL指所有的主机,右边的ALL指获取哪个用户的身份,第二段几乎都不用配置
第三段设定可以使用的sudo命令

2)

visudo,会检测出你使用语句的错误,当编辑出现错误时,会出现提示在某行出现错误,按:e 重新编辑;按:x 不保存对刚才的编辑;按:Q 退出并将保存刚才更改的内容,且有危险存在

[root@mxk-01 ~]# visudo
[root@mxk-01 ~]# su - mxk
上一次登录:四 5月 17 22:33:13 CST 2018pts/0 上
[mxk@mxk-01 ~]$ ls -ld /root/
dr-xr-x---. 5 root root 4096 5月  14 23:02 /root/
[mxk@mxk-01 ~]$ su -
密码:
上一次登录:四 5月 17 22:55:01 CST 2018pts/0 上
[root@mxk-01 ~]# ll /usr/bin/ls (查看到给ls设置了gid权限)
-rwxr-sr-x. 1 root root 117656 11月  6 2016 /usr/bin/ls
[root@mxk-01 ~]# chmod g-s /usr/bin/ls (重新设置权限)
[root@mxk-01 ~]# su - mxk
上一次登录:四 5月 17 23:11:04 CST 2018pts/0 上
[mxk@mxk-01 ~]$ ls /root/
ls: 无法打开目录/root/: 权限不够  

2、检测:sudo,需要输入该用户的密码,即有权限查看信息

[mxk@mxk-01 ~]$ sudo /usr/bin/ls /root/

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

 #1) 尊重别人的隐私。
 #2) 输入前要先考虑(后果和风险)。
 #3) 权力越大,责任越大。  (初次使用时会出现提示,再次使用时就不会出现)

[sudo] mxk 的密码:
123  1_heard.txt  1.txt  234  2.txt~  2.txt.bak  anaconda-ks.cfg.1  _sorft.txt  收据.docx
[mxk@mxk-01 ~]$ ls /root/
ls: 无法打开目录/root/: 权限不够
[mxk@mxk-01 ~]$ sudo /usr/bin/ls /root/
123  1_heard.txt  1.txt  234  2.txt~  2.txt.bak  anaconda-ks.cfg.1  _sorft.txt  收据.docx  
[mxk@mxk-01 ~]$ cat /root/1.txt
cat: /root/1.txt: 权限不够
[mxk@mxk-01 ~]$ sudo /usr/bin/ls /root/1.txt
/root/1.txt  

3、在编辑:sudoers文件时,在第三段加上"NOPASSWD:",在切换用户时则不需要输入密码

 ## Allow root to run any commands anywhere
root  ALL=(ALL)   ALL
mxk   ALL=(ALL)   ALL
user1   ALL=(ALL)   NOPASSWD: ALL  
[root@mxk-01 ~]# su - user1
上一次登录:四 5月 17 22:48:19 CST 2018pts/0 上
[user1@mxk-01 ~]$ ls /root/
ls: 无法打开目录/root/: 权限不够
[user1@mxk-01 ~]$ sudo ls /root/
123  1_heard.txt  1.txt  234  2.txt~  2.txt.bak  anaconda-ks.cfg.1  _sorft.txt  收据.docx  

4、在:sudoers文件中依然有许多用法

 ## Host Aliases (别名)
 ## Groups of machines. You may prefer to use hostnames (perhaps using
 ## wildcards for entire domains) or IP addresses instead.
 # Host_Alias FILESERVERS = fs1, fs2 (指定机器到某个主机上)
 # Host_Alias MAILSERVERS = smtp, smtp2  

 ## 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 (将jsmith, mikem两个用户归放到User_Alias这个所属组里,ADMINS是个虚拟用户) 

 ## Networking (Cmnd表示命令的别名)
 # Cmnd_Alias NETWORKING = /sbin/route, /sbin/ifconfig, /bin/ping, /sbin/dhclient, /usr/bin/net, /sbin/iptables, /usr/bin/rfcomm, /usr/bin/wvdial, /sbin/iwconfig, /sbin/mii-tool

 ## Installation and management of software
 # Cmnd_Alias SOFTWARE = /bin/rpm, /usr/bin/up2date, /usr/bin/yum  
如,给用户设置新别名:可以将刚才用户的命令赋予新的别名
 ## Networking
 # Cmnd_Alias NETWORKING = /sbin/route, /sbin/ifconfig, /bin/ping, /sbin/dhclient, /usr/bin/net, /sbin/iptables, /usr/bin/rfcomm, /usr/bin/wvdial, /sbin/iwconfig, /sbin/mii-tool
Cmnd_Alias MXK_CMD = ALL  
将最开始配置的命令换成命令的别名字符
 ## Allow root to run any commands anywhere
rootALL=(ALL)   ALL
mxk ALL=(ALL)   MXK_CMD
user1   ALL=(ALL)   NOPASSWD: ALL
重新切换到mxk用户下,同样可以使用命令
[root@mxk-01 ~]# su - mxk
上一次登录:四 5月 17 23:13:25 CST 2018pts/0 上
[mxk@mxk-01 ~]$ sudo ls /root/
[sudo] mxk 的密码:
123  1_heard.txt  1.txt  234  2.txt~  2.txt.bak  anaconda-ks.cfg.1  _sorft.txt  收据.docx
[mxk@mxk-01 ~]$ sudo cat /root/1.txt
qweerwqe
qewrfdsaf
fdggfaag  

5、用户组的用法

1)用户组的用法和用户的操作大同小异,在配置文件:%wheel的下一行添加一个用户组,并配置相关属性

 ## Allows people in group wheel to run all commands
%wheel  ALL=(ALL)   ALL  
%mxk    ALL=(ALL)   ALL

 ## Same thing without a password
 # %wheelALL=(ALL)   NOPASSWD: ALL

知识点

1、查看编辑出错内容在哪一行,执行:set nu
2、sudo su - 约等于 sudo -i
sudo -s 完全等于 sudo /bin/bash 约等于 sudo su

九、限制root远程登录

1、只允许使用普通用户登录,而普通用户登录后不需要密码就能用:sudo命令切换到root账户

1)进入visudo,然后在最后加入3行

#includedir /etc/sudoers.d
User_Alias USER_SU = mxk, linlin, user1
Cmnd_Alias SU = /usr/bin/su
USER_SU ALL=(ALL) NOPASSWD: SU

第一行设定了一个user别名,其实这个USER_SU相当于:mxk、linlin和user1三个用户
第二行设定了一个命令别名,SU相当于/usr/bin/su
第三行设置用户的属性

2)然后可以执行命令查看

[root@mxk-01 ~]# su - mxk
上一次登录:五 5月 18 10:29:59 CST 2018pts/0 上
[mxk@mxk-01 ~]$ sudo su -
上一次登录:五 5月 18 10:30:32 CST 2018pts/0 上
[root@mxk-01 ~]# whoami
root

2、限制root用户远程登录

/etc/ssh/sshd_config为sshd的配置文件,默认允许root用户远程登录

1)限制root用户远程登录,需要修改配置文件/etc/ssh/sshd_config

 #LoginGraceTime 2m
 #PermitRootLogin yes (需要将这里的yes改为no,取消前边的#)
 #StrictModes yes
 #MaxAuthTries 6
 #MaxSessions 10  


 #LoginGraceTime 2m
 PermitRootLogin no
 #StrictModes yes
 #MaxAuthTries 6
 #MaxSessions 10  

2)修改完配置文件之后,重启sshd服务,执行:systemctl restart sshd.service

[root@mxk-01 ~]# systemctl restart sshd.service
[root@mxk-01 ~]# 

重启服务之后,root用户就不能远程登录了

3)用普通用户进行登录

查看/root/信息权限不够,可以切换到root用户下,即限制成功

[mxk@mxk-01 ~]$ ls /root/
ls: 无法打开目录/root/: 权限不够
[mxk@mxk-01 ~]$ su -
密码:
[mxk@mxk-01 ~]$ sudo su - root
上一次登录:五 5月 18 11:03:37 CST 2018从 192.168.1.1pts/0 上
[root@mxk-01 ~]#   

为了以后方便实验,即取消掉限制root用户,更改完成配置文件要重启sshd服务

转载于:https://my.oschina.net/u/3850989/blog/1815415

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值