文章目录
1 Linux的安全性
- 用户权限根据用户UID来跟踪
- 登录系统用的是用户名
- 登录名会关联一个密码
- 管理用户账户用的是特定的文件和工具
1.1 /etc/passwd文件
$cat /etc/passwd| head -3
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
各字段之间的含义
root: x: 0: 0: root: /root: /bin/bash
登录用户名 用户密码 用户账户的UID 用户账户的GID 用户账户的文本描述 用户HOME目录位置 用户默认的shell
- root账户的UID为0
- 系统账户的UID预留500以下
- /etc/passwd里的密码都被设成了x,那么用户的密码保存在/etc/shadow文件中
1.2 /etc/shadow文件
- 只有root用户才可以访问
- shadow是影子的意思,又称为影子文件
# cat /etc/shadow
root:$6$1S68IhLLmKxroyp$1Tsozb2s9GyI7c63ojPrUhP9g9CR4Pq68Dd31IvXXsv6MR7VrYIS9EZ.CmEMVkGmQKv2aHnMTQG4pQjRpJkUS.:18026:0:99999:7:::
bin:*:17110:0:99999:7:::
daemon:*:17110:0:99999:7:::
adm:!*:17110:0:99999:7:::
lp:!*:17110:0:99999:7:::
sync:!*:17110:0:99999:7:::
shutdown:!*:17110:0:99999:7::
共9个字段
- 与/etc/passwd里对应的用户名一致的登录名
- 加密后的密码
- 自上次修改密码后过去的天数(从1970年1月1日开始算起)
- 多少天后才能更改密码
- 多少天后必须更改密码
- 密码过期前多少天提醒用户更改密码(默认7天)
- 密码过期后多少天禁用用户账户
- 用户账户被禁用的日期(自1970年到当天来计算)
- 预留字段给将来使用
重点说下加密密码:
密码采用的是SHA512散列加密算法,原来采用的是MD5或者DES算法
忘记密码怎么办?
1、忘记普通用户的密码,通过root来改变,它可以重新指定新的密码,不需要你原来的密码,使用passwd命令就可以
2、忘记root密码,重启进入单用户模式,系统会提供root权限的bash接口,可以用passwd来更改密码;也可以通过挂载根目录,修改 /etc/shadow,将账户的 root 密码清空的方法,此方式可使用 root 无法密码即可登陆,建议登陆后使用 passwd 命令配置 root 密码。
-所有伪用户的密码都是 “!!” 或 “*”,代表没有密码是不能登录的。当然,新创建的用户如果不设定密码,那么它的密码项也是 “!!”,代表这个用户没有密码,不能登录
1.3 添加用户
1.3.1 默认值
- useradd命令使用系统的默认值以及命令行参数来设置用户账户。系统默认值设置在/etc/default/useradd文件中
查看默认值 - 通过/usr/sbin/useradd -D 命令查看默认值
# /usr/sbin/useradd -D
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes
- 新用户默认添加到GID位100的公共组
- 用户的HOME目录存在/home中
- 新用户的密码在过期后不会被禁用
- 新用户没有设置过期日期
- 新用户的默认shell是bash shell
- 系统会将/etc/skel目录下的内容复制到HOME目录下
- 系统在mail目录下创建用于接收邮件的文件
/etc/skel文件是一个用户HOME模板,里面存放了标准启动文件,当执行useradd命令时,会把/etc/skel
文件下的文件复制到HOME目录下,用户的权限都使用/etc/default/useradd里的默认值
# useradd dj
# cat /etc/passwd| grep dj
dj:x:1027:1027::/home/dj:/bin/bash
# cat /etc/shadow| grep dj
dj:!!:18371:0:90:7:::
1.3.2 新建的同时修改默认值
创建新用户的同时改变默认值。可以使用命令行参数
1.4 修改用户
用户包含哪些信息,那么提供了几种工具来修改用户的信息
- usermod 修改用户账户字段
- passwd 修改已有用户密码
- chpasswd 从文件中读取登录名密码时,更新密码
- chage 修改密码的过期日期
- chfn 修改用户账户的备注信息
- chsh 修改用户账户默认的shell
1、usermod命令
修改用户这边的参数 和 新增用户同时修改默认值的参数基本一样
比较强大,可以修改/etc/passwd里大部分字段
用户名:用户密码:UID:GID :文本描述:HOME目录:默认shell
-l -p -g -c -d -s
除此之外,还有
-L 锁定用户
-U 解锁用户
2、passwd和chpasswd
新建用户、设置密码、查看/etc/shadow文件、删除用户
# useradd dj
# cat /etc/passwd| grep dj
dj:x:1027:1027::/home/dj:/bin/bash
# cat /etc/shadow | grep dj
dj:!!:18371:0:90:7:::
# passwd dj
Changing password for user dj.
New password:
BAD PASSWORD: it is too simplistic/systematic
BAD PASSWORD: is too simple
Retype new password:
BAD PASSWORD: The password is shorter than 8 characters
Retype new password:
Sorry, passwords do not match.
New password:
BAD PASSWORD: The password fails the dictionary check - it is too simplistic/systematic
Retype new password:
passwd: all authentication tokens updated successfully.
# cat /etc/shadow | grep dj
dj:$6$AYknVFv5$E.lTDKXE1h8avTevGomkqH7Q6JTzUmkXEyrEVJjZ.OYeHoVkJYZVtEzDDTAnX4b.HsmfvORcO8vKXTFAX2XNz/:18371:0:90:7:::
、# userdel -r dj
# cat /etc/shadow | grep dj
使用chpasswd可以批量更改密码
chpasswd命令能从
标准输入自动读取登录名和密码对(由冒号分割)列表,给密码加密,然后为用户账户设置。你
也可以用重定向命令来将含有userid:passwd对的文件重定向给该命令。
# chpasswd < users.txt
#
3、chsh、chfn、chage
chage用来管理账户的有效期
1.5 删除用户
- userdel只删除 /etc/passwd下的用户信息,不删除系统中属于该账户的任何文件
- 使用-r参数可以删除用户的HOME目录和邮件目录
# userdel dj
[root@bch300up03 ~]# cd /home/dj //删除用户后,用户所在的HOME目录以及文件还在,可以使用-r命令删除,谨慎使用
[root@bch300up03 /home/dj]# ll
total 0
-rw-r--r-- 1 1027 1027 0 Apr 19 11:12 test.txt
# cat /etc/passwd| grep dj //删除用户后,/etc/passwd文件下的用户信息已经删除
2 使用Linux组
组信息存在系统文件/etc/group文件中
[root@dmtest10 ~]# cat /etc/group
root:x:0:
bin:x:1:
daemon:x:2:
sys:x:3:
adm:x:4:
tty:x:5:
disk:x:6:
组名:组密码:GID:属于该组的用户列表
注意:上面例子组里面没有用户列表,并不代表没有组成员,当用户在/etc/passwd文件中指定某个用户的某个组作为默认组时,那么此用户不会存在/etc/group列表中
2.1 创建新组
1、使用groupadd命令创建新组
[root@dmtest10 ~]# groupadd newuser
[root@dmtest10 ~]# cat /etc/group | grep newuser
newuser:x:1005:
创建的新组是没有用户的,groupadd没有提供将用户添加到组中的选项,可以使用usermod命令
2、添加一个用户到项目组里
[root@dmtest10 ~]# usermod -G newuser new_user1
[root@dmtest10 ~]# cat /etc/group | grep newuser
newuser:x:1005:new_user1
其中组newuser里显示了一个用户列表new_user1,但是此组还有一个用户是newuser,因用户newuser的默认组是newuser,所以用户newuser就不会存在组newuser列表中去了
3、替换用户的默认组
-G是把用户添加到组里,-g会改变添加用户的默认组,把加入的组当成默认组
[root@dmtest10 ~]# useradd new_user3 //添加用户new_user3
[root@dmtest10 ~]# cat /etc/passwd | grep new_user3 //查看用户的默认组是new_user3
new_user3:x:1007:1008::/home/new_user3:/bin/bash
[root@dmtest10 ~]# cat /etc/group | grep 1008
new_user3:x:1008:
[root@dmtest10 ~]# usermod -g newuser new_user3 //把new_user3添加到组newuser里
[root@dmtest10 ~]# cat /etc/passwd| grep new_user3 //new_user3的默认组已经改成了new_user
new_user3:x:1007:1005::/home/new_user3:/bin/bash
[root@dmtest10 ~]# cat /etc/group | grep newuser //因为new_user3的默认组是newuser,所以用户new_user3不在组列表中
newuser:x:1005:new_user1
2.2 修改组
groupmod
-g 修改组的GID
-n 修改组名
比如:
groupmod -n newuser newuser_2
2.3 删除组
groupdel
[root@dmtest10 ~]# cat /etc/group| grep grouptest
grouptest:x:1009:
[root@dmtest10 ~]# groupdel grouptest
[root@dmtest10 ~]# cat /etc/group| grep grouptest
3 理解文件权限
3.1 使用文件权限符
ls -l
[oss4@dmtest10 ~]$ ls -l
total 24
drwxr-x--- 9 oss4 oss4 4096 Mar 25 10:24 apache-tomcat-8.5.42
drwxr-x--- 3 oss4 oss4 4096 Apr 20 14:34 backup
drwxr-x--- 7 oss4 oss4 4096 Dec 23 14:28 dm-node
drwxr-x--- 7 oss4 oss4 4096 Mar 24 16:17 dms-oss-analysis
drwxr-x--- 7 oss4 oss4 4096 Oct 6 2018 jdk1.8.0_191
drwxr-x--- 2 oss4 oss4 4096 Apr 21 07:06 log
-rw-r----- 1 oss4 oss4 0 Apr 21 10:45 test
第一列是对象类型
-文件
d目录
l链接
c字符设备
b块设备
n网络设备
三组编码,每组有3种访问权限
r可读
w可写
x可执行
-无权限
第一组:属主权限
第二组:属组权限
第三组:其他用户权限
3.2 默认文件权限
文件和目录有默认的权限,默认的权限来源于umask
[oss4@dmtest10 ~]$ umask
0027
0027其中第一位0代表粘着位,后面027代表umask的八进制,具体怎么计算不做详解
4 改变权限
4.1 改变权限
chmod 可以改变文件和目录的权限
chmod 760 newfile
[ugoa…][[±=][rwxXstugo…]
4.2 改变所属关系
chown
chown -R 递归改变子目录和文件的所属关心
5 共享文件
[root@dmtest10 ~]# groupadd grouptest
[root@dmtest10 ~]# mkdir dirtest
[root@dmtest10 ~]# ll
drwxr-x--- 2 root root 4096 Apr 21 21:01 dirtest
[root@dmtest10 ~]# chgrp grouptest dirtest/
[root@dmtest10 ~]# ll
drwxr-x--- 2 root grouptest 4096 Apr 21 21:01 dirtest
[root@dmtest10 ~]# chmod g+s dirtest
[root@dmtest10 ~]# ll
total 36892
drwxr-s--- 2 root grouptest 4096 Apr 21 21:01 dirtest
[root@dmtest10 ~]# cd dirtest
[root@dmtest10 ~/dirtest]# touch test
[root@dmtest10 ~/dirtest]# ll
total 0
-rw-r----- 1 root grouptest 0 Apr 21 21:03 test