一、查看用户

    /etc/passwd

[root@mylinux ~]# cat /etc/passwd|head -5
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
[root@mylinux ~]#

    文件的每一行代表一个用户,

    每一行由冒号“:”分成7个字段,

    结构都是一样的,结构如下:


    用户名:密码:UID:GID:用户标签:home目录:shell


    ①用户名:大小写字母、数字、减号(不能出现在首位)、点以及下划线,其他字符不合法。

    ②密码:以“x”字母占位,实际上密码是储存在“/etc/shadow”里。

[root@mylinux ~]# head -5 /etc/shadow 
root:$6$Zj4RYp1LFptznzDm$jZbdsgce0pNZE6pEv9l8ncOXMOhr90cfzUbXIkL2oOKjHVeeUP/uyDG6UnNiNKvqMIzd6Dsan5pwuDNXNG.qe0:16496:0:99999:7:::
bin:*:15980:0:99999:7:::
daemon:*:15980:0:99999:7:::
adm:*:15980:0:99999:7:::
lp:*:15980:0:99999:7:::
[root@mylinux ~]#

     ③UID:User ID 用户识别码,特殊值“0”是保存给“root”,1~499是属于系统用户的;500~4294967294(2^32-2)是分配给普通用户的。

     ④GID:Group ID 用户组识别码,来自“/etc/group”。

[root@mylinux ~]# head -5 /etc/group 
root:x:0:
bin:x:1:bin,daemon
daemon:x:2:bin,daemon
sys:x:3:bin,adm
adm:x:4:adm,daemon
[root@mylinux ~]#

    ⑤用户标签:该字段没有实际意义,通常记录该用户的一些属性,例如姓名、电话、地址等等,用 chfn 更改 

[root@mylinux ~]# grep "mylinux" /etc/passwd
mylinux:x:1000:1000::/home/mylinux:/bin/bash             # 用户mylinux第五段为空;
[root@mylinux ~]# chfn -f mylinux -p 13800138000 mylinux # 用chfn增加描述-f full-name;
Changing finger information for mylinux.                   -p office-phone;
Finger information changed.
[root@mylinux ~]# !grep                                  # 第五段已经增加刚才的信息
grep "mylinux" /etc/passwd
mylinux:x:1000:1000:mylinux,,13800138000:/home/mylinux:/bin/bash
[root@mylinux ~]#

    ⑥home目录:用户家目录位置

    ⑦shell:标识用户shell类型:/bin/bash ;/sbin/nologin;/sbin/shutdown等




二、用户密码

    /etc/shadow  

[root@mylinux ~]# head -5 /etc/shadow
root:$6$Zj4RYp1LFptznzDm$jZbdsgce0pNZE6pEv9l8ncOXMOhr90cfzUbXIkL2oOKjHVeeUP/uyDG6UnNiNKvqMIzd6Dsan5pwuDNXNG.qe0:16496:0:99999:7:::
bin:*:15980:0:99999:7:::
daemon:*:15980:0:99999:7:::
adm:*:15980:0:99999:7:::
lp:*:15980:0:99999:7:::
[root@mylinux ~]#

    文件的每一行代表一个用户,

    每一行由冒号“:”分成9个字段,


   用户名:

   密码:经过SHA加密,不可逆

   修改密码时间:距第一次更改密码的时间已经多少天了

   修改密码期限:要过多少天才可以进行修改密码,默认值“0”,无限制

   密码到期时间:密码多少天后到期,默认值“99999”

   密码期限:密码到期提醒,默认值“7”即密码到期的前7天开始提醒

   锁定期限:密码到期后,账号多少天后锁定,默认值空

   生命周期:账号生命周期,默认值空

   保留位




三、用户和组

   ①用户的创建/删除

   用户创建

   格式:useradd [选项] [用户名]

