3 用户和组管理

3.1 用户配置文件和密码配置文件

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

在该文件中,每一行用户记录的各个数据段用“:”分隔,分别定义了用户的各方面属性。各个字段的顺序和含义如下:

  1. 用户名(如第一行中的root就是用户名):代表用户账号的字符串。用户名字符可以是大小写字母、数字、减号(不能出现在首位)、点以及下划线,其他字符不合法。虽然用户名中可以出现点,但不建议使用,尤其是首位为点时,另外减号也不建议使用,因为容易造成混淆。
  2. 口令(passwd):存放的就是该账号的口令,为什么是 ‘x’ 呢?早期的unix系统口令确实是存放在这里,但基于安全因素,后来就将其存放到 ‘/etc/shadow’ 中了,在这里只用一个 ‘x’ 代替。现在的Unix/Linux系统中,口令不再直接保存在passwd文件中,通常将passwd文件中的口令字段使用一个“x”来代替,将/etc /shadow作为真正的口令文件,用于保存包括个人口令在内的数据。当然shadow文件是不能被普通用户读取的,只有超级用户才有权读取。此外,需要注意的是,如果passwd字段中的第一个字符是“*”的话,那么,就表示该账号被查封了,系统不允许持有该账号的用户登录。  
  3. 用户标识号(UID):这个数字代表用户标识号,也叫做uid。系统识别用户身份就是通过这个数字来的,0就是root,也就是说你可以修改test用户的uid为0,那么系统会认为root和test为同一个账户。通常uid的取值范围是0~65535(但实际上已经可以支持到4294967294),0是超级用户(root)的标识号,1~499由系统保留,作为管理账号,普通用户的标识号从500开始,如果我们自定义建立一个普通用户,你会看到该账户的标识号是大于或等于500的。
  4. 组标识号(GID):表示组标识号,也叫做gid。这个字段对应着/etc/group 中的一条记录,其实/etc/group和/etc/passwd基本上类似。
  5. 注释说明,该字段没有实际意义,通常记录该用户的一些属性,例如姓名、电话、地址等等。不过,当你使用finger的功能时就会显示这些信息的
  6. 用户的家目录,当用户登录时就处在这个目录下。root的家目录是/root,普通用户的家目录则为/home/username,这个字段是可以自定义的,比如你建立一个普通用户test1,要想让test1的家目录在/data目录下,只要修改/etc/passwd文件中test1那行中的该字段为/data即可。
  7. shell,用户登录后要启动一个进程,用来将用户下达的指令传给内核,这就是shell。Linux的shell有很多种sh, csh, ksh, tcsh, bash等,而Redhat/CentOS的shell就是bash。查看/etc/passwd文件,该字段中除了/bin/bash外还有/sbin/nologin比较多,它表示不允许该账号登录。如果你想建立一个账号不让他登录,那么就可以把该字段改成/sbin/nologin,默认是/bin/bash.

[root@localhost ~]# cat /etc/shadow |head # 密码配置文件 
root:$6$WSvBfIgPYYkXGMoU$if1z4iYkHQxW6YNaC4.GLS9PXV8gVnshg4XurhnmyjQfsvf0pl7Et5NlZEo7cJJ.tZqh/QKFgn29oEoP.e5AG1::0:99999:7:::
bin:*:17632:0:99999:7:::
daemon:*:17632:0:99999:7:::
adm:*:17632:0:99999:7:::
lp:*:17632:0:99999:7:::
sync:*:17632:0:99999:7:::
shutdown:*:17632:0:99999:7:::
halt:*:17632:0:99999:7:::
mail:*:17632:0:99999:7:::
operator:*:17632:0:99999:7:::

#用户名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志

