ps: 红字字体为重要部分, 仔细看


一、 用户配置文件和密码配置文件字段介绍

       ①。 用户配置文件;

[root@Centos1 ~]# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
……………………/省略
user1:x:500:521::/home/user1:/bin/bash

第一段:     用户名                                                                         

第二段:     密码                                                                           

第三段:     root的uid为0, 普通用户的uid从500开始(0-499为系统用户, 500以上为普通用户)       

第四段:     root的gid为0, 普通用户的gid从500开始                                           

第五段:     用户说明                                                                       

第六段:     指定家目录                                                                     

第七段:     指定用户shell登录环境, 默认为/bin/bash                                         

       ②。 密码配置文件;

[root@Centos1 ~]# cat /etc/shadow
root:$6$OsPJ9fHZc1oQNxA6$BWQ4QGnVm7dYFnBA1nkXymTBrPevHzDCPpcaGT9vaV/EIVlHJttJ1zOZh726xkmKoKRgFTGJQsuSM9A3M/L6M/:16455:0:99999:7:::
……………………/省略
user1:$6$pqFvLq/i$bXDdUqaydSp1jX8G4EqiHLinb/uWH7/SnZ7P.9WwPKwFgjon2SUpNnE4WfWkWiGTQAkJuoVDmcXTd8pyAWQR/.:16515:0:99999:7:::

第一段:     用户名                                                                         

第二段:     密码(!!表示密码为空, $6$表示为sha-512加密, $1$表示为md5加密, $2$表示Blowfish加密, $5$表示为sha-256加密,*表示用户被锁定)    

第三段:     上次更改密码的日期, 表示从1970年1月1日到密码更改时间                           

第四段:      过多少天更改密码,0为不限制时间.                                               

第五段:      99999表示密码永不过期.                                                        

第六段:      7为提示过多少天密码过期                                                       

二、 创建/删除/修改用户和用户组, 为用户设置密码

       1. useradd/groupadd:     创建用户、用户组;

[root@Centos1 ~]# useradd linux

               常用选项:    

                              ①。 -d:     指定家目录;

[root@Centos1 ~]# useradd -d /home/1 user1
[root@Centos1 ~]# tail -1 /etc/passwd
user1:x:500:500::/hom

                              ②。 -u:     指定用户UID;

[root@Centos1 ~]# useradd -u 520 user2
[root@Centos1 ~]# tail -2 /etc/passwd | grep user2
user2:x:520:520::/home/user2:/bin/bash

                              ③。 -g:     指定用户GID;

[root@Centos1 ~]# groupadd linux                         #创建用户组
[root@Centos1 ~]# tail -1 /etc/group
linux:x:521:
[root@Centos1 ~]# tail -3 /etc/group
user1:x:500:
user2:x:520:
linux:x:521:
[root@Centos1 ~]# useradd -g 521 user4
[root@Centos1 ~]# id user4
uid=521(user4) gid=521(linux) groups=521(linux)

                          ④。 -G:     指定用户附加组;

[root@Centos1 ~]# useradd -G 520 user5
[root@Centos1 ~]# id user5
uid=522(user5) gid=522(user5) groups=522(user5),520(user2)

                          ⑤。 -M:     不创建家目录;

[root@Centos1 ~]# useradd -M user6
[root@Centos1 ~]# ls -l /home/ | grep user6

                          ⑥。  -s:      指定用户shell;

[root@Centos1 ~]# useradd -s /bin/nologin user7
root@Centos1 ~]# tail -7 /etc/passwd | grep user7
user7:x:524:524::/home/user7:/bin/nologin

       2. userdel/groupdel:     删除用户、用户组;

[root@Centos1 ~]# userdel user7

                          ①。  -r:      将用户和家目录一块删除;

[root@Centos1 ~]# userdel -r user4

                          ②。 删除组;

[root@Centos1 ~]# groupdel  user4

        3. usermod:     修改用户信息;