[root@mylinux ~]# useradd linux
[root@mylinux ~]# tail -1 /etc/passwd
linux:x:1002:1003::/home/linux:/bin/bash
[root@mylinux ~]#

   选项:-u 指定用户UID

         -U 指定用户群

         -g 指定用户GID(passwd中要含有这个ID)

         -G 指定用户组群GID

         -m 创建用户家目录

         -M 不创建用户家目录

         -d 用户家目录

         -D 打印或者更改useradd默认配置

         -s 指定shell类型

    用户删除

    格式 :userdel [选项] [用户名]

[root@mylinux ~]# tail -5 /etc/passwd
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
anon:x:600:600:anonymous,,13800138000:/home/anon:/bin/bash
www:x:1001:1001::/home/www:/bin/bash
anonymous:x:501:501::/home/anonymous:/bin/bash
linux:x:1002:1003::/home/linux:/bin/bash
[root@mylinux ~]# userdel linux
[root@mylinux ~]# !tail
tail -5 /etc/passwd
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
anon:x:600:600:anonymous,,13800138000:/home/anon:/bin/bash
www:x:1001:1001::/home/www:/bin/bash
anonymous:x:501:501::/home/anonymous:/bin/bash
[root@mylinux ~]#

    选项 : -f 强制删除

           -r 删除用户家目录及邮件缓冲




    ②组的创建及删除

    组的创建

    格式 : groupadd [选项] [组名]

[root@mylinux ~]# groupadd linux
[root@mylinux ~]# tail -5 /etc/group
anon:x:600:
www:x:1001:
anonymous:x:1002:
test:x:501:
linux:x:1003:
[root@mylinux ~]#

     选项 :-g 为创建的组指定GID

            -P 为创建的组加密

            -r 创建一个系统账户

     组的删除

     格式 :groupdel [选项] [组名]

[root@mylinux ~]# groupdel linux
[root@mylinux ~]# tail -5 /etc/group
nfsnobody:x:65534:
anon:x:600:
www:x:1001:
anonymous:x:1002:
test:x:501:
[root@mylinux ~]#




     ③usermod 对用户信息进行修改

     格式 :usermod [选项] [用户名]

[root@mylinux ~]# tail -5 /etc/passwd
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
anon:x:600:600:anonymous,,13800138000:/home/anon:/bin/bash
www:x:1001:1001::/home/www:/bin/bash
anonymous:x:501:501::/home/anonymous:/bin/bash
linux:x:1002:1003::/home/linux:/bin/bash
[root@mylinux ~]# usermod -g 501 linux          # 更改用户GID信息
[root@mylinux ~]# !tail
tail -5 /etc/passwd
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
anon:x:600:600:anonymous,,13800138000:/home/anon:/bin/bash
www:x:1001:1001::/home/www:/bin/bash
anonymous:x:501:501::/home/anonymous:/bin/bash
linux:x:1002:501::/home/linux:/bin/bash
[root@mylinux ~]#

    

     选项 :-l 变更使用者登陆的名字

            -a 对-G选项进行追加

            -c 更新用户passwd中注释栏信息

            -d 指定新的用户家目录

            -g 指定新的GID

            -G 指定新的组群GID

            -u 指定新的用户UID

            -m 移动家目录到新的位置

            -P 使用新的加密密码

            -s 使用新的shell类型

            -L 锁定用户账户

            -U 解锁用户账户

           


   

四、创建/修改用户密码

    创建用户密码

    对于新建的用户,没有设置密码,密码是需要创建的,命令如下:

[root@mylinux ~]# passwd linux                 # 格式passwd [用户名]
更改用户 linux 的密码 。
新的 密码:
重新输入新的 密码:
passwd: 所有的身份验证令牌已经成功更新。
[root@mylinux ~]#

    选项: -d 删除已命名账户密码

          -k 密码不过期

          --stdin 从标准输入获取密码