每个字段的含义是:

  1. 用户名,跟/etc/passwd对应。
  2. 用户密码,这个才是该账号的真正的密码,不过这个密码已经加密过了,但是有些黑客还是能够解密的。所以,该文件属性设置为000,但是root账户是可以访问或更改的。
  3. 上次更改密码的日期,这个数字是这样计算得来的,距离1970年1月1日到上次更改密码的日期,例如上次更改密码的日期为2012年1月1日,则这个值就是 ‘365 x (2012-1970) + (2012-1970)/4 + 1 = 15341’. 因为如果是闰年,则有366天。
  4. 要过多少天才可以更改密码,默认是0,即不限制
  5. 密码多少天后到期。即在多少天内必须更改密码,例如这里设置成30,则30天内必须更改一次密码,否则将不能登录系统,默认是99999,可以理解为永远不需要改。
  6. 密码到期前的警告期限,若这个值设置成7,则表示当7天后密码过期时,系统就发出警告告诉用户,提醒用户他的密码将在7天后到期。
  7. 账号失效期限。你可以这样理解,如果设置这个值为3,则表示:密码已经到期,然而用户并没有在到期前修改密码,那么再过3天,则这个账号就失效了,即锁定了。
  8. 账号的生命周期,跟第三段一样,是按距离1970年1月1日多少天算的。它表示的含义是,账号在这个日期前可以使用,到期后账号作废。
  9. 作为保留用的,没有什么意义。

[root@localhost ~]# ls -l /etc/shadow
----------. 1 root root 712 7月  31 22:02 /etc/shadow

3.2 用户组管理

  1. 查看系统用户文件:/etc/passwd
  2. 查看用户密码存放的配置文件:/etc/shadow
  3. 查看用户组文件:/etc/group
  4. 查看用户组密码存放的配置文件:/etc/gshadow

[root@localhost ~]#  cat /etc/group|head
root:x:0:
bin:x:1:
daemon:x:2:
sys:x:3:
adm:x:4:
tty:x:5:
disk:x:6:
lp:x:7:
mem:x:8:
kmem:x:9:
[root@localhost ~]#  cat /etc/group|head
root:x:0:
bin:x:1:
daemon:x:2:
sys:x:3:
adm:x:4:
tty:x:5:
disk:x:6:
lp:x:7:
mem:x:8:
kmem:x:9:

5. 创建用户组: groupadd  定义用户组名
4. 查看用户组文件,显示倒数第n行 :(最后n行是最新创建的用户组)
5. 创建用户组,同时指定组ID(gid):groupadd    -g   指定组ID(gid:1000以后排序)  定义用户组名
7. 删除用户组:groupdel  用户组
用户组可以包含多个用户。没有用户,及为空,可删除!

8. 系统自动备份的配置文件:备份的配置文件- ls /etc/sh   或   ls /etc/sh*
备份的配置文件- :键盘两下Tab,即可显示系统备份的文件或者(文件后加*显示)

[root@localhost ~]# groupadd panyu
[root@localhost ~]# groupadd lingling
[root@localhost ~]# groupadd test
[root@localhost ~]# tail -n3 /etc/group
panyu:x:1001:
lingling:x:1002:
test:x:1003:
[root@localhost ~]# groupadd -g 1005 test2
[root@localhost ~]#  tail -n4 /etc/group
panyu:x:1001:
lingling:x:1002:
test:x:1003:
test2:x:1005:
[root@localhost ~]# groupadd -g 1005 test22
groupadd:GID “1005”已经存在
[root@localhost ~]# groupdel test2
[root@localhost ~]# ls /etc/sh
ls: 无法访问/etc/sh: 没有那个文件或目录
[root@localhost ~]# ls /etc/sh*
/etc/shadow  /etc/shadow-  /etc/shells

3.3 用户管理

