Linux用户和组管理——passwd、shadow、usermod、mkpasswd

Linux用户和组管理

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

1.1 用户配置文件

查看用户的密码配置文件,新建立的用户有新的配置信息。

[root@ying01 ~]# cat -n /etc/passwd |head -n2           //查看passwd文件的前2行//
     1	root:x:0:0:root:/root:/bin/bash
     2	bin:x:1:1:bin:/bin:/sbin/nologin
[root@ying01 ~]# cat -n /etc/passwd |tail -n2           //查看passwd文件的后2行//
    20	user1:x:1000:1000::/home/user1:/bin/bash
    21	nba:x:1001:1002::/home/nba:/bin/bash

从上面代码可以看出:etc/passwd是由 “ :” 分割7个字段,每个字段的含义如下:

  • 第1个字段为用户名;(比如root、bin、user1)
  • 第2个字段为该账号的口令,存储的是密码;(x代替)
  • 第3个字段为一个数字,这个数字代表用户标识号,也称为“uid”,在这里,用户标识号是从1000开始;
  • 第4个字段也是数字,该字段标识组标识号,称gid;
  • 第5个字段标识注释信息;(root用户为root,创建的用户暂无)
  • 第6个字段为普通用户的家目录,root的家目录就是/root,普通用户的家目录则/home/username;
  • 第7个字段为用户的shell,用户登录后,要启动一个进程们用来将用户下达的命令传给内核,实现一个交互的作用,这就是shell。

1.2 密码配置文件

专门放用户的密码的配置文件是/etc/shadow,我们查看下其文件

[root@ying01 ~]# cat -n /etc/shadow |head -n2;cat -n /etc/shadow |tail -n 2   //查看shadow文件的前2行 和后2行//
     1	root:$6$Vw.dtBIQ$vc4IkUwBRtwdWuXc/0RL7Uzw0hYqwIpli7A6jKSX1pbSyHnlAzQz7ODSmb3t3aqhoDYo7AJNcXCyRr/srU36//:17659:0:99999:7:::
     2	bin:*:17110:0:99999:7:::
    20	user1:!!:17664:0:99999:7:::
    21	nba:!!:17666:0:99999:7:::

从上面代码可以看出:/etc/shadow和/etc/passwd类似,由9个字段;

  • root密码位(第二字段)在这里root的密码是用密文编写制成的,我们不可以反密文进行破解;
  • 只有root有密码,而用户user1是没有设置密码;
[root@ying01 ~]# passwd user1
更改用户 user1 的密码 。
新的 密码:
无效的密码: 密码未通过字典检查 - 过于简单化/系统化
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
[root@ying01 ~]# cat -n /etc/shadow |head -n2;cat -n /etc/shadow |tail -n 2 
     1	root:$6$Vw.dtBIQ$vc4IkUwBRtwdWuXc/0RL7Uzw0hYqwIpli7A6jKSX1pbSyHnlAzQz7ODSmb3t3aqhoDYo7AJNcXCyRr/srU36//:17659:0:99999:7:::
     2	bin:*:17110:0:99999:7:::
    20	user1:$6$RBbcA.3p$OS4ls.bWMFP05LSJ0sCq/GQ0amPmcuUIMJrNsDN9hKFF6j29ClYhqp01e4Jv4xI3u5fZV.chIaeMPyzo97Fda0:17667:0:99999:7:::
    21	nba:!!:17666:0:99999:7:::

从上面代码看出:在我们给user1新设置了密码后,在查看shadow文件,发现user1用户,密码位也有一段密文;

我们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

二、用户组管理

每个配置文件,都如同像shadow shadow-,这个是系统自动生成的备份;例如下面代码;

[root@ying01 ~]# ls /etc/shadow
shadow   shadow-  
[root@ying01 ~]# ls /etc/gshadow
gshadow   gshadow-  
[root@ying01 ~]# ls /etc/passwd
passwd   passwd-  

用户组的配置文件 /etc/group;我们查看下前两2和后4行内容;

[root@ying01 ~]# cat -n /etc/group |head -n2;cat -n /etc/group |tail -n 4
     1	root:x:0:
     2	bin:x:1:
    37	user1:x:1000:
    38	user2:x:1001:
    39	nba:x:1002:
    40	slocate:x:21:

