3.1用户配置文件和密码配置文件
(1)inux系统中,所有用户(包括系统管理员)的账号和密码都可以在/etc/passwd和/etc/shadow这两个文件中找到,/etc/passwd只有系统管理员才可以修改的,其他用户可以查看,/etc/shadow其他用户看不了
(2)/etc/passwd
‘/etc/passwd’ 由 ‘:’ 分割成7个字段,每个字段的具体含义是:
(3)用户名,代表用户账号的字符串。
(4)原先存放该账号的密码,现在密码都放在/etc/shadow中,所以这里显示x
(5)表示uid,代表用户标识号,系统识别用户身份是通过这个数字表示的,0就是root,通常uid的取值范围是0~65535(但实际上已经可以支持到4294967294),0是超级用户(root)的标识号,1~499由系统保留,作为管理账号,普通用户的标识号从500开始,如果我们自定义建立一个普通用户,你会看到该账户的标识号是大于或等于500的。
(6)表示gid,代表组标识号。
(7)关于账号的一些说明信息
(8)用户的家目录,即用户的起始工作目录,它是用户在登录到系统之后所处的目录。
(9)shell,用户登录后要启动一个进程,用来将用户下达的指令传给内核,这就是shell。查看/etc/passwd文件,该字段中除了/bin/bash外还有/sbin/nologin比较多,它表示不允许该账号登录。如果你想建立一个账号不让他登录,那么就可以把该字段改成/sbin/nologin,默认是/bin/bash.
/etc/shadow
/etc/shadow这个文件,和/etc/passwd类似,用 ‘:’ 分割成9个字段。
(1)用户名
(2)加密后的用户密码(加密算法:SHA-512)
①如果为空,则对应用户没有口令,登录时不需要口令;
②星号代表帐号被锁定;
③双叹号表示这个密码已经过期了;
④$6$开头的,表明是用SHA-512加密;
⑤$1$表明是用MD5加密;
⑥$2$ 是用Blowfish加密;
⑦$5$ 是用 SHA-256加密;
(3)从某个时刻起,到用户最后一次修改口令时的天数,时间起点一般是1970年1月1日(格林乔治时间)。
(4)两次修改口令之间所需的最小天数,默认0,即不限制。
(5)口令保持有效的最大天数,默认是99999,可以理解为永远不需要改。
(6)“警告时间”字段表示的是从系统开始警告用户到用户密码正式失效之间的天数。
(7)“不活动时间”密码已经到期,然而用户并没有在到期前修改密码,那么再过3天,则这个账号就失效了,即锁定了
(8)“失效时间”,是按距离1970年1月1日多少天算的,账号在某个日期前可以使用,到期后账号作废。
(9)作为保留用的,没有什么意义。
3.2用户组管理
用户组的管理涉及用户组的添加、删除和修改。组的增加、删除和修改实际上就是对/etc/group文件的更新
(1)用户组的添加
命令格式:groupadd 选项 用户组
选项:
-g GID 指定新用户组的组标识号(GID)
不加 “-g” 选项则按照系统默认的gid创建组,跟用户一样,gid也是从500开始的。
实例:
1.[root@localhost ~]# groupadd grptest1
[root@localhost ~]# tail -n1 /etc/group
grptest1:x:502:
2.[root@localhost ~]# groupadd -g 511 grptest2
[root@localhost ~]# tail -n2 /etc/group
grptest1:x:502:
grptest2:x:511:
(2)用户组的删除
命令格式:groupdel 用户组
实例:
[root@localhost ~]# groupdel grptest2
[root@localhost ~]# tail -n3 /etc/group
testgroup:x:500:
user1:x:501:
grptest1:x:502:
有一种情况不能删除组:
[root@localhost ~]# groupdel user1
groupdel: cannot remove the primary group of user 'user1'
这是因为user1组中包含user1账户,只有删除user1账户后才可以删除该组。
(3)用户组属性的修改
命令格式:groupmod 选项 用户组
选项:
-g GID 为用户组指定新的组标识号
-n新用户组 将用户组的名字改为新名字
实例1.
#groupmod -g 102 group2
此命令将组group2的组标识号修改为102。
实例2.
#groupmod -g 1000 -n group3 group2
此命令将组group2的标识号改为1000,组名修改为group3。
(4)如果一个用户同时属于多个用户组,那么用户可以切换到其他用户组,以便具有其他用户组的权限
命令:
#newgrp 用户组
3.3用户管理
用户账号的管理工作主要涉及到用户账号的添加、修改和删除。
(1)添加账号
命令格式:useradd 选项 用户名
选项:-u 自定义UID
-g 是新建的用户属于已经存在的某个组,后面可以跟组id,也可以跟组名
-d 自定义用户的家目录
-M 不建立家目录
-s 自定义shell
实例1.
不加任何选项直接跟用户名,则会创建一个跟用户名同样名字的组。
实例2.
[root@localhost ~]# useradd -u510 -g 513 -M -s /sbin/nologin user11
useradd: group '513' does not exist
[root@localhost ~]# useradd -u510 -g 502 -M -s /sbin/nologin user11
[root@localhost ~]# useradd -u511 -g grptest1 user12
[root@localhost ~]# tail -n2 /etc/passwd
user11:x:510:502::/home/user11:/sbin/nologin
user12:x:511:502::/home/user12:/bin/bash
[root@localhost ~]# tail -n2 /etc/group
grptest1:x:502:
test10:x:503:
‘-g’ 选项后面跟一个不存在的gid会报错,提示该组不存在。刚刚上面说过 ‘-M’ 选项加上后则不建立用户家目录,但是在/etc/passwd文件中仍然有这个字段。但是你使用ls /home/user11查看一下会提示该目录不存在。所以 ‘-M’ 选项的作用只是不创建那个目录()。
[root@localhost ~]# ls /home/user11
ls: 无法访问/home/user11: 没有那个文件或目录
(2)删除账号
命令:userdel -r username
‘-r’ 选项的作用只有一个,就是删除账户的时候连带账户的家目录一起删除。
3.4usermod命令
usermod命令用于修改用户的基本信息
特点:该命令不允许改变在线的账号名称,若要改变账号名称,必须确保这个账号在电脑上没执行任何程序。
命令格式:useradd 选项 参数
选项:
-e,修改账号的有效期限
-f,修改账号在密码过期后多少天,账号关闭
-g,修改账户所属群组
-G,增加用户的附加组,又叫扩展组(一个用户可以属于多个组,但是gid只有一个,除了gid之外的组叫扩展组。)
-l,修改用户账号名称
-L,锁定用户密码,使密码无效
-u,修改用户ID
-U,解除密码锁定
实例:将user1加入到root组
实例:修改用户名称
修改用户密码:--stdin只输入一次新密码。
例子:passwd –stdin 用户名
修改密码:echo –e “”|passwd 用户名
3.5用户密码管理
命令passwd,
更改root密码
[root@localhost ~]# passwd
更改用户 root 的密码 。
新的 密码:
更改其他用户密码:
[root@localhost ~]# passwd aming
更改用户 aming 的密码 。
新的 密码:
只有root可以更改其他用户的密码,普通用户只能修改自己的密码。
参数:-l,锁定用户密码
-u.解锁用户密码
命令:usermod –L/U 用户名,也能锁定和解锁用户密码
--stdin,设置密码写一遍即可,不需确认,以后写脚本经常用,如图所示。
3.6mkpasswd命令
命令mkpasswd用于生成密码,随机生成字符串,这字符串可以作为密码
首先安装一个expect软件包,安装命令:#yum install –y expect
安装完成后可以使用命令:#mkpasswd 产生随机字符串
[root@localhost /]# mkpasswd
m0Dirg#N1
1.可以通过参数指定生成字符串的个数:#mkpasswd –l “数字”
实例:[root@localhost /]# mkpasswd -l 12
IZrkxw80bbh<
2.也可以过参数指定生成字符串的特殊字符个数:#mkpasswd -s “数字”
实例:[root@localhost /]# mkpasswd -s 3
ps*0$:ME2
3.7su命令
作用:su命令用于切换用户
查看当前用户命令:#whoami
命令格式:su - username ,- 可跟可不跟。
普通用户下的su命令不加username时,就是切换到root用户。
1.如果不加-切换用户时,当前目录没有变化
实例:
[root@localhost /]# cd /tmp/test
[root@localhost test]# su
[root@localhost test]# su aming
[aming@localhost test]$ pwd
/tmp/test
加上-,当前目录则为主目录。表示彻底切换到用户下包括自己的配置和环境变量,就在自己的家目录。
2.指定用户执行命令
实例:
[root@localhost ~]# su - -c "touch /tmp/zanghao.11" aming
[root@localhost ~]# ls -lt /tmp/ |head
总用量 116
-rw-rw-r-- 1 aming aming 0 5月 15 22:43 zanghao.1
3.8sudo命令
使用场景:使用前提,有一个堡垒机或跳板机,审计就是记录操作
1. 禁止远程直接登录root
2. NOPASSWD: /usr/bin/su (sudo su - root不要输入密码)
作用:用来让普通用户临时以root用户身份执行指定命令。
默认情况下,只有root用户可以使用sudo命令,普通用户想要使用sudo,需要root预先设定。
要使用sudo命令,首先需要安装,命令:#yum install –y sudo
1. 打开sudo配置文件:使用#visudo会锁定到下图界面。
2.在root ALL=(All) All行下面加入aming All=(All) All,就可以让aming用户拥有sudo特权。aming这里是一个用户,用来指定这个用户有sudo特权。ALL=(All),左边All指的是所有主机(本机主机名),右边的All指的是获取哪个用户的身份。最后一个All设定可以使用sudo的命令有哪些(命令要写绝对路径)。
3.此时可以验证一下aming用户的权限了,方法如下:
[aming@localhost ~]$ ls /root/
ls: 无法打开目录/root/: 权限不够
[aming@localhost ~]$ sudo ls
[sudo] aming 的密码:
公共 模板 视频 图片 文档 下载 音乐 桌面
[aming@localhost ~]$ sudo /usr/bin/ls /root/
123 anaconda-ks.cfg initial-setup-ks.cfg
234 anaconda-ks.cfg.1 sudo
当aming用户使用命令ls查看/root/时,提示权限不够,当使用命令sudo ls,然后输入aming账户密码时,就有权限了。再次使用将不再提示输入密码。
4.不需要输入密码执行sudo
如下图添加:
#user1 All=(ALL) NOPASSWD: /usr/bin/ls,/usr/bin/mv,/usr/bin/cat
[root@localhost ~]# su - user1
上一次登录:四 5月 17 22:22:26 CST 2018pts/0 上
[user1@localhost ~]$ ls /root/
ls: 无法打开目录/root/: 权限不够
[user1@localhost ~]$ sudo ls /root/
123 anaconda-ks.cfg initial-setup-ks.cfg
234 anaconda-ks.cfg.1 sudo
3.9限制root远程登录
输入命令:#vi /etc/ssh/sshd_config
把#PermitRootLogin yes 修改为PermitRootLogin no,改完保存退出。
改完配置文件重启sshd服务,
命令:#systemctl restart sshd.service
在重新连接则提示如下图:
打开putty连接,已aming用户登录,如下图所示:
使用sudo命令切换到root下,说明限制成功。