笔记整理开始2018年4月3日17:27:07
介绍安全3A
Authentication:认证
Authorization: 授权
Accouting|Audition:审计
本章主要介绍的内容为认证和授权方面的内容
用户user
令牌token,identiry
用户通过账号和口令登录(认证)之后,系统会根据认证的账号类型
发放不同的类型令牌(授权)。
用户持令牌通过程序访问文件,文件会审核令牌类型判断是否具有访问
权限。
若在登录过程中做了权限变更,需重新登录之后才能领取新的令牌。
Linux用户:Username/UID
管理员:root,0
普通用户:xx,1-65535
系统用户:1-499,1-999(CentOS7)
对守护进程获取资源进行权限分配
登录用户:500+,1000+(CentOS7)
交互式登录
组group
Linux组:Groupname/GID
管理员组:root,0
普通组:
系统组:1-499,1-999(CentOS7)
普通组:500+,1000+(CentOS7)
安全上下文
Linux安全上下文
运行中的程序:进程(process)
以进程发起者的身份运行:
root:/bin/cat
hello:/bin/cat
进程能够访问资源的权限取决于进程的运行者的身份
组的类别:
用户的主要组(primary group)
用户必须属于一个且只有一个主组
组名同用户名,且仅包含一个用户,私有组(创建用户时自动创建)
用户的附加组(supplementary group)
一个用户可以属于零个或多个附加组
用户和组的配置文件
linux用户和组的主要配置文件:
/etc/passwd:用户及其属性信息(名称、UID、主组ID等)
/etc/group:组及其属性信息
/etc/shadow:用户密码及其相关属性
/etc/gshadow:组密码及其相关属性
passwd文件格式:
例:
root:x:0:0:root:/root:/bin/bash
hello:x:1000:1000:hello:/home/hello:/bin/bash
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
login name: 登录名(hello)
passwd: 密码(已移动到shadow文件,此地为x)
UID: 用户身份编号(1000,192…)
GID: 登录默认所在组编号,主组
GECOS: 用户全名或者注释
home directory:用户主目录(/home/hello)
shell: 用户默认使用shell
gshadow文件格式:
root:$6$vOrgaA175RBG06bP$A/WYhuPC6pFNEUBKm0xp5/0W8jwQZIGJJUQI5o
1aAQJtLRRW9J9h07ga5mcub4Tl7fL1MLdEH7ayTJsWCwMwN/::0:99999:7:::
systemd-network:!!:17617::::::
hello:$6$9t4/ZZJe$CKCzXlZJct4ryh9eAmr.ztf9SlnuuoQfFCtmEdKdbycAge
Wrv2xhAh0HF6KmRbKLSkcF70icUfysiycoOsbsB/:17623:0:99999:7:::
1.login name: 登录名
2.encrypted password: 加密的密码,类型、salt、密文
现在一般使用sha512加密
3.date of last password change:上一次修改密码的时间,已1970-1-1之后
的天数表示
计算方法:echo `date +%s`/3600/24 |bc
4.minimum password age: 密码的最小使用周期,即密码修改之后
最少多少天之后可以再次修改
0 表示随时可以更改
5.maximum password age: 密码的最长使用周期,修改密码之后多少
天之后必须再次修改密码(过期)
99999,永不过期
6.password warning period: 密过过期之前几天发出提示信息
7.password inactivity period: 过期之后多少天之内还可以登录
8.account expiration date: 从1970-1-1算起,多少天后账号失效
9.空 预留位置
密码加密
加密机制:
加密:明文–>密文
解密:密文–>明文
单向加密:哈希算法,原文不同,密文必不同
相同算法定长输出,获得密文不可逆推出原始数据
雪崩效应:初始条件的微小改变,引起结果的巨大改变
md5:message digest,128bits,听说已被破解
sha1:secure hash algorithm,160bits
sha224:224bits
sha256:
sha384:
sha512:
密码的复杂性策略
使用数字、大写字母、小写字母及特殊字符中至少3种
足够长
使用随机密码
定期更换,不要使用最近曾经使用过的密码
group文件格式:
root:x:0:
hello:x:1000:hello
kvm:x:36:qemu
group_name: 群组名称
password: 密码,不显示
GID: 群组ID
user_list: 以当前组为附加组的用户列表(分隔符为逗号)
gshadow文件格式:
root:::
hello:!!::hello
systemd-network:!::
group name: 群组名称
encrypted password:加密的密码
administrators: 组管理员列表,更改组密码和成员
members: 成员,以当前组为附加组的用户列表(分隔符为逗号)
文件操作命令:
vipw: vi+passwd
vigr: vi+passgr
pwck:
grpck:
用户管理命令:
useradd
usermod
usedel
组账号维护命令:
groupadd
groupmod
userdel
useradd:用户创建
useradd [options] login.name
-u 指定UID,如不指定,正常情况id按最大的id上递增
超过范围则按最小的数递增
-o 配合-u选项,不检查UID的唯一性
-g GID: 指明用户所属的基本组,可为组名,也可以为GID
-c ”COMMMENT”: 用户的注释信息
-d home_dir 以指定的路径(不存在)为家目录
-s shell: 指明用户的默认shell程序
可用列表在/etc/shells中
-G group1.. 为用户指明附加组,须存在
-N 不创建私有组做主组,使用users组做主组100
-r 创建系统用户
-m 创建家目录,用于系统用户
-M 不创建家目录,用户非系统用户
家目录不存在则登录会进入”/”
默认值设定:/etc/default/useradd文件中
显示或更改默认设置:
useradd -D 显示基本设置
[root@sentos7 ~]#useradd -D
GROUP=100 -N选项,如果不创建同名主组,则属于这个组
HOME=/home 家目录位置
INACTIVE=-1 过期之后还可以登录的天数,-1表示不会锁死
EXPIRE= 账号有效期,默认99999
SHELL=/bin/bash 默认使用的shell类型
SKEL=/etc/skel 创建家目录的源文件地址
CREATE_MAIL_SPOOL=yes 是否创建mail
useradd -D -s /bin/csh 修改默认shell类型
useradd -D -b /dir 修改默认家目录
usreadd -D -g group -N选项之后默认的主组
练习:
1.创建用户gentoo,附加组为bin和root,默认shell为/bin/csh,注视信息
“Gentoo Distribution”
useradd -G bin,root -s /bin/csh -c “Gentoo Distrition” gentoo
2.创建下面的用户、组和组成员关系
名字为webs的组
用户名nginx使用webs作为附属组
用户varnish,也是用webs作为附加组
用户mysql,不可交互式登录系统,也不是webs的成员,nginx,
varnish,mysql密码都是magedu
grpadd webs
useradd -G webs nginx
useradd -G webs varnish
useradd -r mysql
echo magedu |passwd –stdin nginx
echo magedu |passwd –stdin varnish
echo magedu |passwd –stdin mysql
新建用户的相关文件和命令
/etc/default/useradd 新建用户默认信息
/etc/skel/ 家目录复制地址
/etc/login.defs 添加用户配置信息
/var/spool/mail 邮箱路径
newusers passwd格式文件: 批量创建用户
chpasswd 批量修改用户口令
如: [root@sentos7 ~]#cat f2
newmike:maduge
[root@sentos7 ~]#cat f2 |chpasswd
usermod:用户属性修改
usermod [options] login
-u UID 新UID
-g GID或者group 新主组
-G Group1[,Group].. 新附加组,原来的附加组将会被覆盖
-aG 若保留原有,则要同时使用-a 选项
-s shell 新的默认使用shell
-c ’comment‘: 新的注释信息
-d home 修改家目录,新的家目录不会自动创建
-dm home 创建新家目录并移动原家数据
-l login.name 新的名字,改名之后家目录,邮箱不变
-L: lock指定用户,在/etc/shadow密码栏增加!
-U: unlock指定用户,将/etc/shadow密码栏的!拿掉
-e yyyy-MM-DD:指明用户账号过期时间
-f INACTIVE: 设定非活动期限,宽限期
-p, –password PASSWORD
use encrypted password for the new password
用加密之后的明文设置密码
例:
usermod -u 7888 hello
修改hello的uid为7888
usermod -g root hello
修改hello的主组为root
usermod -aG lily hello
将hello添加到附加组lily
userdel:删除用户:
userdel [option]… login.name
-r: 删除用户家目录
id:查看用户的ID信息:
id [option]…[USER]
-u: 显示UID
-g: 显示GID
-G: 显示用户所属附加组的ID
-n: 显示名称,需配合ugG使用
su:switch user切换用户或以其他用户身份执行命令
su [option]..[-] [user[args..]]
切换用户的方式:
su username 非登录式切换,不会读取目标用户的配置文件,不改变当前
工作目录
su – username 登录式切换,会不去目标用户的配置文件,切换至家目录,
完全切换
root su至其他用户无需密码,非root用户切换时需要密码
退出用exit,ctrl+d,不要嵌套su
su [-] username -c ‘cmd’ 换个身份执行命令,执行完之后退回
su – hello -c “cat /etc/shadow”
su -l –login 相当于su – username
passwd:设置密码:
passwd [options] username: 修改指定用户的密码
常用选项:
-d 删除指定用户的密码
-l lock锁定指定用户,加!
-u unlock,解锁指定用户,去掉!
-e 强制用户下次登录修改密码
-f 强制操作
-n mindays: 指定最短使用期限
-x maxdays: 最大使用期限
-w warndays: 提前多少天开始警告
-i inactivedays:过期还可以使用的天数
–stdin:从标准输入接收用户密码
例:
echo helloyou |passwd –stdin -n 3 -i 5 hello
修改hello的密码 最小使用天数3天,过期之后锁定时间5天
echo redhat |passwd –stdin hello &> /dev/null
修改hello的密码为redhat 影藏标准输出和标准错误
chage:修改用户密码策略
chage [option]…login.name
-d lastdays 还可以继续使用的天数
-E –expire.date days 指定失效时间
-I –inactive days 过期之后锁定的时间
-m –mindays days 最小使用期限
-M –maxdays days 最长使用时间
-W –warndays days 提醒时间
例:
chage -d 0 tom passwd -e tom
设置tom账号下一次登录修改密码
chage -m 0 -M 9999 -W 5 -I 7 tom
设置tom账号的密码最小使用时间0,最大9999,提醒5 冻结7
chage -E 2200-09-16 hello
usermod -e
设置tom账号失效时间2200-9-16
其他相关命令:
chfn:修改用户注释信息,
usermod -c类似
[root@sentos7 ~]#chfn hello
Changing finger information for hello.
-f Name [hello]:
-o Office [hahah]: 原office为hahah,冒号后输入新的
-p Office Phone [12345]: 不修改可以直接回车
-h Home Phone [54321]:
Finger information not changed.
例:
chfn -f hello -h 76521 hello
修改hello的名为hello,homephone为76521
chsh:(-s)修改指定shell
chsh -l 列出当前所有shell, cat /etc/shells
chsh -s /bin/bash hello
修改hello默认shell为csh
finger:查看当前系统登录的用户信息,类似who
finger hello
查看用户hello信息(name,bin,lastlogin ip)
groupadd:创建组
groupadd [option]…group.name
-g GID 指明GID号,[DID_MIN,GID-max]
-r: 创建系统组
CentOS6:<500
CentOS7:<1000
具体规则查看/etc/login.defs
groupmod:组属性修改
groupadd [option]…group
-n group.name 修改组名
-g GID: 新的GID
groupdel:组删除
groupdel GROUP
gpasswd:更改组密码
gpasswd [option] group
gpasswd notbook 修改密码
不支持标准输入
-a user 将user添加至指定组中
-d user 从指定组中移除用户user
-A user1,user2,.. 设置有管理权限的用户列表
newgrp:临时切换主组
newgrp hello
临时切换主组为hello
exit或者ctrl+d退出
如果用户本不属于此组,则需要组密码
groupmems :更改组成员
groupmems [options] [action]
-g,–group groupname root only
-a,–add username 指定用户加入组
-d,–delete username 指定用户从组中删除
-p,–purge 删除组所有成员
-l,–list 显示组成员列表
例:
groupmems -g hello -a lily
usermod -aG hello lily
gpasswd -a hello lily
将lily添加到组hello的三种写法
groupmems -g hello -d mady
将lily从hello中删除
groupmems -g hello -p
清除hello附加组所有成员
groups:
groups hello
查看hello的所有组,主组+附加组
其他命令:
pwunconv passwd里面显示密码,shadow就不存在了
pwconv 将passwd中密码放入shadow
getent passwd 查看passwd
getent passwd hello 只看hello的passwd
getent passwd |shadow | group |gshadow
文件权限:
文件的权限主要针对三类对象进行定义:
owner:属主,u
group:属组,g
othe:其他,o
每个文件针对每类访问者都定义了三种权限
r: Readable 读,查看权限,可使用文件查看类工具获取其内容
w: Writealbe 写,修改权限,可修改其内容
x: eXcutable 执行权限,可以把此文件提请内核启动为一个进程
ps:
普通用户不能改文件所有者
所有者修改文件所属组,要求自己必须在相同组才能改
对于root账号,rw权限不受控制,x权限受影响
ugo只要有一个x,root就可以执行此文件 ,x全为-,则无法执行
对于普通用户,没有r只有w,不能打开,但是能有>,>>写入
可执行文件,无需r只需x即可执行,r全是有时会需要,比如file
删除文件需要目录的w权限
目录:
r:可以使用ls查看此目录中文件列表
w:可在此目录中创建文件,也可删除此目录中的文件
x:可以使用ls -l 查看此目录中的文件列表,可以cd进入此目录
X:只给目录x权限,不给文件x权限
ps:
没有r权限,有x权限,可以进入目录,无法查看文件列表,可以查看
文件内容
有r权限,没有x权限,不能进入目录,不能目录里面的详细属性,也
不能查看文件内容
有w权限,没有x权限,无法删除里面文件
有w权限,没有r权限,可以删除里面文件
要执行目录下的文件,必须对目录具有x权限
用户获取文件(目录)权限:
所有者—所属组–other,一旦匹配,不看其他
如果是所有者,只看—-,不看后面
如是是所属组,直接所属组权限生效,不看other权限
chown:修改文件的属主
chown [option]..[owner][:[group]] file
chown hello f1 修改文件f1的属主为hello
chown hello:hello f1 修改文件f1的属主和组为root,hello
(:group)只修改属组,不建议使用
-R 递归,针对目录
chown –reference=f1 f2 修改f2的owner:group和f1相同
chgrp:修改文件所属组
chgrp [option] group file
chgrp lily f1 修改文件f1所属主为lily
chgrp -R 递归,针对目录
chgrp –reference=f1 f2 修改f2的group和f1相同
文件权限操作:
drwxr-xr-x. 2 root root 6 Mar 28 03:47 Desktop
drwxr-xr-x. 2 root root 6 Mar 28 03:47 Documents
r:4
w:2
x:1
2-4位,owner权限
5-7位,group权限
8-10位,other权限
八进制数表示: Octal-mode
— 000 0
–x 001 1
-w- 010 2
-wx 011 3
r– 100 4
r-x 101 5
rw- 110 6
rwx 111 7
如:
rwxr-xr-x 755
rw——- 600
修改文件权限:
chmod [option]..octal-mode file
-R 递归
chmod 644 f1 修改文件f1权限为644
chmod -R 777 dr1 递归修改dr1下所有文件权限为777
chmod [option]..mode,[mode]…file
chmod u=rw,g=rw,o=r f3
修改文件f3的权限为:rw-rw-r–
修改一类用户的所有权限:
u= g= o= ug= a=
u=,g=,o= 清空
修改一类用户某位或某些权限
u+r,g-rw,o+r,o-w…a+r,a-x….
chmod [option] –reference=f1 f2 f3
参考f1设置f2,f3的所有权限
例:
chmod u+wx,g-r,o=rx file
修改文件file权限,u+wx g-r o=rx
chmod -R g+rwX /testdir
递归修改目录testdir权限,g+rwX
新建文件和目录的默认权限:
umask指:可以用来保留新创建文件权限
新建file权限:666-umask指
如果所得结果某位存在执行(奇数)权限,则其权限+1
新建dir权限:777-umask
非特权用户umask是002
root账号的umask是022
umask 查看umask值
umask -S 模式方式显示
umask 2222 设置umask值为222
umask u=rwx,g=r,o= 模式方式修改umask
umask -p 输出可别调用,多了个名字。。
如:
umask -p >>.bashrc
umask文件地址:
/etc/bashrc 全局
~/.bashrc 用户设置
练习:
1.当用户docker对/testdir目录无执行权限是,意味着无法做哪些操作
无法进入目录
可以用ls查看列表,但是无法查看文件属性类型
就算对目录中的文件有rw权限,也无法查看和写入>>也不行
2.当用户mongodb对/testdir目录无读权限时,意味着无法做哪些操作
可以进入目录,无法查看文件列表,可以查看ll file详细信息
可以执行目录内程序,cat file可以查看文件内容
如果对文件有w权限,还可以通过>>写入文件
3.当用户redis对/testdir目录无写权限时,该目录下的只读文件file1是否
可以修改和删除
不能
4.当用户zabbix对/testdir具有写执行权限时,该目录下的制度文件file1是否
可修改和删除?
可以删除,不能修改
5.复制/etc/fstab文件到/var/tmp下,设置文件所有者为tomcat读写权限,所属
组为apps组有读写权限,其他人无权限
cp /etc/fstab /var/emp/
chmod 650 /var/tem/fstab
6.误删除了用户git的家目录,请重建并回复该用户家目录及相应的权限属性
cp -r /etc/skel/ /home/git
chown -R git:git /home/git
linux文件系统上的特殊权限:
SUID,SGID,Sticky
三种常用权限:r,w,x user,group,other
安全上下文
前提:进程有属主和属组:文件有属主和属组
1.任何一个可执行程序文件能不能启动为进程,取决于发起者对程序文件是否
拥有执行权限
2.启动为进程之后,起进程的属主为发起者,进程的属组为发起者所属的组
3.进程访问文件的权限,取决于进程的发起者
a.进程的发起者,同文件的属主:则应用文件属主权限
b.进程的发起者,属于文件属组,则应用文件文件属组权限
c.应用文件“其他”权限
可执行文件上SUID权限:
任何一个可执行程序文件能不能启动为进程:取决于发起者对程序文件是否
拥有执行权限
启动为进程之后,其进程的属主为原程序文件的属主
SUID只对二进制可执行程序有效
SUID设置在目录上无意义
权限设定:
chmod u+s file
chmod u-s file
可执行文件上SGID
任何一个可执行程序文件能不能启动为进程:取决于发起者对程序文件是否
拥有执行权限
启动为进程之后,其进程的属组为原程序文件的属组
权限设定:
chmod g+s file
chmod g-s file
目录上的SGID权限:
默认情况下,用户创建文件时,其属组为此用户所属的主组
一旦某目录被设定了SGID,则对此目录有写权限的用户在此目录中创建的文件
所属的组为此目录的属组
通常用于创建一个协作目录
权限设定:
chmod g+s DIR
chmod g-s DIR
Sticky 位
具有写权限的目录通常用户可以删除该目录中的任何文件,无论该文件的权限
或拥有权
在目录设置Sticky位,只有文件的所有者或root可以删除该文件
sticky设置在文件上无意义
权限设定:
chmod o+t DIR…
chmod o-t DIR…
特殊权限数字法:
SUID: 4—
GUID: 2—
sticky 1—
权限位映射:
SUID: user,占据属主的执行权限位:
s:属主拥有x权限
S:属主没有x权限
SGID: group,占据属组的执行权限位
s: group拥有执行权限位
S: group没有x权限
Sticky:other,占据other的执行权限位
t: other拥有x权限
T: other没有x权限
设定文件特定属性:
chattr +i 不能删除,改名,更改
-i 取消
chatr +a 只能追加内容
-a 取消
chattr +A 锁定atime
lsattr 显示特定属性
-R 可以递归
例
chattr +i /data/11 给/data/11增加锁定,不能删除更改改名
chattr +a /data/11 给/data/11增加锁定,只能追加内容
i存在的情况,a存在,也无法追加数据
chattr -i -a /data/11 取消data/11的特定权限
访问控制列表
ACL:Access Control List,实现灵活的权限管理
除了文件的所有者,所属组和其他人,可以对更多的用户设置权限
CentOS7 默认创建的xfs和ext4文件系统具有ACL功能
CentOS7 之前的版本,默认手工创建的ext4文件系统无ACL功能,需手动增加
(安装系统的时候创建的分区默认安装了acl,后续分区默认不带)
tune2fs -o acl /dev/sdb1
mount -o acl /dev/sdb1 /mnt/test
如添加了ACL权限,权限后面的.就会变成+
-rw-r–r–. 1 root root 8127 Apr 6 21:59 f16
未添加ACL
drwxrwxrwx+ 2 root root 49 Apr 7 01:55 23
已添加ACL
ACL生效顺序:
所有者,自定义用户,自定义组,其他人
PS:
用户所具有的组权限,为所有的组权限叠加取最大权限
[root@sentos7 /data]#getfacl 234
# file: 234
# owner: root
# group: root
# flags: -s- 显示特殊权限
user::r-x 所有者owner,
user:hello:rwx 自定义用户user
group::r-x
group:hello:rwx
group:lily:rwx 自定义组
mask::rwx 组最高权限
other::-wx others
为多用户或者组的文件和目录赋予访问权限rwx
getfacl f1 dr1
查看f1,目录dr1的acl权限
setfacl [-bkndRLP] { -m|-M|-x|-X … } file …
setfacl -m, –modify=acl u:hello:rwx 35 23
修改文件35,目录23的acl权限,使user用户hello具有rwx权限
setfacl -Rm g:lily:rwX 23
递归修改目录23的acl权限,使lily组用户具有rwX权限
setfacl -M file.acl f5 234
按照文件file.acl中的权限设置文件f5 目录234的权限
[root@sentos7 /data]#cat file.acl
u:hello:rwx
g:lily:rwx
g:hello:rwx
setfacl -m d:u:wang:rx dir
-d, –default operations apply to the default ACL
setfacl -d -m u:hello:rwx dir1
不能写成-m -d
设置目录dir的默认acl权限,给用户wang 附件rx权限,
默认对于目录下新建的文件或者目录默认附加相同权限,
对于现有文件,权限无变化
setfacl -x u:hello file|dir
清空hello用户对于file|dir的acl权限
setfacl -X file1.acl file dir
按照文件文件file1.acl删除文件file 目录dir的权限
setfacl -RX file3 dir1 如需递归,-R应在X的前面
setfacl -k dir
删除默认(default)ACL权限
setfacl -b file1
清除所有acl权限
getfacl file1 |setfacl –set-file=- file2
复制file1的acl权限给file2
–set选项会把原有的ACL项都删除,用新的替代,需要注意的是一定要
包含UGO的设置,不能像-m一样只是添加ACL就可以
示例:
setfacl –set u::rw,u:wang:rw,g::r,o::- file1
cp -p/-a f1 f2
复制文件用-p选项可以保留源acl权限
mask值:
ACL文件上的group权限是mask值(自定义用户,自定义组,用户组的最大权限)
而非传统的组权限,相当于限高
getfacl可以看到特殊权限:flags
通过ACL赋予目录默认x权限,目录内文件也不会继承x权限
base ACL不能删除
mask只影响除所有者和other之外的人和组的最大权限
mask需要与用户的权限进行与运算后,才能变成有限的权限
用户或组的设置必须存在于mask的权限设定范围内才会生效
setfacl -m mask::rx file1
设置文件file1的mask值为rx
备份和恢复acl
主要的的文件操作命令cp和mv都支持acl,只是cp命令需要加上-p选项
但是tar等常见的备份工具是不会保留目录和文件的acl信息
示例:
getfacl -R /tmp/dir1 >acl.txt
setfacl -R -b /tmp/dir1
setfacl -R –set-file=acl.txt /tmp/dir1
setfacl –restore acl.txt
getfacl -R /tmp/dir1
练习:
1.在/testdir/dir里创建的新文件自动属于webs组,组apps的成员如:
tomcat能对这些新文件有读写权限,组dbs的成员如:mysql只能对新文件有读
权限,其他用户(不属于webs,apps,dbs)不能访问这个文件夹
chgrp webs /testdir/dir
chmod g+s /testdir/dir
chmod o= /testdir/dir
setfacl -m d:g:apps:rw,d:g:dbs:r /tsetdir/dir
2.备份/testdir/dir里面所有文件的acl权限到/root/acl.txt中,清除
/testdir/dir中所有acl权限,最后还原acl权限:
getfacl -R /testdir/dir >/root/acl.txt
setfacl -R -b /testdir/dir
setfacl -R –set-file=/root/acl.txt
getfacl -R /testdir/dir
笔记整理完成时间:2018年4月7日11:42:24
本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/95200