用户组的密码文件 /etc/group;我们查看下前两2和后4行内容;

[root@ying01 ~]# cat -n /etc/gshadow |head -n2;cat -n /etc/gshadow |tail -n 4
     1	root:::
     2	bin:::
    37	user1:!::
    38	user2:!::
    39	nba:!::
    40	slocate:!::

创建一个组的命令是groupadd ,系统会自动匹配了一个gid;

[root@ying01 ~]# groupadd grp1                //创建组//
[root@ying01 ~]#  tail -n2 /etc/group         //查看group文件的后两行//
slocate:x:21:
grp1:x:1003:

也可以创建一个组的时候,同时指定一个gid; **groupadd -g gid grp **

[root@ying01 ~]# groupadd -g 1008 grp2        //创建gid为1008的新组//
[root@ying01 ~]# tail -n3 /etc/group
slocate:x:21:
grp1:x:1003:
grp2:x:1008:

可以创建新组的命令为groupadd,那么删除一个组的命令是groupdel

[root@ying01 ~]# groupdel grp1
[root@ying01 ~]# tail -n3 /etc/group
nba:x:1002:
slocate:x:21:
grp2:x:1008:

三、用户管理

useradd 之前用已经用过,创建一个用户(useradd 用户名);也可以同时设置uid,gid,家目录,shell等

  • -u:自定义uid
  • -g: 是新增用户属于已经存在的某个组,后面可以更组id,也可以跟组名
  • -d:表示自定义用户的家目录
  • -M:表示不建立家目录,用ls查该目录不存在,但该目录命名正确
  • -s:表示自定义shell, 允许:/bin/bash,不允许:/sbin/nologin

新增用用户uer3,普通用户创建用户的UID,是从1000开始的,然后依次增加。(比如user1就是当时新建的用户,它的uid就是1000;而CentOS 6.5的uid是从500开始)

[root@ying01 ~]# useradd user3
[root@ying01 ~]# tail -n3 /etc/passwd
user1:x:1000:1000::/home/user1:/bin/bash
nba:x:1001:1002::/home/nba:/bin/bash
user3:x:1002:1009::/home/user3:/bin/basha

自定义uid和gid: -u -g

[root@ying01 ~]# tail -n 3 /etc/group
slocate:x:21:
grp2:x:1008:
user3:x:1009:
[root@ying01 ~]# useradd -u 1004 -g grp2 user4
[root@ying01 ~]# tail -n4 /etc/passwd
user1:x:1000:1000::/home/user1:/bin/bash
nba:x:1001:1002::/home/nba:/bin/bash
user3:x:1002:1009::/home/user3:/bin/bash
user4:x:1004:1008::/home/user4:/bin/bash

也可以自定义用户家目录和shell: -d -s

[root@ying01 ~]# useradd  -u 1006 -g grp2 -d /home/ying111 -s /sbin/nologin user5
[root@ying01 ~]# tail -n4 /etc/passwd
nba:x:1001:1002::/home/nba:/bin/bash
user3:x:1002:1009::/home/user3:/bin/bash
user4:x:1004:1008::/home/user4:/bin/bash
user5:x:1006:1008::/home/ying111:/sbin/nologin
[root@ying01 ~]# ls /home/
nba  user1  user3  user4  ying111

也可以不创建目录:-M

[root@ying01 ~]# useradd -M user6
[root@ying01 ~]# tail -n4 /etc/passwd
user3:x:1002:1009::/home/user3:/bin/bash
user4:x:1004:1008::/home/user4:/bin/bash
user5:x:1006:1008::/home/ying111:/sbin/nologin
user6:x:1007:1007::/home/user6:/bin/bash
[root@ying01 ~]# ls /home/
nba  user1  user3  user4  ying111

我们发现新建的用户,若不自定义uid,uid会根据上一个用户的uid依次增加,而gid有点疑问,试验出来 可以看出来 gid也是跟着前一个gid 变化;

