一.用户配置文件与密码配置文件
1.1 /etc/passwd是由 “ :” 分割7个字段,每个字段的含义如下:
[root@localhost ~]# cat /etc/passwd
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
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin
systemd-bus-proxy:x:999:997:systemd Bus Proxy:/:/sbin/nologin
systemd-network:x:998:996:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:997:995:User for polkitd:/:/sbin/nologin
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
第1个字段为用户名;
第2个字段为该账号的口令,存储的是密码;
第3个字段为一个数字,这个数字代表用户标识号,也称为“uid”,在这里,用户标识号是从1000开始,如果我们创建一个普通用户,该账号的uid是从1000以后往下排序的;
第4个字段也是数字,该字段标识组标识号,称gid,这个字段对应着/etc/group中的一条记录,其实/etc/group和/etc/passwd相似;
第5个字段标识注释信息;
第6个字段为普通用户的家目录,root的家目录就是/root,普通用户的家目录则/home/username,用户的家目录也是可以修改的,在/etc/passwd配置文件中修改;
第7个字段为用户的shell,用户登录后,要启动一个进程们用来将用户下达的命令传给内核,实现一个交互的作用,这就是shell。
1.2 /etc/shadow含义,专门放用户的密码的配置文件;/etc/shadow与/etc/passwd类似由:分割成9段示例命令如下:
root:$6$zwh0z1JRQZGvf7mF$QL9hItHHPHFQ8SaXwKwiDF2fyuEbcvST5QYJTpdtMutC/vKNnBD5Ulqamzar2Zkc7fMT0mJHF9RR.GkHPeyCl1::0:99999:7:::
bin:*:16659:0:99999:7:::
daemon:*:16659:0:99999:7:::
adm:*:16659:0:99999:7:::
lp:*:16659:0:99999:7:::
sync:*:16659:0:99999:7:::
shutdown:*:16659:0:99999:7:::
halt:*:16659:0:99999:7:::
mail:*:16659:0:99999:7:::
operator:*:16659:0:99999:7:::
games:*:16659:0:99999:7:::
ftp:*:16659:0:99999:7:::
nobody:*:16659:0:99999:7:::
avahi-autoipd:!!:17662::::::
systemd-bus-proxy:!!:17662::::::
systemd-network:!!:17662::::::
dbus:!!:17662::::::
polkitd:!!:17662::::::
tss:!!:17662::::::
postfix:!!:17662::::::
sshd:!!:17662::::::
第1个字段为用户名与/etc/passwd对应
第2个字段为用户密码,是该账户的真正密码已经加密
第3个字段为上次更改密码的日期
第4个字段为要过多少天才可以更改密码,默认为0,即不受限制
第5个字段为密码多少天后到期
第6个字段为密码到期前的警告期限
第7个字段为帐号失效期限
第8个字段为帐号的生命周期
第9个字段为保留用的,没有意义.
用户组配置文件:
/etc/group
用户组信息文件
组的名称:密码:组id:用户组成员
组密码文件:/etc/gshadow:
二.用户与用户组管理
2.1用户组管理:
新增组的命令groupadd:
命令groupadd的格式为groupadd [-g GID] groupname示例命令如下:
[root@localhost ~]# groupadd shiyan1
[root@localhost ~]# tail -n1 /etc/group
shiyan1:x:1000:
如果不加-g选项,则按照系统默认的gid创建组。跟uid一样gid也是从1000开始的。我们也可以自定义gid
[root@localhost ~]# groupadd -g 1004 shiyan2
[root@localhost ~]# tail -n2 /etc/group
shiyan1:x:1000:
shiyan2:x:1004:
删除组命令groupdel:
groupdel没有特殊情况,但有一种情况无法删除如下所示
[root@localhost ~]# useradd wang -g shiyan1
[root@localhost ~]# groupdel shiyan1
groupdel:不能移除用户“wang”的主组
因为shiyan1组中有一个wang用户,只有删除或转移这个用户才能继续删除.
2.2用户管理:
增加用户的命令useradd:
命令介绍:
useradd 增加用户 格式 : useradd 后面跟想创建的用户名
还有一种给创建的用户,增加组名及家目录什么的;
格式如下:useradd [-u UID] [-g GID] [-d HOME] [-M] [-s] ,
-u 表示自定义UID
-g 表示使新增用户属于已经存在的某个组,后面可以跟组的id,也可以跟组名
-d 表示自定义目录的家目录
-M 表示不建立家目录
-s 表示自定义shell
如果useradd不加任何选项,直接跟用户名,则会创建一个跟用户名同名的组,当然很多时候需要我们自己去定义uid,gid与所属的组:示例命令如下:
[root@localhost ~]# useradd -u 1004 -g 1005 -M -s /sbin/nologin wang3
useradd:“1005”组不存在
[root@localhost ~]# useradd -u 1004 -g 1006 -M -s /sbin/nologin wang3
useradd:“1006”组不存在
[root@localhost ~]# useradd -u 1004 -g 1001 -M -s /sbin/nologin wang3
[root@localhost ~]# useradd-u 1006 -g shiyan1 wang4
-bash: useradd-u: 未找到命令
[root@localhost ~]# useradd -u 1006 -g shiyan1 wang4
[root@localhost ~]# tail -n2 /etc/passwd
wang3:x:1004:1001::/home/wang3:/sbin/nologin
wang4:x:1006:1000::/home/wang4:/bin/bash
[root@localhost ~]# tail -n2 /etc/group
shiyan2:x:1004:
wang2:x:1001:
删除帐号的命令userdel:
格式:userdel [-r] username
其中-r选项的作用是,当删除用户时,一并删除用户的家目录。
我们先来查看wang4的家目录示例命令如下:
[root@localhost ~]# ls -ld /home/wang4
drwx------ 2 wang4 shiyan1 59 5月 21 17:21 /home/wang4
[root@localhost ~]# userdel wang4
[root@localhost ~]# ls -ld /home/wang4/
drwx------ 2 1006 shiyan1 59 7月 31 17:21 /home/wang4/
这里只删除了用户并没有删除这个用户下的家目录
usermod 设置扩展组:
概念:更改用户属性的一个命令。
用法:usermod [选项] 后面跟你需要操作的内容 [用户名]
- 创建用户不指定ID,会根据最后一名用户ID来递增
- 创建用户不指定组,会创建同名组。组的ID和用户ID一致;但是,如果组ID同已有组冲突则会根据上一个自定义组ID来递增。
选项:
-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 用户映射
举个例子,我们先来查看一下wang4的uid和gid还有扩展组:
[root@localhost ~]# id wang4
uid=1006(wang4) gid=1000(shiyan1) 组=1000(shiyan1)
然后在这里,我们想让wang4再属于另外一个组,叫扩展组:
[root@localhost ~]# usermod -G shiyan2 wang4
[root@localhost ~]# id wang4
uid=1006(wang4) gid=1000(shiyan1) 组=1000(shiyan1),1004(shiyan2)
三.用户密码管理
如何设置用户密码,格式 passwd [username] (这里username填写你的用户),假设新建一个用户wang6
[root@localhost ~]# useradd wang6
[root@localhost ~]# passwd wang6
更改用户 wang6 的密码 。
新的 密码:
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
在这里,只有root才可以修改其他账户的密码,普通账户只能修改自己的密码。
我们可以用tail命令查看配置文件后十行信息
[root@localhost ~]# tail /etc/shadow
systemd-bus-proxy:!!:17662::::::
systemd-network:!!:17662::::::
dbus:!!:17662::::::
polkitd:!!:17662::::::
tss:!!:17662::::::
postfix:!!:17662::::::
sshd:!!:17662::::::
wang:!!:17672:0:99999:7:::
wang4:!!:17672:0:99999:7:::
wang6:$6$a/1GugZW$S68ubfIEjVsA0k8dLCigAAaJpgHEL0PpaPDXUpDMZlA4K4MuHwHf7lZ0N1VhjsQCtMwyRqtKGg//D5PTY5J1S0:17672:0:99999:7:::
这里我们可以看见有加密的字符串,这里是设置过密码的用户,然后"!!"表示密码为空。
如何锁定一个用户登录,-l,-L两种选项
[root@localhost ~]# passwd -l wang4
锁定用户 wang4 的密码 。
passwd: 操作成功
[root@localhost ~]# tail -n2 /etc/shadow
wang4:!!:17672:0:99999:7:::
wang6:$6$a/1GugZW$S68ubfIEjVsA0k8dLCigAAaJpgHEL0PpaPDXUpDMZlA4K4MuHwHf7lZ0N1VhjsQCtMwyRqtKGg//D5PTY5J1S0:17672:0:99999:7:::
注意,在这里 密文密码前方有2个“!”,表示锁定用户。
如何解锁一个用户登录,-u,-U两种选项
[root@localhost ~]# passwd -u wang6
解锁用户 wang6 的密码。
passwd: 操作成功
[root@localhost ~]# tail -n2 /etc/shadow
wang4:!!:17672:0:99999:7:::
wang6:$6$a/1GugZW$S68ubfIEjVsA0k8dLCigAAaJpgHEL0PpaPDXUpDMZlA4K4MuHwHf7lZ0N1VhjsQCtMwyRqtKGg//D5PTY5J1S0:17672:0:99999:7:::
注意看,这里密文前面没有“!”,表示解锁成功。
--stdhin的用法,用passwd直接修改wang6用户的密码
[root@localhost ~]# passwd --stdin wang6
更改用户 wang6 的密码 。
wangwangwang
passwd:所有的身份验证令牌已经成功更新。
--stdin是用来强制设定一个用户的密码
用echo,通过管道符一条命令设置密码
[root@localhost ~]# echo "wangwangwang"|passwd --stdin wang6
更改用户 wang6 的密码 。
passwd:所有的身份验证令牌已经成功更新。
这条命令的含义是,echo(显示) “123123” 通过管道符,把前面命令的结果,传递(输出)给后面的命令。
mkpasswd命令:
首先安装一个expect包,这个包可以实现随机的字符串
[root@localhost ~]#yum install -y expect
[root@localhost ~] mkpasswd
?UnsAu31b
这个就是随机生成的字符串了
我们也可以指定密码长度。-l
[root@localhost ~]# mkpasswd -l 20
m2zov@itxghcwIVq2spe
我们还可以指定密码长度同时指定有几个特殊字符和数字
[root@localhost ~]# mkpasswd -l 20 -s 2 -d 3
Rz1Eyxm83at]iv=itixm
这里-l表示字节,-s表示特殊符号,-d表示有几个数字。
# yum intstall -y expect # 安装工具
# mkpasswd
\vw1SG3wf # 默认长度9
# mkpasswd -l 12
ooWpxgm4c)1Q # 指定长度12
# mkpasswd -l 12 -s 4
ht>3^!d<PB9c # 指定长度12,指定特殊符号4
# 简单说明
# mkpasswd -l(长度) 12 -s(字符) 4 -C(大写) 1 -c(小写) 1 -d(数字) 1
四.切换用户与限制远程登录
su命令:
格式:su [-] username
后面可以跟-,也可以不跟,加上-之后可以彻底切换过去,包括把各种变量也切换过去。
切换用户
[root@localhost ~]# su - wang6
[wang6@localhost ~]$
如何切换用户的同时执行一条命令呢 su - -c “命令” 用户
[root@localhost ~]# su --c "touch /tmp/wang.txt" wang6
[root@localhost ~]# su - wang6
上一次登录:一 5月 21 19:10:27 CST 2018pts/0 上
sudo命令 指定命令:
概念:使用sudo命令执行一个只有root才能执行的命令,仅此一个。
但是还是需要输入密码,这个密码是用户本身的密码。
只有root用户才能使用sudo命令,普通用户想要使用sudo是需要root预先设定的,我们可以使用visudo命令编辑相关的配置文件,/etc/sudiers。
安装命令:yum install -y sudo
如何设定一个用户临时拥有sudo命令,需要root预先设定
首先查看sudo的配置文件
visdo #查看这个配置文件直接在里面编辑
找到,root ALL=(ALL) ALL这一行 (:set nu 显示行数),
输入i进入编辑模式,编辑完后,按ESC 再输入:wq保存退出。
这里,后面的是要写绝对路径,用逗号分隔后,后面需要加一个空格。
在下一行添加一个用户临时拥有root权限,第一个ALL默认模仿上面的,括号里面的是用户,将被授予哪个用户的权限,默认就可以了,
第二个ALL 是所有的命令。
限制root远程登陆
只可以限制远程登陆。
远程服务的配置文件在 /etc/ssh/sshd_config,sshd服务配置文件
修改配置文件:
[root@localhost ~]# vi /etc/ssh/sshd_config
在这里找到permintRootlogin 把#去掉把yes改成no 禁止root用户登陆
最后重启服务
[root@localhost ~]# systemctl restart sshd.service
然后就远程登陆不上了.