1. 创建普通用户:useradd  定义用户名
2. 查看系统用户文件,显示倒数5行内容: tail -n5 /etc/passwd #创建普通用户,uid是从1000开始的!!!
3. 创建普通用户,指定uid,同时指定用户组:useradd -u uid -g 用户组  用户名
4. 创建普通用户,指定:uid;用户组,还指定用户的家目录:useradd
-u 指定uid    
-g  指定用户组  
-d /home/家目录名    备注:/home是存放普通用户的家目录
-s /sbin/nologin  用户名 定义用户名 -s是指定用户登入后所使用的shell。默认值为/bin/bash。如果不想让用户登录系统可以用 -s /sbin/nologin.此用户就不可以登录系统。
useradd -u1012 -glingling -d /home/lingling333 -s /sbin/nologin lingling003 (注意中文键盘下的空格和英文键盘下的空格
5. 创建普通用户,指定用户的夹目录;但在/home下,不创建他的家目录!useradd -M lingling6
6. 删除普通用户: userdel 用户 userdel lingling003
7. 删除普通用户,同时删除用户的夹目录:userdel -r 用户 userdel -r lingling004

[root@localhost ~]# useradd panyu001
useradd:用户“panyu001”已存在
[root@localhost ~]# useradd panyu002
[root@localhost ~]# useradd lingling001
[root@localhost ~]# useradd test001
[root@localhost ~]# tail -n5 /etc/passwd
chrony:x:998:996::/var/lib/chrony:/sbin/nologin
panyu001:x:1000:1000::/home/panyu001:/bin/bash
panyu002:x:1001:1004::/home/panyu002:/bin/bash
lingling001:x:1002:1005::/home/lingling001:/bin/bash
test001:x:1003:1006::/home/test001:/bin/bash
[root@localhost ~]# useradd -g lingling -d /home/lingling444 -s /sbin/nologin lingling004
[root@localhost ~]# tail -n1 /etc/passwd
lingling004:x:1113:1002::/home/lingling444:/sbin/nologin

3.4 usermod命令

1. 更改用户uid:usermod  -u  uid 普通用户 #usermod -u 1013 lingling001
2. 更改用户组gid:usermod  -g  gid或用户组  普通用户  #usermod -g test test001
3. 更改用户夹目录:usermod  -d  夹目录   普通用户# usermod -d /home/ling111 lingling001. 更改用户shell:usermod -s /bin/bash或/sbin/nologin   普通用户(/bin/bash表示:能登录的,/sbin/nologin表示:不能登录的)
能登录:[rroot@localhost ~]# usermod  -s /bin/bash hao
不能登录:[root@localhost ~]# usermod  -s /sbin/nologin hao

5. 更改用户扩展组:usermod  -G 用户组 普通用户[root@localhost ~]# usermod -G lingling panyu001
6. 添加多个扩展组:usermod  -G   用户组1,用户组2     普通用户  

3.5 用户密码管理

1. 更改root用户密码:# passwd root
2. 更改普通用户密码:# passwd 普通用户
3. tail查看存放用户密码的文件:# tail /etc/shadow
用户没密码:显示两个!!(叹号,表示不能的登录用户); 有密码:显示加密的字符串
4. head查看 锁定的用户密码:# head /etc/shadow
用户锁定的密码:显示*(星号,表示不能的登录用户); 有密码:显示加密的字符串
5. 锁定用户密码:passwd -l  用户名 # passwd -l lingling001 ,禁止登录系统
6. 解锁用户密码:passwd -u  用户名passwd -u lingling001 ,可以登录系统
7. 锁定用户密码:  usermod -L 用户名# usermod -L hao
tail /etc/shadow命令查看:户密码文件里,会显示一个!(叹号)
8. 解锁用户密码:usermod -U 用户名# usermod -U hao
9. 更改系统用户密码: passwd --stdin 用户名# passwd --stdin lingling001
注意:输入一遍密码,是明文显示的!
10. echo 跟指定密码,用管道符执行passwd --stdin 命令:
echo "密码"  |passwd --stdin  用户名 # echo "py621121" |passwd --stdin lingling001
11. echo 跟指定密码,用管道符执行passwd 命令:
echo -e "密码\n确定密码"   |passwd  用户名# echo -e "admin12dg3\nadmin12dg3" |passwd lingling001

3.6 mkpasswd命令

1. 安装mkpasswd命令包:
mkpasswd:生成不规则的字符串,作用于设定密码# yum install -y expect
2. 生成不规则字符串:mkpasswd # mkpasswd   默认:大小写字母,特殊符号,数字  9位的密码
3. 指定密码共生成几位字符串: mkpasswd -l 指定数字 # mkpasswd -l  12
4. 指定密码包含几个特殊符号: mkpasswd -l 指定数字  -s 指定数字 # mkpasswd -l  12 -s 5
注意:如不需要特殊符号,指定  -s 0个  即可!

3.7 su命令

su命令用于切换当前用户身份到其他用户身份,变更时须输入所要变更的用户帐号与密码。
语法:su(选项)(参数) 
-c<指令>或--command=<指令>:执行完指定的指令后,即恢复原来的身份; 
-f或——fast:适用于csh与tsch,使shell不用去读取启动文件; 
-l或——login:改变身份时,也同时变更工作目录,以及HOME,SHELL,USER,logname。此外,也会变更PATH变量; 
-m,-p或--preserve-environment:变更身份时,不要变更环境变量; 
-s或--shell=:指定要执行的shell; 
--help:显示帮助; 
--version;显示版本信息。 
命令:变更帐号为root并在执行ls指令后退出变回原使用者:#su -c ls root
命令:变更帐号为root并传入-f选项给新执行的shell:#su root -f
命令:变更帐号为test并改变工作目录至test的家目录:#su -test

3.8 sudo命令

  • 用su是可以切换用户身份,如果每个普通用户都能切换到root身份,如果某个用户不小心泄漏了root的密码,那岂不是系统非常的不安全,没有错,为了改进这个问题,产生了sudo这个命令。使用sudo执行一个root才能执行的命令是可以办到的,但是需要输入密码,这个密码并不是root的密码而是用户自己的密码。默认只有root用户能使用sudo命令,普通用户想要使用sudo,是需要root预先设定的,即,使用 visudo 命令去编辑相关的配置文件/etc/sudoers. 如果没有visudo这个命令,请使用 yum install -y sudo 安装。
  • 默认root能够sudo是因为这个文件中有一行 “root ALL=(ALL) ALL” 在该行下面加入 “test ALL=(ALL) ALL” 就可以让test用户拥有了sudo的权利。使用 “visudo” 命令编辑/etc/sudoers配置文件,它的操作方法和 “vi” 命令使用方法是一样的,按 ‘i’ 进入编辑模式,编辑完成后,按 “Esc” ,再输入 ”:wq” 完成保存。

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

[root@localhost ~]# su test

[test@localhost root]$ ls

ls: 无法打开目录.: 权限不够

[test@localhost root]$ sudo ls

We trust you have received the usual lecture from the local System

Administrator. It usually boils down to these three things:

#1) Respect the privacy of others.

#2) Think before you type.

#3) With great power comes great responsibility.

[sudo] password for test:

123 456 789 anaconda-ks.cfg dirb install.log install.log.syslog test test1 test2 test3

然后在文件的最后面加入三行:

User_Alias USER_SU = test, test1, gaohanwei
Cmnd_Alias SU = /bin/su
USER_SU ALL=(ALL) NOPASSWD: SU

保存配置文件后,使用test, test1, gaohanwei 三个账户登陆Linux后,执行命令 sudo su - 切换到root账户,获取root账户的所有权利。

[root@localhost ~]# su - test
[test@localhost ~]$ sudo su -
[root@localhost ~]# whoami
root

如果不想让root很简单的直接登录,我们就可以使用keypass工具来保存记录一个很复杂的密码。

3.9 限制root远程登录

/etc/ssh/sshd_config为sshd服务的配置文件,默认允许root账户通过ssh远程登录linux。要想不允许root用户远程登录linux,具体操作方法如下:
修改配置文件/etc/ssh/sshd_config,在文件中查找#PermitRootLoginyes并修改为PermitRootLogin no。保存配置文件后,需要重启sshd服务,如下:

#systemctl restart sshd.service

这种方法只适用于通过ssh远程登录Linux的情况。

猜你喜欢

转载自blog.csdn.net/xiaoyuerp/article/details/81319383
今日推荐