[root@ying01 ~]# groupadd -g 1020 grp3
[root@ying01 ~]# useradd -g grp3 user7
[root@ying01 ~]# tail -n5 /etc/passwd
user3:x:1002:1009::/home/user3:/bin/bash
user4:x:1004:1008::/home/user4:/bin/bash
user5:x:1006:1008::/home/ying111:/sbin/nologin
user6:x:1007:1007::/home/user6:/bin/bash
user7:x:1008:1020::/home/user7:/bin/bash
[root@ying01 ~]# useradd user8
[root@ying01 ~]# tail -n5 /etc/passwd
user4:x:1004:1008::/home/user4:/bin/bash
user5:x:1006:1008::/home/ying111:/sbin/nologin
user6:x:1007:1007::/home/user6:/bin/bash
user7:x:1008:1020::/home/user7:/bin/bash
user8:x:1009:1021::/home/user8:/bin/bash

还有一个命令adduser 和useradd 命令是一样的; 同时注意:此时新增加的user9这个用户的uid还是依次增加1,而gid此时已经不是1022,而是与uid保持一致;

[root@ying01 ~]# adduser user9 
[root@ying01 ~]# tail -n5 /etc/passwd
user5:x:1006:1008::/home/ying111:/sbin/nologin
user6:x:1007:1007::/home/user6:/bin/bash
user7:x:1008:1020::/home/user7:/bin/bash
user8:x:1009:1021::/home/user8:/bin/bash
user9:x:1010:1010::/home/user9:/bin/bash

userdel是删除用户的命令;比如删除user9;

[root@ying01 ~]# userdel user9
[root@ying01 ~]# ls /home/
nba  user1  user3  user4  user7  user8  user9  ying111
[root@ying01 ~]# tail -n5 /etc/passwd
user4:x:1004:1008::/home/user4:/bin/bash
user5:x:1006:1008::/home/ying111:/sbin/nologin
user6:x:1007:1007::/home/user6:/bin/bash
user7:x:1008:1020::/home/user7:/bin/bash
user8:x:1009:1021::/home/user8:/bin/bash

虽然user9删除了,但是在/home/还是有use9的目录,这是让root用户来删除的,确保保全;用userdel -r 可以直接删除用户,而且/hone下也没有其目录;

[root@ying01 ~]# userdel -r user8
[root@ying01 ~]# tail -n5 /etc/passwd
user3:x:1002:1009::/home/user3:/bin/bash
user4:x:1004:1008::/home/user4:/bin/bash
user5:x:1006:1008::/home/ying111:/sbin/nologin
user6:x:1007:1007::/home/user6:/bin/bash
user7:x:1008:1020::/home/user7:/bin/bash
[root@ying01 ~]# ls  /home/
nba  user1  user3  user4  user7  user9  ying111

四、usermod命令

usermod:更改用户属性的一个命令。 用法:usermod [选项] [用户名]


选项:

  • -c, --comment 注释 //GECOS 字段的新值
  • -d, --home HOME_DIR 用户的新主目录
  • -e, --expiredate EXPIRE_DATE 设定帐户过期的日期为 EXPIRE_DATE
  • -f, --inactive INACTIVE 过期 INACTIVE 天数后,设定密码为失效状态
  • -g, --gid GROUP 强制使用 GROUP 为新主组
  • -G, --groups GROUPS 新的附加组列表 GROUPS
  • -a, --append GROUP 将用户追加至上边 -G 中提到的附加组中,
  • -l, --login LOGIN 新的登录名称
  • -L, --lock 锁定用户帐号
  • -m, --move-home 将家目录内容移至新位置 (仅于 -d 一起使用)
  • -o, --non-unique 允许使用重复的(非唯一的) UID
  • -p, --password PASSWORD 将加密过的密码 (PASSWORD) 设为新密码
  • -R, --root CHROOT_DIR chroot 到的目录
  • -s, --shell SHELL 该用户帐号的新登录 shell
  • -u, --uid UID 用户帐号的新 UID
  • -U, --unlock 解锁用户帐号
  • -Z, --selinux-user SEUSER 用户账户的新 SELinux 用户映射

现列举常用的几个选项:

[root@ying01 ~]# tail -n3 /etc/passwd
user5:x:1006:1008::/home/ying111:/sbin/nologin
user6:x:1007:1007::/home/user6:/bin/bash
user7:x:1008:1020::/home/user7:/bin/bash
[root@ying01 ~]# usermod -u 1050 user7
[root@ying01 ~]# usermod -g 1030 user7
usermod:“1030”组不存在
[root@ying01 ~]# usermod -g 1007 user7
[root@ying01 ~]# usermod -d /home/xxx user7
[root@ying01 ~]# usermod -s /sbin/nologin user7
[root@ying01 ~]# tail -n3 /etc/passwd
user5:x:1006:1008::/home/ying111:/sbin/nologin
user6:x:1007:1007::/home/user6:/bin/bash
user7:x:1050:1007::/home/xxx:/sbin/nologin