[root@mylinux ~]# passwd linux --stdin
更改用户 linux 的密码 。
123456789
passwd: 所有的身份验证令牌已经成功更新。
[root@mylinux ~]#

  



    mkpaswd 密码生成命令

    没有此命令的需要执行 yum install -y expect

    选项 : -l 密码的长度,默认值为“9”

            -d 密码中含有几个数字,默认值为“2”

            -c 密码中含有几个小写字母,默认值为“2”

            -C 密码中含有几个大写字母,默认值为“2”

            -s 密码中含有几个特殊字符,默认值为“1”

            -p 对程序进行加密

[root@mylinux ~]# mkpasswd -l 12 -c 3 -C 3 -d 3 -s 3
xVY[1.2zOl}8                         # 长度为12,含有小字母3个大字母3个数字3个特殊字符3个
[root@mylinux ~]# mkpasswd -l 12 -c 3 -C 3 -d 3 -s 3
E\605nH&-Riu
[root@mylinux ~]# mkpasswd -l 12 -c 3 -C 3 -d 3 -s 3
AxOgm8,^9J5*                         # 每次生产的密码是不同的
[root@mylinux ~]#




五、用户身份的切换


    su [user]或 su -m [user]或su -p [user]直接使用命令切换用户的环境变量,不会随着新用户一起转换过去,但是会保持当前用户环境配置的状态。

[mylinux@mylinux tmp]$ su
密码:                                      # 输入root密码
[root@mylinux tmp]# pwd
/tmp
[root@mylinux tmp]# env |grep 'mylinux'     # 当前的用户环境变量还是mylinux的
HOSTNAME=mylinux      
USER=mylinux
PATH=/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/mylinux/bin
MAIL=/var/spool/mail/mylinux
LOGNAME=mylinux
[root@mylinux tmp]#

    所以需要一些选项

    su - 或者 su -l 环境变量会随着用户的切换,一切切换过去

    单独的"-"选项隐含了-l。如果不指定用户,则假设其为root。

[mylinux@mylinux tmp]$ su -
密码:                                    # root
[root@mylinux ~]# pwd
/root
[root@mylinux ~]# env |grep 'root'        # 这时的环境变量随着用户的切换一同转换了
USER=root
MAIL=/var/spool/mail/root
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
PWD=/root
HOME=/root
LOGNAME=root
[root@mylinux ~]#

   


    因为su的每一次切换都需要输入root密码,所以就需要用到sudo,使用他的时候输入的是他用户本身的密码。

    sudo的选项 :

  -a type       使用指定的 BSD 认证类型
  -b            在后台运行命令
  -C fd         关闭所有 >= fd 的文件描述符
  -E            在执行命令时保留用户环境
  -e            编辑文件而非执行命令
  -g group      以指定的用户组执行命令
  -H            将 HOME 变量设为目标用户的主目录。
  -h            显示帮助消息并退出
  -i [command]  以目标用户身份运行一个登录 shell
  -K            完全移除时间戳文件
  -k            无效的时间戳文件
  -l[l] command 列出用户能执行的命令
  -n            非交互模式,将不提示用户
  -P            保留组向量,而非设置为目标的组向量
  -p prompt     使用指定的密码提示
  -r role       以指定的角色创建 SELinux 安全环境
  -S            从标准输入读取密码
  -s [command]  以目标用户身份运行 shell
  -t type       以指定的角色创建 SELinux 安全环境
  -U user       在列表时,列出指定用户的权限
  -u user       以指定用户身份运行命令(或编辑文件)
  -V            显示版本信息并退出
  -v            更新用户的时间戳而不执行命令
  --            停止处理命令行参数

    sudo不是任何人都可以运行的,是需要root授权的,也就是需要配置,但是需要用root来进行编辑/etc/suders,但是不是vi,而是visudo

[root@mylinux ~]# visudo
...........前面省略.........
 ## The COMMANDS section may have other options added to it.
 ##
 ## Allow root to run any commands anywhere
 root    ALL=(ALL)       ALL                 # 这行在配置的第98行
 mylinux ALL=(ALL)       ALL                 # 这行是新增的
 ## Allows members of the 'sys' group to run networking, software,
 ## service management apps and more.
 # %sys ALL = NETWORKING, SOFTWARE, SERVICES, STORAGE, DELEGATING, PROCES        SES, LOCATE, DRIVERS