[root@Centos1 ~]# id passwd
uid=1110(passwd) gid=500(user1) groups=500(user1),520(user2),521(linux)
[root@Centos1 ~]# usermod -u 11111 passwd
[root@Centos1 ~]# id passwd
uid=11111(passwd) gid=500(user1) groups=500(user1),520(user2),521(linux)
ps:     usermod不仅可以修改用户的uid,还可以修改gid,登录shell,家目录等......

        4. passwd:     为用户设置密码;

[root@Centos1 ~]# passwd user1
[root@Centos1 ~]# echo "123" | passwd --stdin user1

三、 锁定/解除用户

[root@Centos1 ~]# passwd -l user1           #锁定用户
[root@Centos1 ~]# passwd -u user1          #解锁用户
[root@Centos1 ~]# passwd -S user1          #查看用户是否锁定

四、 利用mkpasswd生成随机密码串

[root@Centos1 ~]# yum -y install expect
选项: 
              -l:     密码的长度, 默认为9, 最低为7        
              -d:     密码中包含几个数字, 默认值为2       
              -c:     密码中包含几个小写字母, 默认值为2    
              -C:     密码中包含几个大写字母,默认值为2     
              -s:     密码中包含几个特殊字符,默认值为2    
              -p:     对程序进行加密           
[root@Centos1 ~]# mkpasswd -l 10 -d 3 -c 1 -C 1 -s 1
o8xu7{Kz8t

五、 用户身份切换

       1. su与su -区别;

[root@Centos1 ~]# su user1
[user1@Centos1 root]$ echo $PATH
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/sbin
[user1@Centos1 root]$ ls -la
ls: cannot open directory .: Permission denied
[root@Centos1 ~]# su - user1
[user1@Centos1 ~]$ ls -a
.  ..  .bash_logout  .bash_profile  .bashrc
[user1@Centos1 ~]$ echo $PATH
/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/1/bin
ps: 可以看到,加-与不加-的区别在于环境变量不一样。 环境变量不一样,导致某写内置/外置命令不能执行

       2. 以user1用户执行命令;

[root@Centos1 ~]# su - user1
[user1@Centos1 ~]$ su -c "echo aa > /tmp/a.txt" - user1
Password:   输入user1的密码
[user1@Centos1 ~]$ cat /tmp/a.txt
aa

       3. 给普通命令授权命令;

[root@Centos1 ~]# visudo
## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL                                    #找到此行
第一段:     指定用户;                                                                     
第二段:     来源IP,ALL为所有IP。 (ALL)为临时拥某个用户的执行身份;    
第三段:     授权哪些命令, 填写绝对路径;

                              ①。将root用户授权/bin/ls命令给普通用户user1使用;

[root@Centos1 ~]# su - user1                                 
[user1@Centos1 ~]$ ls -l /root/                             
ls: cannot open directory /root/: Permission denied        
执行ls查看/root目录没权限;                                                       
[user1@Centos1 ~]$ su - root
[root@Centos1 ~]# visudo
## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL                                      #找到此行
user1   ALL=(root)      /bin/ls, /bin/mv                         #增加此行
[root@Centos1 ~]# su - user1
[user1@Centos1 ~]$ sudo /bin/ls /root
[sudo] password for user1:                                       #输入user1的密码
2.txt            ceshi       drbd-8.4.3.tar.gz  install.log.syslog
anaconda-ks.cfg  drbd-8.4.3  install.log

       4. 不允许root登录, 授权给普通用户切换root用户不需要密码;

[root@Centos1 ~]# vim /etc/ssh/sshd_config
   PermitRootLogin no      #去掉前面的"#",yes改为no
[root@Centos1 ~]# visudo
user1   ALL=(root)      NOPASSWD: /bin/su     #增加此行.. NOPASSWD表示切换时不输入密码
[root@Centos1 ~]# su - user1
[user1@Centos1 ~]$ sudo su -