-G:扩展组,user可以有多个扩展组,但-g只能有一个组;

[root@ying01 ~]# tail -n3 /etc/group                                        //查看group后三行//
user3:x:1009:
user6:x:1007:
grp3:x:1020:
[root@ying01 ~]# id user1                                                  //查看用户id//
uid=1000(user1) gid=1000(user1) 组=1000(user1)
[root@ying01 ~]# usermod -G grp3 user1                                     //把用户user1扩展到grp3组//
[root@ying01 ~]# id user1
uid=1000(user1) gid=1000(user1) 组=1000(user1),1020(grp3)
[root@ying01 ~]# usermod -G user6 user1                                    //再把用户user1扩展到user6组//
[root@ying01 ~]# id user1
uid=1000(user1) gid=1000(user1) 组=1000(user1),1007(user6)
[root@ying01 ~]# usermod -G grp3,user6 user1                               //同时把user1扩展到grp3和user6组//
[root@ying01 ~]# id user1
uid=1000(user1) gid=1000(user1) 组=1000(user1),1007(user6),1020(grp3)
[root@ying01 ~]# usermod -g grp3  user1                                    //指定grp3组为user1新的住组//
[root@ying01 ~]# id user1
uid=1000(user1) gid=1020(grp3) 组=1020(grp3),1007(user6)                  //可以看到gid,主组都变为grp3//

五、用户密码管理

passwd设置用户密码的命令;

[root@ying01 ~]# passwd             //passwd 不跟用户名,是给root设置密码//
更改用户 root 的密码 。
新的 密码:
[root@ying01 ~]# passwd user7      //passwd 跟用户名,是给其设置密码//
更改用户 user7 的密码 。
新的 密码:
无效的密码: 密码未通过字典检查 - 过于简单化/系统化
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。

我们打开配置密码的文件shadow,只打印前3列和后3列。发现root用户和user7用户,第二位上都是一串编码,这个之前说过的密码编译文件;而带*是被锁定的,不能登录; 两个!!是空密码,不能登录

[root@ying01 ~]# head -n3 /etc/shadow ;tail -n3 /etc/shadow
root:$6$Vw.dtBIQ$vc4IkUwBRtwdWuXc/0RL7Uzw0hYqwIpli7A6jKSX1pbSyHnlAzQz7ODSmb3t3aqhoDYo7AJNcXCyRr/srU36//:17659:0:99999:7:::
bin:*:17110:0:99999:7:::
daemon:*:17110:0:99999:7:::
user6:!!:17668:0:99999:7:::
user7:$6$xumq33.4$YhPbCN/9xj5/4OgPyc67kR/mygSFcJClVi981Fg.hQTr9Mlx050VWq.ES3xmMLyiH4cUB2c2ZPuQAcLPg2EN4/:17668:0:99999:7:::
user8:!!:17668:0:99999:7:::

我们也可以锁定已知有密码的用户;锁定密码:passwd -l 用户名

[root@ying01 ~]# passwd -l user7
锁定用户 user7 的密码 。
passwd: 操作成功
[root@ying01 ~]# tail -n3 /etc/shadow             //查看user7锁定情况,发现有2个!!,说明已经锁定//
user6:!!:17668:0:99999:7:::
user7:!!$6$xumq33.4$YhPbCN/9xj5/4OgPyc67kR/mygSFcJClVi981Fg.hQTr9Mlx050VWq.ES3xmMLyiH4cUB2c2ZPuQAcLPg2EN4/:17668:0:99999:7:::
user8:!!:17668:0:99999:7:::

解锁密码用: passwd -u 用户名

