3.1 用户配置文件和密码配置文件
-
用户配置文件 /etc/passwd
查看passwd文件:#cat /etc/passwd
[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
user1:x:1000:1000::/home/user1:/bin/bash
xzl:x:1001:1001::/home/xzl:/bin/bash
tecmint:x:1002:1002::/home/tecmint:/bin/bash
passwd文件详解:
- 每个用户一行
- 由:分割成7段
- 第一段是用户名,root开头,下面是系统自动创建的,新创建的用户在最下面,从第3段的1000开始(例如上面的user1,xzl,tecmint就是我们自己手动创建的用户)
- 第2段是用户的密码 ,为了安全以x表示。
- 第3段表示uid,第4段表示gid
- 第5段表示用户的注释信息,没有实质作用,很多用户都为空
- 第6段表示用户家目录
- 第7段表示用户的shell(普通用户和root都是/bin/bash,表示可以进行登录,而如果是/sbin/nologin的用户则不能登录)
-
密码配置文件 /etc/shadow
查看shadow文件:cat /etc/shadow
[root@localhost ~]# cat /etc/shadow
root:$6$VMk0w040pO9txBsF$Tw2ChBijbvNb0ewN5fUONlQAXcUrwzJZFMuowtpaxj04FEP8G70jx7GArKtAfXLR6L/s1jNk0qeW/VHJIOVY90::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:!!:17734::::::
systemd-bus-proxy:!!:17734::::::
systemd-network:!!:17734::::::
dbus:!!:17734::::::
polkitd:!!:17734::::::
tss:!!:17734::::::
postfix:!!:17734::::::
sshd:!!:17734::::::
user1:!!:17740:0:99999:7:::
xzl:!!:17742:0:99999:7:::
tecmint:$6$OlkhgQkw$S7LbsuXRmwgwClrpRZsMbfwyMEQh/9QyJtyyvHFuBcWKBjKQJ2Wru1mvYBoqTQxJvMya/5I2eBEIxPAwu1Gcn.:17743:0:99999:7:::
shadow文件是专门用来放用户密码的,它与/etc/passwd中的记录行一一对应,也是用:分割,共有9段,格式如下: username: passwd: lastchg: min: max: warn: inactive: expire: flag
登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志
1. “登录名”是与/etc/passwd文件中的登录名相一致的用户账号
2. 第2段显示的是加密的密码,这个密码不能反编译(可以由一个明文获得一个加密的密码,但是不能通过密文来获得明文密码)。
而且就算不同用户设置成一样的密码,但是它们加密后的密码也是不一样的,如下图,root和xzl用户虽然是一样的密码,但是查看到加密密码却是不同的(扩展:想要同时输两条命令可以用分号分隔开来)
3. “最后一次修改时间”表示的是从某个时刻起,到用户最后一次修改口令时的天数。时间起点对不同的系统可能不一样。例如在centos Linux中,这个时间起点是1970年1月1日。
4. “最小时间间隔”指的是两次修改口令之间所需的最小天数。
5. “最大时间间隔”指的是口令保持有效的最大天数。
6. “警告时间”字段表示的是从系统开始警告用户到用户密码正式失效之间的天数。
7. “不活动时间”表示的是用户没有登录活动但账号仍能保持有效的最大天数。
8. “失效时间”字段给出的是一个绝对的天数,如果使用了这个字段,那么就给出相应账号的生存期。期满后,该账号就不再是一个合法的账号,也就不能再用来登录了。,从1970年1月1日开始
9. 保留字段,没有实际意义。
3.2 用户组管理
- 用户组文件 /etc/group
查看 cat /etc/group
[root@localhost ~]# cat /etc/group
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:
wheel:x:10:
cdrom:x:11:
mail:x:12:postfix
man:x:15:
dialout:x:18:
floppy:x:19:
games:x:20:
tape:x:30:
video:x:39:
ftp:x:50:
lock:x:54:
audio:x:63:
nobody:x:99:
users:x:100:
avahi-autoipd:x:170:
utmp:x:22:
utempter:x:35:
ssh_keys:x:999:
input:x:998:
systemd-journal:x:190:
systemd-bus-proxy:x:997:
systemd-network:x:996:
dbus:x:81:
polkitd:x:995:
dip:x:40:
tss:x:59:
postdrop:x:90:
postfix:x:89:
sshd:x:74:
cgred:x:994:
user1:x:1000:
xzl:x:1001:
tecmint:x:1002:
这个文件的内容和/etc/passwd不太一样,并没有完全对应上,但是那边有的这边也差不多都有。因为创建用户的时候也会创建组。
同样和/etc/shadow对应的也有一个/etc/gshadow ,它是一个组密码配置文件。
[root@localhost ~]# cat /etc/gshadow
root:::
bin:::
daemon:::
sys:::
adm:::
tty:::
disk:::
lp:::
mem:::
kmem:::
wheel:::
cdrom:::
mail:::postfix
man:::
dialout:::
floppy:::
games:::
tape:::
video:::
ftp:::
lock:::
audio:::
nobody:::
users:::
avahi-autoipd:!::
utmp:!::
utempter:!::
ssh_keys:!::
input:!::
systemd-journal:!::
systemd-bus-proxy:!::
systemd-network:!::
dbus:!::
polkitd:!::
dip:!::
tss:!::
postdrop:!::
postfix:!::
sshd:!::
cgred:!::
user1:!::
xzl:!::
tecmint:!::
如上图所示,前面提到的几个文件都有一个带-的文件,这是系统自动做的一个备份,每次更改用户时(删除或新加)会生成一个新的,旧的就会加一个-。如果不小心删除了原文件,可以将带-的文件重命名为原文件继续使用
- 创建用户组
命令:guoupadd 语法:groupadd(选项)(参数)
示例1:
创建一个用户组并且在/etc/group
中查看:
[root@localhost ~]# groupadd grp1
[root@localhost ~]# tail -n1 /etc/group
grp1:x:1003:
示例2:
创建一个用户组,并且指定组id为1005:
[root@localhost ~]# groupadd -g 1005 grp2 # centos7中组id必须要从1000以上,因为1000内都是系统预留的
[root@localhost ~]# tail -n1 /etc/group
grp2:x:1005:
- 删除用户组
命令:guoupdel
示例
删除grp1这个用户组:
[root@localhost ~]# groupdel grp1
[root@localhost ~]# tail -n3 /etc/group
xzl:x:1001:
tecmint:x:1002:
grp2:x:1005:
只能删除一个没有用户的组,要想删除一个有用户的组,需要先删除这个组下面的用户或者将用户所属组改到别的组下。
3.3 用户管理
- 增加用户的命令 useradd (还有一个命令是adduser)
语法:useradd [选项] [用户名]
选项:
1.-u : 表示自定义UID
2.-g: 指定所属组,后面可以跟组id,也可以跟组名。
3.-d: 表示自定义用户的家目录。
4.-M: 表示不建立家目录。
5.-s : 表示自定义shell。
示例:
[root@localhost ~]# useradd -u 1008 -g root -d /home/xzl222 -s /sbin/nologin user1008
[root@localhost ~]# tail -n1 /etc/passwd
user1008:x:1008:0::/home/xzl222:/sbin/nologin
- 删除用户的命令 userdel
示例
删除user1用户
userdel user1
删掉用户之后,/etc/passwd
里已经没有此用户信息,但是用户的家目录还是存在,这是防止用户以前有文件存在,把用户的家目录留给管理员,管理员觉得没用了可以手动删除。
删除用户的同时把家目录也删除:
[root@localhost ~]# userdel -r user1008
[root@localhost ~]# ls /home/
tecmint test user1 xzl
3.4 usermod命令
usermod
更改用户属性,用法和useradd相似
示例:
[root@localhost ~]# tail -n3 /etc/passwd
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
xzl:x:1001:1001::/home/xzl:/bin/bash
tecmint:x:1002:1002::/home/tecmint:/bin/bash
[root@localhost ~]# usermod -u 1005 xzl
[root@localhost ~]# tail -n3 /etc/passwd
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
xzl:x:1005:1001::/home/xzl:/bin/bash
tecmint:x:1002:1002::/home/tecmint:/bin/bash
- 扩展组
# id 用户
查看用户的id信息
[root@localhost ~]# id xzl
uid=1005(xzl) gid=1001(xzl) 组=1001(xzl)
这个“组”就是不仅仅包含前面的gid,还包括一些扩展组。
一个用户可以属于多个组,但是gid只有一个,除了gid之外的组叫扩展组。
示例:
更改用户的扩展组
[root@localhost ~]# usermod -G grp2,tecmint xzl # 可以同时改多个扩展组,用逗号隔开
[root@localhost ~]# id xzl
uid=1005(xzl) gid=1001(xzl) 组=1001(xzl),1002(tecmint),1005(grp2)
3.5 用户密码管理
更改用户密码passwd
更改root密码 # passwd
更改普通用户密码 # passwd 用户名
语法
passwd(选项)(参数)
选项
-d:删除密码,仅有系统管理者才能使用;
-f:强制执行;
-k:设置只有在密码过期失效后,方能更新;
-l:(lock)锁住密码;
-s:列出密码的相关信息,仅有系统管理者才能使用;
-u:(unlock)解开已上锁的帐号。
示例1
更改用户 xzl 的密码
[root@localhost ~]# passwd xzl
更改用户 xzl 的密码 。
新的 密码:
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
此时可以在/etc/shadow
里看到xzl加密后的密码
[root@localhost ~]# tail -n3 /etc/shadow
sshd:!!:17734::::::
xzl:$6$81078vad$24DOhiZmZ0WCjpwM.D5w4BciWT97AG5VCn4CIbMaZfq3KQaQDv0JfmoFlfaTDgQslBCT8aWayn.ZGF5l4ursJ.:17744:0:99999:7:::
tecmint:$6$OlkhgQkw$S7LbsuXRmwgwClrpRZsMbfwyMEQh/9QyJtyyvHFuBcWKBjKQJ2Wru1mvYBoqTQxJvMya/5I2eBEIxPAwu1Gcn.:17743:0:99999:7:::
示例2
锁定xzl的密码
[root@localhost ~]# passwd -l xzl # 这里其实还有一个锁定用户的命令:usermod -L
锁定用户 xzl 的密码 。
passwd: 操作成功
此时在/etc/shadow
里再查看下xzl加密后的密码,看看有什么变化
[root@localhost ~]# tail -n3 /etc/shadow
sshd:!!:17734::::::
xzl:!!$6$81078vad$24DOhiZmZ0WCjpwM.D5w4BciWT97AG5VCn4CIbMaZfq3KQaQDv0JfmoFlfaTDgQslBCT8aWayn.ZGF5l4ursJ.:17744:0:99999:7:::
tecmint:$6$OlkhgQkw$S7LbsuXRmwgwClrpRZsMbfwyMEQh/9QyJtyyvHFuBcWKBjKQJ2Wru1mvYBoqTQxJvMya/5I2eBEIxPAwu1Gcn.:17743:0:99999:7:::
可以看到xzl的密码段前有了两个感叹号!!
,这就说明xzl的密码已经被锁定了,其他没有密码的用户比如sshd,也是锁定状态,不允许登陆
如何解锁? # passwd -u xzl
[root@localhost /]# passwd -u xzl #还有一个解锁用户的命令:usermod -U
解锁用户 xzl 的密码。
passwd: 操作成功
明文显示更改密码
# passwd --stdin 用户名
[root@localhost /]# passwd --stdin xzl
更改用户 xzl 的密码 。
aabbccddee
passwd:所有的身份验证令牌已经成功更新。
此命令后面写shell脚本时可能会用到,另一种用法
[root@localhost /]# echo "qwertyuiop" | passwd --stdin xzl
更改用户 xzl 的密码 。
passwd:所有的身份验证令牌已经成功更新。
“|”管道符的作用:把前面输出的结果传递给后面的命令
echo -e
用于启用反斜线控制字符的转换
[root@localhost /]# echo -e "123\n123" #"\n"是一个换行符
123
123
[root@localhost /]# echo -e "123\t123" #"\t"是tab符号
123 123
[root@localhost /]# echo -e "1qaz2wsx\n1qaz2wsx" | passwd xzl #使用这条命令可以免去输入两次密码的烦恼
更改用户 xzl 的密码 。
新的 密码:无效的密码: 密码未通过字典检查 - 它基于字典单词
重新输入新的 密码:passwd:所有的身份验证令牌已经成功更新。
3.6 mkpasswd命令
mkpasswd
这个命令是随机生成 密码的一个工具, 如果没有这个命令,请安装相应的包。
安装expect # yum -y install expect
随机生成高强度密码
[root@localhost /]# mkpasswd
%5io7IWpn
[root@localhost /]# mkpasswd
x2XG6ved;
选项
-l 指定 长度,默认是 9
-d 指定 数字的个数,默认是 2
-c 指定 小写字符个数,默认是 3
-C 指定大写字符个数,默认是 2
-s 指定特殊字符个数,默认是 1
示例
长度15位,数字至少3位,小写字母至少4位,大写字母至少4位,特殊字符至少2位
[root@linux7-128 ~]# mkpasswd -l 15 -d 3 -c 4 -C 4 -s 2
ldz2d"9TAn2L(wQ
3.7 su命令
su
命令用于切换当前用户身份到其他用户身份,变更时须输入所要变更的用户帐号与密码。
切换用户时要加-
,这样切换的更加彻底
在不切换用户的情况下,以普通用户的身份去执行一条命令
[root@linux7-128 ~]# su - -c "touch /tmp/xzl.txt" xzl
[root@linux7-128 ~]# ls -lt /tmp
总用量 136
-rw-rw-r-- 1 xzl xzl 0 5月 15 23:38 xzl.txt
拓展
[root@linux7-128 ~]# su - xzl
su: 警告:无法更改到 /home/xzl 目录: 没有那个文件或目录
-bash-4.2$
为什么会这样?
因为之前我们在创建用户xzl的时候,没有给他创建家目录,所以才会导致显示成这个样子
如何恢复正常?
提示是没有那么文件或目录,那么我们就给他创建一个家目录。
创建方法
[root@linux7-128 ~]# mkdir /home/xzl #创建目录
[root@linux7-128 ~]# chown xzl:xzl /home/xzl #更改权限
继续测试
[root@linux7-128 ~]# su - xzl
上一次登录:二 5月 15 23:43:44 CST 2018pts/0 上
-bash-4.2$
还是有问题,因为它的家目录下缺少一些文件
-bash-4.2$ ls -la
总用量 0
drwxr-xr-x. 2 xzl xzl 6 8月 2 12:37 .
drwxr-xr-x. 6 root root 53 8月 2 12:37 ..
继续
系统是有个模板目录的 /etc/skel
,将他下面的模板文件拷贝到/home/xzl
下
[root@localhost home]# ls -la /etc/skel
总用量 24
drwxr-xr-x. 2 root root 59 4月 11 12:59 .
drwxr-xr-x. 77 root root 8192 8月 2 11:44 ..
-rw-r--r--. 1 root root 18 4月 11 08:53 .bash_logout
-rw-r--r--. 1 root root 193 4月 11 08:53 .bash_profile
-rw-r--r--. 1 root root 231 4月 11 08:53 .bashrc
[root@localhost home]# cp /etc/skel/.bash* /home/xzl #将skel目录下以.bash开头的文件复制到xzl家目录下
[root@localhost home]# chown -R xzl:xzl /home/xzl #再次更改家目录权限
再次登录xzl
[root@localhost home]# su - xzl
上一次登录:四 8月 2 12:38:11 CST 2018pts/0 上
[xzl@localhost ~]$ ll -a
总用量 16
drwxr-xr-x. 2 xzl xzl 79 8月 2 12:39 .
drwxr-xr-x. 6 root root 53 8月 2 12:37 ..
-rw-------. 1 xzl xzl 7 8月 2 12:38 .bash_history
-rw-r--r--. 1 xzl xzl 18 8月 2 12:39 .bash_logout
-rw-r--r--. 1 xzl xzl 193 8月 2 12:39 .bash_profile
-rw-r--r--. 1 xzl xzl 231 8月 2 12:39 .bashrc
此时终于显示正常了
3.8 sudo命令
sudo可以让普通用户临时以其他用户的身份去执行一个命令
# visudo
打开sudo的配置文件
实际上打开的是/etc/sudoers.tmp
,不建议使用vi编辑,此文件很重要。因为使用visudo的话可以检查文件的语法有没有错误,所以使用visudo更为安全。
- 在该位置可以添加指定命令(root权限)给普通用户使用,必须使用绝对路径并用分割。如图:
- 此时xzl用户就拥有了查看、重命名root用户下文件的权限:
从上面可以看出,切换到xzl之后,默认使用ls是无法查看目录的,但是使用sudo
后,只需要输入密码,就可以查看/root
下的目录
- 在指定命令前,添加NOPASSWD: 可以让用户使用sudo时不用输入密码。如图:
3.9 限制root远程登录
修改/etc/ssh/sshd_config配置文件
[root@localhost home]# vi /etc/ssh/sshd_config
然后搜索Root,将搜索出来的#PermitRootLogin yes,修改为:PermitRootLogin no
重启sshd服务:
[root@localhost home]# systemctl restart sshd.service
此时我们退出终端,再用xshell进行远程登录时就无法使用root用户登录了,但是使用普通用户还是可以正常登录的。
课堂笔记:
- chattr 命令:
i:设定文件不能被删除、改名、设定链接关系,同时不能写入或新增内容。i参数对于文件 系统的安全设置有很大帮助。
a:只能追加内容,不能修改原本的内容,
> 覆盖写入
>> 追加
在普通用户下使用passwd命令修改密码不能跟用户名,否则会被系统认为你在修改其他用户的密码而被拒绝,只能直接输入passwd然后回车来修改当前用户的密码
更改目录的权限时如果要想将目录下的所有子目录和文件的权限也同时改掉的话加-R选项
例如:
chmod -R 4755 /tmp
- S gid:
如果s的权限是在用户组,那么就是Set GID,简称SGID。SGID可以用在两个方面:
1 文件:如果SGID设置在二进制文件上,无论用户是谁,在执行该程序的时候,它的有效用户组将会变成该程序的用户组所有者;
2 目录:如果SGID是设置在A目录上,则在该A目录内所建立的文件或目录的用户组,将会是此A目录的用户组。
- SBit:
一般用于目录上,对文件的意义不大。SBit对目录的作用是:在具有SBit的目录下,用户若在该目录下具有w及x权限,则当用户在该目录下建立文件或目录时,只有文件拥有者与root才有权利删除。SBit可以理解为防删除位
- inode:
inode也会消耗硬盘空间,所以硬盘格式化的时候,操作系统自动将硬盘分成两个区域。一个是数据区,存放文件数据;另一个是inode区(inode table),存放inode所包含的信息
每个inode节点的大小,一般是128字节或256字节。inode节点的总数,在格式化时就给定,一般是每1KB或每2KB就设置一个inode
df -i 查看每个分区所使用的inode信息
当inode占满了导致无法写数据时的解决方法:
1.删除无用的文件 释放出inode
2.把文件挪走 然后重新格式化 格式化的时候 指定inode的比例 让它多分一些 再把文件挪回来
- find:
find /data/ -name "*.txt" #查找/data/目录以.txt结尾的文件;
find /data/ -name "[A-Z]*" #查找/data/目录以大写字母开头的文件;
-type b/d/c/p/l/f #查是块设备、目录、字符设备、管道、符号链接、普通文件
find /data/ -type d #查找/data/目录下的文件夹;
find /data/ -type l #查找/data/目录下的链接文件。
find /data/ -type f
find /data/ -size +1M #查文件大小大于1Mb的文件
find /data/ -perm 755 #查找/data/目录权限为755的文件或者目录;
find /data/ -perm +644 #文件权限在644以上;