目录
3.1 用户配置文件和密码配置文件
cat /etc/passwd 用户密码文件、核心文件,每个增加一个用户就会增加一行
[root@linux-01 test]# 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
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
test:x:1000:1000::/home/test:/bin/bash
gem:x:1001:1001::/home/gem:/bin/bash
每个用户一行 用“;” 分开八段
第一段:用户名
二段: 密码
三段: uid (把普通用户那一行中第三段数字改为0,就会拥有root权限)
四段:gid
五段: 空 (用户注释信息)
六段:用户家目录位置
七段: 用户的shell /bin/bash /sbin/nologin
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
/etc/shadow 专门放密码 与/etc/passwd 一一对应
root:$6$HANSsrYq13mzlpuL$dPtrJa2.JJULagyn.KGy04l1WFPgwhN2aGu6jUyxZ5Zu52RJBmZw0y0m3BVJraHDtNsI7NzD49siPiVh.u3er1::0:99999:7:::
bin:*:17632:0:99999:7:::
daemon:*:17632:0:99999:7:::
adm:*:17632:0:99999:7:::
tss:!!:18040::::::
test:!!:18047:0:99999:7:::
gem:!!:18047:0:99999:7:::
每个字段的含义是:
· sp_namp - 指向以 null 结束的用户名的指针
#第一段 ,用户名对应/etc/passwd
· sp_pwdp - 指向 null 结束的密码的指针
#第二段 : 用户密码,该账号的真正密码
· sp_lstchg - 最近更改密码的日期(日期计算方法是从1970年1月1日开始的天数)
#第三段 : 天数,上次更改密码的日期,
· sp_min - days before which password may not be changed
#第四段 : 表示多少天才能更改密码
· sp_max - days after which password must be changed
#第五段 : 表示多少天后密码到期
· sp_warn - days before password is to expire that user is warned of pending password expiration
#第六段: 表示多少天后即将过期
· sp_inact - days after password expires that account is considered inactive and disabled
#第七段: 表示密码已经到期 ,多少天后帐号失效,即锁定
· sp_expire - days since Jan 1, 1970 when account will be disabled
#帐号在这个日期前可以使用
· sp_flag - reserved for future use
#保留字段
3.2 用户组管理
group 创建用户时也会创建跟用户名一样的组
[root@linux-01 ~]# cat /etc/group 组的密码
root:x:0:
bin:x:1:
daemon:x:2:
sys:x:3:
adm:x:4:
tty:x:5:
[root@linux-01 ~]# cat /etc/gsshadow 也是组的密码
groupadd 创建组命令
gid 一般是1000 以上 1000内以被内部占用
新建一个用户组grp1,并设置其组id为1003
[root@linux-01 ~]# groupadd -g 1003 grp1 #创建组并指定gid
[root@linux-01 ~]# tail /etc/group
ssh_keys:x:997:
sshd:x:74:
postdrop:x:90:
postfix:x:89:
chrony:x:996:
tss:x:59:
slocate:x:21:
test:x:1000:
group:x:1001:
grp1:x:1003:
groupdel 删除组 1
例:新建一个用户组group1,并设置其组id为505
[root@linux-01 ~]groupadd -g 505 group1
3.3 用户管理
useradd 用户创建命令
-u<uid>:指定用户id。
useradd(选项)(参数)
选项
-c<备注>:加上备注文字。备注文字会保存在passwd的备注栏位中;
-d<登入目录>:指定用户登入时的启始目录;
-s<shell>:指定用户登入后所使用的shell;
-D:变更预设值;
-e<有效期限>:指定帐号的有效期限;
-f<缓冲天数>:指定在密码过期后多少天即关闭该帐号;
-g<群组>:指定用户所属的群组;
-G<群组>:指定用户所属的附加群组;
-m:自动建立用户的登入目录;
-M:不要自动建立用户的登入目录;
、home/user5 没有创建并不不代表没有
-n:取消建立以用户名称为名的群组;
-r:建立系统帐号;
-u<uid>:指定用户id。
id aming 查看 用户 uid、gid 、组
组可以包含 gid 还有扩展组
例:
不让用户test1登录
usermod -s /sbin/login test1
b. usermod -s /bin/false test1
d. usermod test1 -s /bin/false
useradd -u 1006 -g grp2 -d /home/aming11 -s /sbin/nologin user4
新建用户使用哪个选项可以不创建用户家目录?
useradd -M user5
删除用户如何连带它的家目录一并删除?
userdel -r username
3.4 usermod命令
usermod 更改用户属性
usermod命令用于修改用户的基本信息。usermod命令不允许你改变正在线上的使用者帐号名称。当usermod命令用来改变user id,必须确认这名user没在电脑上执行任何程序。你需手动更改使用者的crontab档。也需手动更改使用者的at工作档。采用NIS server须在server上更动相关的NIS设定。
usermod(选项)(参数)
-c<备注>:修改用户帐号的备注文字;
-d<登入目录>:修改用户登入时的目录;
-e<有效期限>:修改帐号的有效期限;
-f<缓冲天数>:修改在密码过期后多少天即关闭该帐号;
-g<群组>:修改用户所属的群组;
-G<群组>;修改用户所属的附加群组;
-l<帐号名称>:修改用户帐号名称;
-L:锁定用户密码,使密码无效;
-s<shell>:修改用户登入后所使用的shell;
-u<uid>:修改用户ID;
-U:解除密码锁定。
实例
将test 添加扩展组到group中:
usermod -G group test
[root@linux-01 ~]# id test
uid=1000(test) gid=1003(grp1) 组=1003(grp1)
[root@linux-01 ~]# usermod -G group,grp1 test
[root@linux-01 ~]# id test
uid=1000(test) gid=1003(grp1) 组=1003(grp1),1001(group)
修改newuser的用户名为newuser1:
usermod -l newuser1 newuser
锁定账号newuser1:
[root@linux-01 ~]# passwd -l user1 #passwd命令锁定用户
锁定用户 user1 的密码 。
passwd: 操作成功
[root@linux-01 ~]# passwd -u user1 #usermod命令解锁用户
解锁用户 user1 的密码。
passwd: 操作成功
[root@linux-01 ~]# usermod -L user1 #usermod命令锁定用户
[root@linux-01 ~]# usermod -U user1 #usermod命令解锁用户
user1:!$6$gRl2XV.c$bHoIOI.uo5OO7zdtL2dbvMXmM62rTCqz1VG03btCzt3H0:18052:0:99999:7:::
# 第二段处带有“!” 代表用户已锁定
lp:*:17632:0:99999:7:::
sync:*:17632:0:99999:7:::
# 第二段处带有“*” 代表用户的密码已锁定
解除对newuser1的锁定:
usermod -U newuser1
3.5 用户密码管理
echo命令_Linux echo 命令用法详解:输出指定的字符串或者变量 http://man.linuxde.net/echo
使用echo 命令更改用户密码
[root@linux-01 ~]# echo "zxasqw"| passwd --stdin user1
更改用户 user1 的密码 。
passwd:所有的身份验证令牌已经成功更新。
实例
用echo命令打印带有色彩的文字:
文字色:
echo -e "\e[1;31mThis is red text\e[0m"
This is red text
\e[1;31m
将颜色设置为红色\e[0m
将颜色重新置回
颜色码:重置=0,黑色=30,红色=31,绿色=32,黄色=33,蓝色=34,洋红=35,青色=36,白色=37
背景色:
echo -e "\e[1;42mGreed Background\e[0m"
Greed Background
颜色码:重置=0,黑色=40,红色=41,绿色=42,黄色=43,蓝色=44,洋红=45,青色=46,白色=47
文字闪动:
echo -e "\033[37;31;5mMySQL Server Stop...\033[39;49;0m"
红色数字处还有其他数字参数:0 关闭所有属性、1 设置高亮度(加粗)、4 下划线、5 闪烁、7 反显、8 消隐
3.6 mkpasswd命令
centos7用户的密码是通过sha-512 方式加密的
这个命令是随机生成 密码的一个工具, 如果没有这个命令,请安装相应的包。
yum install -y expect
mkpasswd 的使用
常用的选项, -l 指定 长度
-d 指定 数字的个数
-c 指定 小写字符个数 -C 指定大写字符个数
-s 指定特殊字符个数
usage: mkpasswd [args] [user]
where arguments are:
-l # (length of password, default = 7)
指定密码的长度,默认是7位数
-d # (min # of digits, default = 2)
指定密码中数字最少位数,默认是2位
-c # (min # of lowercase chars, default = 2)
指定密码中小写字母最少位数,默认是2位
-C # (min # of uppercase chars, default = 2)
指定密码中大写字母最少位数,默认是2位
-s # (min # of special chars, default = 1)
指定密码中特殊字符最少位数,默认是1位
-v (verbose, show passwd interaction)
这个参数在实验的时候报错,具体不知道。
常用的三个选项
[root@linux-01 ~]# mkpasswd #默认 9位密码长度
\qepZU99m
[root@linux-01 ~]# mkpasswd -l 12 -s 3 # -s 3 设置特殊符号数量3个
rgo,g#9ZUv[6
[root@linux-01 ~]# mkpasswd -l 12 -s 0 # -s 0 设置特殊符号数量0个
比如举个例子, 长度 15 位,数字至少 3位, 小写字母至少4 位, 大写字母至少4 位, 特殊字符 至少 2位
[root@localhost ~]# mkpasswd -l 15 -d 3 -c 4 -C 4 -s 2
M50=xniV_Y4gBht
CZ7@lBYa)1gept6
7RaQ7c"gwvX<s6C
jAYW8dGw>pe^42j
3.7 su命令
su命令 切换用户
[root@linux-01 ~]# whoami
root
[root@linux-01 ~]# id
uid=0(root) gid=0(root) 组=0(root)
[root@linux-01 ~]# su - user1
[user1@linux-01 ~]$ whoami
user1
[user1@linux-01 ~]$ id
uid=1002(user1) gid=1002(user1) 组=1002(user1)
[user1@linux-01 ~]$ su - root #管理员切换到用户无须输入密码,用户切换到管理员或者其他用户要输入密码
密码:
上一次登录:一 6月 10 22:27:31 CST 2019从 192.168.96.1pts/0 上
[root@linux-01 ~]# whoami
root
-c, --command <命令> 使用 -c 向 shell 传递一条命令
我们可以使用su临时以其他用户的身份去执行命令,下面做法不对的是?
b. su - username -c "touch /tmp/1.txt"
c. su -c "touch /tmp/1.txt" - username
d. su -c "touch /tmp/1.txt" username
[root@linux-01 ~]# su - -c "touch /tmp/user1.111" user1 # 以user1 的身份创建一个文件
[root@linux-01 ~]# ls -lt /tmp/ |head
总用量 0
-rw-rw-r-- 1 user1 user1 0 6月 10 23:03 user1.111
3.8 sudo命令
sudo 普通用户临时执行命令以指定用户的身份执行 一般都普通用户授权root 用户的身份
使用 visudo 命令 打开sudo的配置文件(不建议用vi 打开)
找到
显示行号命令 :set nu
#93行添加加入规则
91 ## Allow root to run any commands anywhere
92 root ALL=(ALL) ALL
93 user1 ALL=(ALL) /usr/bin/ls, /usr/bin/mv, /usr/bin/cat
[user1@linux-01 ~]$ sudo命令的使用^c
[user1@linux-01 ~]$ sudo /usr/bin/ls /root
我们信任您已经从系统管理员那里了解了日常注意事项。
总结起来无外乎这三点:
#1) 尊重别人的隐私。
#2) 输入前要先考虑(后果和风险)。
#3) 权力越大,责任越大。
[sudo] user1 的密码:
anaconda-ks.cfg
切换时不用输入密码
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
user1 ALL=(ALL) /usr/bin/ls, /usr/bin/mv, /usr/bin/cat
user2 ALL=(ALL) NOPASSWD: /usr/bin/ls, /usr/bin/cat
结果:
[root@linux-01 ~]# su - user2
上一次登录:二 6月 11 22:03:13 CST 2019pts/0 上
[user2@linux-01 ~]$ sudo /usr/bin/ls /root/
anaconda-ks.cfg
使用sudo做命令别名
做命令别名
26 ## Networking
27 # Cmnd_Alias NETWORKING = /sbin/route, /sbin/ifconfig, /bin/ping, /sbin/dhclient, /usr/bin/net, /sbin/iptables, /usr/bin/rfcomm, /usr/bin/wvdial, /sbin/iwconfig, /sbin/mii-tool
28 Cmnd_Alias USTEST_CMD = /usr/bin/ls, /usr/bin/mv, /usr/bin/cat # 添加新的命令别名
## Allow root to run any commands anywhere
92 root ALL=(ALL) ALL
93 user1 ALL=(ALL) /usr/bin/ls, /usr/bin/mv, /usr/bin/cat
94 user2 ALL=(ALL) NOPASSWD: /usr/bin/ls, /usr/bin/cat
95 user3 ALL=(ALL) USTEST_CMD
结果:
[root@linux-01 ~]# su - user3
[user3@linux-01 ~]$ sudo ls /root/
[sudo] user3 的密码:
anaconda-ks.cfg
例:配置sudo时,下面相关的说法哪些是不对的?
a. 可以针对组来配置sudo权限
b. 在sudo配置文件中,我们可以定义host、user以及命令的别名
c. 如果不想输入密码,只需在命令前面加“NOPASSWD:”即可
d. %wheel 表示wheel组,这个组并不是系统的用户组
3.9 限制root远程登录
使
用 visudo 编辑添加别名和规则
19 ## rather than USERALIAS
20 # User_Alias ADMINS = jsmith, mikem
21 User_Alias TEUSS = user1,user2 #添加用户组别名
91 ## Allow root to run any commands anywhere
92 root ALL=(ALL) ALL
93 TEUSS ALL=(ALL) NOPASSWD: /usr/bin/su #添加规则
[root@linux-02 ~]# vi /etc/ssh/sshd_config # 编辑ssh服务文件
#使用 ‘/’ 搜索 Root
37 #LoginGraceTime 2m
38 #PermitRootLogin yes 修改>>38 PermitRootLogin no
[root@linux-02 ~]# systemctl restart sshd.service # 重启ssh服务
测试1:xhell连接
测试2linux互联:
[root@linux-01 ~]# ssh root@192.168.96.136
root@192.168.96.136's password:
Permission denied, please try again. #尝试登陆root用户许可被拒绝,
root@192.168.96.136's password:
[root@linux-01 ~]# ssh user1@192.168.96.136
user1@192.168.96.136's password:
Last login: Wed Jun 12 11:18:06 2019 from 192.168.96.135 # 登陆用户别名组内的用户 成功
[user1@linux-02 ~]$ ls /root
ls: 无法打开目录/root: 权限不够
[user1@linux-02 ~]$ sudo su -
上一次登录:三 6月 12 11:02:13 EDT 2019pts/0 上
最后一次失败的登录:三 6月 12 11:18:49 EDT 2019从 192.168.96.135ssh:notty 上
最有一次成功登录后有 3 次失败的登录尝试。 # 切换到root用户 成功
[root@linux-02 ~]# w
11:20:27 up 1:17, 2 users, load average: 0.01, 0.02, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 192.168.96.1 10:29 10:43 0.08s 0.03s -bash
user1 pts/1 192.168.96.135 11:19 3.00s 0.10s 0.03s sshd: user1 [priv]
[root@linux-02 ~]# logout
[root@linux-01 ~]# ssh user3@192.168.96.136
user3@192.168.96.136's password:
Last login: Wed Jun 12 10:59:22 2019
[user3@linux-02 ~]$ whoami
user3
[user3@linux-02 ~]$ sudo su -
[sudo] user3 的密码:
user3 不在 sudoers 文件中。此事将被报告。 # 非别名组内的用户不能切换到 root用户