[root@ying01 ~]# passwd -u user7
解锁用户 user7 的密码。
passwd: 操作成功
[root@ying01 ~]# tail -n3 /etc/shadow          //此时我们发现user7前面的两个!!消失了,说明解锁成功//
user6:!!:17668:0:99999:7:::
user7:$6$xumq33.4$YhPbCN/9xj5/4OgPyc67kR/mygSFcJClVi981Fg.hQTr9Mlx050VWq.ES3xmMLyiH4cUB2c2ZPuQAcLPg2EN4/:17668:0:99999:7:::
user8:!!:17668:0:99999:7:::

还有一种方法可以锁定和解锁密码;锁定:usermod -L 用户名 ;解锁: usermod -U 用户名 只是只有一个!显示;

[root@ying01 ~]# usermod -L user7
[root@ying01 ~]# tail -n3 /etc/shadow              //出现1个!,锁定用户//
user6:!!:17668:0:99999:7:::
user7:!$6$xumq33.4$YhPbCN/9xj5/4OgPyc67kR/mygSFcJClVi981Fg.hQTr9Mlx050VWq.ES3xmMLyiH4cUB2c2ZPuQAcLPg2EN4/:17668:0:99999:7:::
user8:!!:17668:0:99999:7:::
[root@ying01 ~]# usermod -U user7
[root@ying01 ~]# tail -n3 /etc/shadow             //!消失,解锁成功//
user6:!!:17668:0:99999:7:::
user7:$6$xumq33.4$YhPbCN/9xj5/4OgPyc67kR/mygSFcJClVi981Fg.hQTr9Mlx050VWq.ES3xmMLyiH4cUB2c2ZPuQAcLPg2EN4/:17668:0:99999:7:::
user8:!!:17668:0:99999:7:::

我们设置密码时候,需要交互。而且还需要设置2次,操作步骤多;有一各命令:passwd --stdin 用户名 常用的命令组合是:echo "nbanba666666" |passwd --stdin user6 意思:把这个密码传到后面的命令,后面的命令就是给user6设置密码

[root@ying01 ~]# echo "nbanba666666" |passwd --stdin user6         //引号里面是要设置的密码//
更改用户 user6 的密码 。
passwd:所有的身份验证令牌已经成功更新。
[root@ying01 ~]# tail -n3 /etc/shadow                             //密码设置成功//
user6:$6$SXLKpFTm$73lG20gQgOsvvpNx5jKebsZcoZPMNH.Jd9T1HggV2eXEjlH/WaJ2hlKdOdcNorJS6hVLx1ZZzsqsVyRerOkW3.:17668:0:99999:7:::
user7:$6$xumq33.4$YhPbCN/9xj5/4OgPyc67kR/mygSFcJClVi981Fg.hQTr9Mlx050VWq.ES3xmMLyiH4cUB2c2ZPuQAcLPg2EN4/:17668:0:99999:7:::
user8:!!:17668:0:99999:7:::

可以 echo -e 的扩展,来设置密码的形式;

[root@ying01 ~]# echo -e "xxx\nbbb"                    // 利用\n换行//
xxx
bbb
[root@ying01 ~]# echo -e "xxx\tbbb"                    //利用\t 插入tab//
xxx	bbb
[root@ying01 ~]# echo "xxx\nbbb" |passwd --stdin user6
更改用户 user6 的密码 。
passwd:所有的身份验证令牌已经成功更新。

总结: 在为用户创建密码时,尽量设置复杂一些。 如下是密码复杂度规则介绍:

  • 长度大于10个字节;
  • 密码中包含大小写字母、数字以及特殊符号!@#()¥等;
  • 不规则性英文数字等;
  • 密码中不要带有自己的名字和电话等信息。

六、mkpasswd命令

mkpasswd : make passwd;随机生成密码;

首先安装一个expect包,这个包可以实现随机的字符串;

[root@ying01 ~]# yum install -y expect
已加载插件:fastestmirror
base                                                                                                        | 3.6 kB  00:00:00     
extras
.....

接着我们试验它的常用的几种用法:当然还有其他用法,可以man mkpasswd