...........后面胜利

   书写的格式:

   账户    来源主机名=(可切换的账户)   可以执行的命令

[mylinux@mylinux tmp]$ cat /etc/shadow
cat: /etc/shadow: 权限不够
[mylinux@mylinux tmp]$ sudo cat /etc/shadow
[sudo] password for mylinux:
root:$6$.AQImhvXo6CchYvC$FwdxD2VKQtWDiDyaf2rYV6J6/ZOX4LyeNFaVDl53wUBuzz6zyb00pCNEd3TEZIRNfM0fljrKcsotHwyXDVhsz1:16492:0:99999:7:::
bin:*:15980:0:99999:7:::
daemon:*:15980:0:99999:7:::

    


 

    但是当有多个用户来管理这个主机,那岂不是要一行一行的增加,其实可以通过组来进行管理

    visudo打开进行编辑 

## Allows people in group wheel to run all commands
 %wheel ALL=(ALL)       ALL                  # 找到这一行将前面的“#”去掉,退出保存

    用usermod将用户加入wheel组

[root@mylinux ~]# usermod -a -G wheel su1
[root@mylinux ~]# su - su1
[su1@mylinux ~]$ id
uid=502(su1) gid=502(su1) 组=502(su1),10(wheel)

    来测试看看吧!

[su1@mylinux ~]$ sudo tail -3 /etc/shadow
[sudo] password for su1:
su1:$6$NphVy42w$03uQ.oVSkupkEsx/imypw2zQSGCC2Yw2VpeSG0OM2oOzSJHrsE.Gna3jEp1o0YgXt3EGU5Npd.oCf1SimHy7O.:16514:0:99999:7:::
su2:$6$Ugvncf5s$cVZxix4.BcRe.WZq1D/QLJJOFgcAjJqfG2Zrn8pJ5/QlHjJWkdzPF./XKIxQl3uept4fY3i5YhfP0MmOBB8h4.:16514:0:99999:7:::
su3:$6$lA8YAIF3$m9CjNBggvPyQXsqMday1P92db3m.A.16ii5nYwFFeVsbdeZFrMwxq7mdvVm174j2lQhtv91BaJZ9ad.oYBZgb0:16514:0:99999:7:::
[su1@mylinux ~]$

   测试成功!但是怎么每次都要密码,可以不要密码吗?答案是可以的

   还是在/etc/sudoers中进行编辑,找到下面的信息,去掉“#”注释,保存退出

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

   我再试一下

[root@mylinux ~]# su - su1
[su1@mylinux ~]$ sudo tail -3 /etc/shadow
su1:$6$NphVy42w$03uQ.oVSkupkEsx/imypw2zQSGCC2Yw2VpeSG0OM2oOzSJHrsE.Gna3jEp1o0YgXt3EGU5Npd.oCf1SimHy7O.:16514:0:99999:7:::
su2:$6$Ugvncf5s$cVZxix4.BcRe.WZq1D/QLJJOFgcAjJqfG2Zrn8pJ5/QlHjJWkdzPF./XKIxQl3uept4fY3i5YhfP0MmOBB8h4.:16514:0:99999:7:::
su3:$6$lA8YAIF3$m9CjNBggvPyQXsqMday1P92db3m.A.16ii5nYwFFeVsbdeZFrMwxq7mdvVm174j2lQhtv91BaJZ9ad.oYBZgb0:16514:0:99999:7:::
[su1@mylinux ~]$

   测试成功不需要密码了,只要对用户进行组的控制就可以实现了,不需要的时候移除组

   当然也可以让每个用户负责不同的权限与执行命令


本内容由导师:阿铭提供技术支持:跟阿铭学linux 点这里

      

更新中。。。