[root@ying01 ~]# mkpasswd                        //自动生成9位,包含大小写字母、特殊字符及数字组成//    
Svf3vD3h\
[root@ying01 ~]# mkpasswd -l 12                  //生成长度12位的密码;-l 指定字符串长度//
Kaj.4Oucs9ns
[root@ying01 ~]# mkpasswd -l 12 -s 3             //生成长度12位且含有3个特殊字符的密码;-s 指定特殊字符//
Qzs4r.d|3T{c
[root@ying01 ~]# mkpasswd -l 12 -s 0             //生成长度12位且不含特殊字符的密码//
KnrzkUtp2nu1

七、su命令

su命令:su - 用户名 之前在第二课的时候,我们用过一次;假如我们切换到 我们现在切换到user1用户下,然后回到root;

[root@ying01 ~]# su - user1
上一次登录:二 5月 15 22:06:18 CST 2018pts/0 上
[user1@ying01 ~]$ 登出                                //按ctrl+d退出//

我们再切换到user1,然后切换到其他普通用户,比如user8。此时有两种情况假如user8有密码,那就要输入user8的密码,没有的密码,那就切换不了;

[root@ying01 ~]# su - user1                             
上一次登录:五 5月 18 01:05:41 CST 2018pts/0 上
[user1@ying01 ~]$ su - user8
密码:
上一次登录:五 5月 18 01:04:57 CST 2018pts/0 上
[user8@ying01 ~]$ ls /home                                //输入密码后。成功切换到user8下//
nba  user1  user3  user4  user7  user8  ying111

su还有-c选项,它的用法:su - -c "命令" 用户 意思:切换用户user8的使用者,并执行指令命令后再变回原来使用者(root)

[root@ying01 ~]#  su - -c "touch /tmp/feng123" user8             
[root@ying01 ~]# ls -lt /tmp |head -n 3
总用量 128
-rw-rw-r--. 1 user8 user8      0 5月  18 01:18 feng123                          //可以看出文件feng123的uid和gid都是user8//
drwx------. 3 root  root      17 5月  17 13:20 systemd-private-5e33795293b445569eabb521edede74b-vmtoolsd.service-yEsfei
[root@ying01 ~]# id user8                                                       //注意执行命令后,用户还是root//
uid=1051(user8) gid=1051(user8) 组=1051(user8)

八、sudo命令

通过sudo,我们能把某些超级权限有针对性的下放,并且不需要普通用户知道root密码,所以sudo 相对于权限无限制性的su来说,还是比较安全的,所以sudo 也能被称为受限制的su ;另外sudo 是需要授权许可的,所以也被称为授权许可的su;

用visudo 打开/etc/sudoers.tmp 文件(可以检测语法错误);而不要误使用vi sudo(这指编辑sudo文件,但是不能检测语法错误)

进入页面按:set nu命令,可以显示行数,我们找到以下内容; 92行的意思 root()用户,第一个ALL(在哪里,主机),第二个(ALL)指用户,这个用户将被授予哪种身份;第三个ALL(所有的命令,也可以指单个的命令,如ls、mv、cat)

     91 ## Allow root to run any commands anywhere
     92 root    ALL=(ALL)       ALL       
     93 
     94 ## Allows members of the 'sys' group to run networking, software,

我们再93行输入以下内容:它的意思是,在sudo下user8用户可以使用ls、mv、cat命令,进行root用户的权限;

     91 ## Allow root to run any commands anywhere
     92 root    ALL=(ALL)       ALL
     93 user8   ALL=(ALL)       /usr/bin/ls,/usr/bin/mv,/usr/bin/cat
     94 ## Allows members of the 'sys' group to run networking, software,

保存退出;切换到用户user8;使用sudo 命令(上文设置了命令) 可以拥有root一样的权限;

[root@ying01 ~]# visudo
[root@ying01 ~]# su - user8
上一次登录:五 5月 18 01:18:36 CST 2018pts/0 上
[user8@ying01 ~]$ ls /root/                         //不能够打开root目录//
ls: 无法打开目录/root/: 权限不够
[user8@ying01 ~]$ sudo /usr/bin/ls /root/           //用sudo ls 可以打开root目录//

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

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

[sudo] user8 的密码:                                 //此时需要输入user8用户的密码//
10  100  11  1ceshi.txt  222  3  5  6  8  9  anaconda-ks.cfg  NBA
[user8@ying01 ~]$ cat /root/1ceshi.txt                //不使用sudo,不能查看root用户下文件//
cat: /root/1ceshi.txt: 权限不够
[user8@ying01 ~]$ sudo /usr/bin/cat /root/1ceshi.txt         //使用sudo命令,可以查看root下文件//
1111111111111111
2222222222222222
3333333333333333[user8@ying01 ~]$                        

我们退出(ctrl+d)user8用户,再次执行visudo,在93行后面,增加一行命令;让user1用户在sudo下执行ls、mv、cat命令,不用输入用户密码;

     91 ## Allow root to run any commands anywhere
     92 root    ALL=(ALL)       ALL
     93 user8   ALL=(ALL)       /usr/bin/ls,/usr/bin/mv,/usr/bin/cat
     94 user1   ALL=(ALL)     NOPASSWD:   /usr/bin/ls,/usr/bin/mv,/usr/bin/cat
     95 ## Allows members of the 'sys' group to run networking, software,

保存退出;切换到用户user1;使用sudo 命令(上文设置了命令) 可以拥有root一样的权限;

[root@ying01 ~]# su - user1
上一次登录:五 5月 18 01:07:47 CST 2018pts/0 上
[user1@ying01 ~]$ ls /root/                          //普通用户下,依然不能拥有root权限//
ls: 无法打开目录/root/: 权限不够
[user1@ying01 ~]$ sudo ls /root/                     //sudo下,而且不用输入密码,依然可以使用root权限//
10  100  11  1ceshi.txt  222  3  5  6  8  9  anaconda-ks.cfg  NBA
[user1@ying01 ~]$ sudo /usr/bin/ls /root/
10  100  11  1ceshi.txt  222  3  5  6  8  9  anaconda-ks.cfg  NBA

我们退出(ctrl+d)user1用户,再次执行visudo,找到以下行数;

     26 ## Networking
     27 # 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
     28 
     29 ## Installation and management of software

我们在28行添加以下命令;意思是AMING_CMD是ls、mv、cat命令的命令集合;

     26 ## Networking
     27 # Cmnd_Alias NETWORKING = /sbin/route, /sbin/ifconfig, /bin/ping, /sbin/dhclient, /usr/bin/net, /sbin/iptables, /usr/bin/rf        comm, /usr/bin/wvdial, /sbin/iwconfig, /sbin/mii-tool
     28 Cmnd_Alias AMING_CMD = /usr/bin/ls, /usr/bin/mv, /usr/bin/cat
     29 ## Installation and management of software

然后向下翻,找到93行,把之前的命令(可以看面代码),改为刚才设置的命令集合AMING_CMD

     91 ## Allow root to run any commands anywhere 
     92 root    ALL=(ALL)       ALL
     93 user8   ALL=(ALL)       AMING_CMD
     94 user1   ALL=(ALL)     NOPASSWD:   /usr/bin/ls,/usr/bin/mv,/usr/bin/cat
     95 ## Allows members of the 'sys' group to run networking, software,

保存退出;切换到用户user8;在user8用户下,我们再次使用在sudo下使用ls、cat命令,看是否拥有root权限;

[root@ying01 ~]# visudo
[root@ying01 ~]# su - user8
上一次登录:五 5月 18 01:53:00 CST 2018pts/0 上
[user8@ying01 ~]$ sudo ls /root/                       
[sudo] user8 的密码:                               //可以使用,但是user8依然需要登入密码//
10  100  11  1ceshi.txt  222  3  5  6  8  9  anaconda-ks.cfg  NBA
[user8@ying01 ~]$ sudo cat /root/1ceshi.txt
1111111111111111
2222222222222222
3333333333333333[user8@ying01 ~]$ 

回到root用户下,再次进入visudo;我们看到103行,它的意思是#wheel ALL=(ALL) ALL 这组的所有用户都拥有了sudo权利,接下来,只要把需要设置sudo权限的所有用户加入到wheel这个组即可。

     99 ## Allows people in group wheel to run all commands
    100 %wheel  ALL=(ALL)       ALL
    101 
    102 ## Same thing without a password
    103 # %wheel        ALL=(ALL)       NOPASSWD: ALL
    104 

总结:sudo用法类似很多,可以按照visudo 里面说明,来设置,一一验证;

九、限制root远程登录

首先禁止root用户,只允许登录普通用户。而普通用户想要拿到root用户的部分权限,可以使用sudo,也可以使用su,可以临时切换root用户,但是root的密码,普通用户是不知道的。 大致逻辑关系为: Aming user5 user6 > su – root > root’s password (不需要,普通用户切换到root) 可以试验,把su的命令放到sudo的列表里去。 在进入visudo之前我们先试验如下: 先用su 切换root

我们用sudo su 执行其命令,结果是无法用户权限,因为我们没有在visudo里面设置

[root@ying01 ~]# 
[root@ying01 ~]# su - user8
上一次登录:五 5月 18 02:22:26 CST 2018pts/0 上
[user8@ying01 ~]$ su - root
密码:
[user8@ying01 ~]$ sudo su - root
[sudo] user8 的密码:
对不起,用户 user8 无权以 root 的身份在 ying01 上执行 /bin/su - root。

我们回到root用户下,执行visudo;找到如下行数

     20 # User_Alias ADMINS = jsmith, mikem
     21 
     22 
     23 ## Command Aliases
     24 ## These are groups of related commands...

我们在21行加上以下语句;把user1和user8用户集合到AMINGS中;

20 # User_Alias ADMINS = jsmith, mikem
     21 User_Alias AMINGS =user1,user8
     22 
     23 ## Command Aliases
     24 ## These are groups of related commands...

我们回到root用户下,执行visudo,

     91 ## Allow root to run any commands anywhere
     92 root    ALL=(ALL)       ALL
     93 user8   ALL=(ALL)       AMING_CMD
     94 user1   ALL=(ALL)     NOPASSWD:   /usr/bin/ls,/usr/bin/mv,/usr/bin/cat

把94行的ls、mv、cat命令删除,只添加su命令,AMINGS用户集合,就可以使用sudo su的时候可以临时拥有root用户权限;

     91 ## Allow root to run any commands anywhere
     92 root    ALL=(ALL)       ALL
     93 user8   ALL=(ALL)       AMING_CMD
     94 AMINGS  ALL=(ALL)     NOPASSWD:   /usr/bin/su

我们保存退出,切换到user8用户下,我们sudo su - root,发现成功切换到root下面;

root@ying01 ~]# visudo
[root@ying01 ~]# su - user8
上一次登录:五 5月 18 02:35:02 CST 2018pts/0 上
[user8@ying01 ~]$ sudo su - root
上一次登录:四 5月 17 17:35:26 CST 2018从 192.168.112.1pts/0 上
最后一次失败的登录:五 5月 18 01:01:50 CST 2018pts/0 上
最有一次成功登录后有 1 次失败的登录尝试。

但是由于sudo su 过于强大,它可以临时拥有root一切权限,我们需要禁止远程登录;先进入/etc/ssh/sshd_config ,找到38行;

     37 #LoginGraceTime 2m
     38 #PermitRootLogin yes

我们把#去掉,让这条设置命令生效,然后把yes改为no;意思是,不能远程登录;

     37 #LoginGraceTime 2m
     38 PermitRootLogin no

然后我们重启网络配置

[root@ying01 ~]# vi /etc/ssh/sshd_config
[root@ying01 ~]# systemctl restart sshd.service

此时,我再打开另一个终端,我们发现无论登录root密码,还是公钥密码,都不能登录;

  • 这里是列表文本输入公钥密码时候:

输入图片说明

  • 这里是列表文本在passwd输入密码时候,直接弹出下面图片

输入图片说明

那我们用putty,来登录user8用户,看能不能进行操作;

login as: user8
Server refused our key
user8@192.168.112.136's password:
Last login: Fri May 18 02:43:42 2018
[user8@ying01 ~]$ w                                 //查看登录的用户//
 02:57:35 up 13:36,  2 users,  load average: 0.00, 0.01, 0.05
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/0    192.168.112.1    17:35    1:35   0.35s  0.00s -bash
user8    pts/1    192.168.112.1    02:56    7.00s  0.02s  0.01s w
[user8@ying01 ~]$ ls /root
ls: 无法打开目录/root: 权限不够
[user8@ying01 ~]$ sudo su - root       //用sudo su 切换到root下,可以登录;//
上一次登录:五 5月 18 02:58:56 CST 2018pts/1 上
最[user8@ying01 ~]$ su - root                     
密码:
su: 鉴定故障
后一次失败的登录:五 5月 18 02:59:40 CST 2018pts/1 上
最有一次成功登录后有 1 次失败的登录尝试。

转载于:https://my.oschina.net/u/3851633/blog/1813415

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值