本章内容
解释Linux的安全模型
解释用户帐号和组群帐号的目的
用户和组管理命令
理解并设置文件权限
默认权限
特殊权限
ACL
安全3A
资源分派:
Authentication:认证
Authorization:授权
Accouting|Audition:审计
用户user
令牌token,identity
Linux用户:Username/UID
管理员:root, 0
普通用户:1-65535
系统用户:1-499, 1-999 (CentOS7)
对守护进程获取资源进行权限分配
登录用户:500+, 1000+(CentOS7)
交互式登录
用户一登录,系统就会发一个令牌token,
Linux中建一个帐号,会自动建一个同名的组,称为私有组
组group
Linux组:Groupname/GID
管理员组:root, 0
普通组:
系统组:1-499, 1-999(CENTOS7)
普通组:500+, 1000+(CENTOS7)
组的类别
Linux组的类别
用户的主要组(primary group)
用户必须属于一个且只有一个主组
组名同用户名,且仅包含一个用户,私有组
用户的附加组(supplementary group)
一个用户可以属于零个或多个辅助组
qjy g1 read g2 wrie g3 read 累加权限 read write
qjy,mage g1
Linux用户和组的主要配置文件
/etc/passwd:用户及其属性信息(名称、UID、主组ID等)
/etc/group:组及其属性信息
/etc/shadow:用户密码及其相关属性
/etc/gshadow:组密码及其相关属性
pwunconv 将口令从/etc/shadow转换回/etc/passwd里显示,不太安全,因谁都能看
修改passwd文件,可更改用户的UID,把root的UID改成1000,qjy改成0,则qjy是#,root是$
第1项:login name:登录用名(qjy)
第2项:passwd:密码(X)
第3项:UID:用户身份编号(1000)
第4项:GID:登录默认所在组编号(1000)
第5项:GECOS:用户全名或注释
例如qjy用户,chfn qjy可修改
finger qjy能看得更直观一些
第6项:home directory:用户主目录(/home/qjy)
若修改后家目录不存在,则登录后会自动进入/目录
但用户的家目录里有一些配置文件,修改后需拷到新目录里
新建帐号的时候,系统会自动从ls /etc/skel -a目录复制新配置文件到家目录
cp -r /etc/skel/.[^.]* /data/qjy/
第7项:shell:用户默认使用shell(/bin/bash)
默认shell可通过chsh -s /bin/csh qjy来修改
cat /etc/shells
注意有一个shell叫/sbin/nologin,可使一个帐号无法登陆、切换,很多服务都用的是/sbin/nologin,以防黑客利用,在创建帐号的时候即可直接指定
/etc/shadow
record:行 field:列
RHEL 5:$1指md5
Centos6和7:$6 sha512
$6$ Qb/LXy1YnfBRf59T:第二个$号是盐salt
加密算法可以自己指定
shadow文件格式
登录用名
用户密码:一般用sha512加密
从1970年1月1日起到密码最近一次被更改的时间
密码再过几天可以被变更(0表示随时可被变更)
密码再过几天必须被变更(99999表示永不过期)
密码过期前几天系统提醒用户(默认为一周)
密码过期几天后帐号会被锁定
从1970年1月1日算起,多少天后帐号失效
双(单)!是锁定的意思
加锁和解锁命令
usermod -L qjy 加锁
usermod -U qjy 解锁,解一个!,CentOS 6之后就不允许解锁后空口令了,必需要加一个密码
passwd -e qjy 使qjy帐号的密码立即过期,需立即改口令
chage -d 0 qjy 同样效果
chage -l qjy 查看用户的密码情况
chage qjy 更改用户密码各有效期
cat /etc/login.defs
更改密码的各默认有效期,邮件目录,UID、GID的起止数(500/1000,60000),默认的加密算法等
cat /etc/default/useradd 可修改创建帐号时的默认参数
Windows:net accounts命令
密码加密
加密机制:
加密:明文–> 密文
解密:密文–> 明文
单向加密:哈希算法,原文不同,密文必不同
相同算法定长输出,获得密文不可逆推出原始数据
雪崩效应:初始条件的微小改变,引起结果的巨大改变
md5: message digest, 128bits
sha1: secure hash algorithm, 160bits
sha224: 224bits
sha256: 256bits
sha384: 384bits
sha512: 512bits
更改加密算法 authconfig –passalgo=sha256 –update
实际改的是这个文件:/etc/login.defs
密码的复杂性策略
openssl rand -base64 12 输出12位随机字符,可用随机字符做密码
useradd -N qjy 创建新帐号默认属于users组(GID=100)
cat /etc/group
group文件格式
组名:就是群组名称
组口令:用户可以自己把自己加入某个组里,前提是知道组的密码
组GID:就是群组的 ID
组成员:以当前组为附加组的用户列表(分隔符为逗号)
/etc/gshdow文件格式
群组名称:就是群组名称
群组密码:
组管理员列表:组管理员的列表,更改组密码和成员
以当前组为附加组的用户列表 (分隔符为逗号),gshadow和group的附加组用户列表应一致
给组加口令:gpasswd
newgrp 临时改变用户主组
vipw 相当于vi /etc/passwd,有语法检查功能
vigr 相当于vi /etc/group,有语法检查功能
pwck 对/etc/passwd进行语法检查
grpck 对/etc/group进行语法检查
getent passwd|shadow|group|gshadow [qjy] 快捷查看这几个文件(里的某用户)的信息
用户和组管理命令
用户管理命令
useradd
usermod
userdel
组帐号维护命令
groupadd
groupmod
groupdel
用户创建:useradd
useradd [options] LOGIN
-u UID
-o 配合-u 选项,不检查UID的唯一性
-g GID:指明用户所属基本组,可为组名,也可以GID
-c “COMMENT”:用户的注释信息
-d HOME_DIR: 以指定的路径(不存在)为家目录
-s SHELL: 指明用户的默认shell程序
可用列表在/etc/shells文件中
-G GROUP1[,GROUP2,…]:为用户指明附加组,组须事先存在
-N 不创建私用组做主组,使用users组做主组
-r: 创建系统用户 CentOS 6: ID<500,CentOS 7: ID<1000
-m 创建家目录,用于系统用户
-M 不创建家目录,用于非系统用户
useradd -s /sbin/nologin -r -m openstack
以下命令查看了httpd服务的rpm安装包中的脚本,生产中手工创建用户基本也是这么写的
[root@centos7 Packages]#rpm -qp –scripts /run/media/root/CentOS\ 7\ x86_64/Packages/httpd-2.4.6-67.el7.centos.x86_64.rpm
……
/usr/sbin/groupadd -g 48 -r apache 2> /dev/null || :
/usr/sbin/useradd -c “Apache” -u 48 -g apache \
-s /sbin/nologin -r -d /usr/share/httpd apache 2> /dev/null || :
……
默认值设定:/etc/default/useradd文件中
显示或更改默认设置:
useradd -D
useradd -D -s SHELL
useradd -D -b BASE_DIR
useradd -D -g GROUP
新建用户的相关文件和命令
/etc/default/useradd
/etc/skel/*
/etc/login.defs
newusers passwd格式文件 批量创建用户
chpasswd 批量修改用户口令
pass.txt
app1 redhat
app2:centos
app3:centos
useradd usermod userdel
-u
-r
-s
-d
-c
-g
-G
切换用户的方式:
su UserName:非登录式切换,即不会读取目标用户的配置文件,不改变当前工作目录
su – UserName:登录式切换,会读取目标用户的配置文件,切换至家目录,完全切换
root su至其他用户无须密码;非root用户切换时需要密码
换个身份执行命令:
su [-] UserName -c ‘COMMAND’
选项:-l –login
su -l UserName 相当于 su – UserName
设置密码
passwd [OPTIONS] UserName: 修改指定用户的密码
常用选项:
-d:删除指定用户密码
-l:锁定指定用户
-u:解锁指定用户
-e:强制用户下次登录修改密码
-f:强制操作
-n mindays: 指定最短使用期限
-x maxdays:最大使用期限
-w warndays:提前多少天开始警告
-i inactivedays:非活动期限
–stdin:从标准输入接收用户密码
echo “PASSWORD” | passwd –stdin USERNAME
创建组
groupadd [OPTION]… group_name
-g GID: 指明GID号;[GID_MIN, GID_MAX]
-r: 创建系统组
CentOS 6: ID<500
CentOS 7: ID<1000
创建GID和UID相同的用户:
groupadd -g 1234 nginx
useradd -g nginx -u 1234 nginx
修改和删除组
组属性修改:groupmod
groupmod [OPTION]… group
-n group_name: 新名字
-g GID: 新的GID
组删除:groupdel
groupdel GROUP
注意:主组删不掉,要把以此组为主组的用户删掉或移出
更改组密码
组密码:gpasswd
gpasswd [OPTION] GROUP
-a user 将user添加至指定组中
-d user 从指定组中移除用户user
-A user1,user2,… 设置有管理权限的用户列表
newgrp命令:临时切换主组
如果用户本不属于此组,则需要组密码
更改和查看组成员
groupmems [options] [action]
options:
-g, –group groupname 更改为指定组 (只有root)
Actions:
-a, –add username 指定用户加入组
-d, –delete username 从组中删除用户
-p, –purge 从组中清除所有成员
-l, –list 显示组成员列表
groups [OPTION].[USERNAME]… 查看用户所属组列表
[root@centos7 ~]#groupmems -l -g webs
varnish nginx qjy
[root@centos7 ~]#groupmems -g webs -a root
[root@centos7 ~]#groupmems -g webs -l
nginx qjy varnish root
文件权限
1、对普通用户来说,读写执行权限是严格的
2、普通用户不能修改文件的所有者
3、普通用户要修改文件的所属组,一是文件要是他的,二是他要在改后的那个组里
修改文件的属主和属组
修改文件的属主:chown
chown [OPTION]… [OWNER][:[GROUP]] FILE…
用法:
OWNER
OWNER:GROUP
:GROUP
命令中的冒号可用.替换
-R: 递归
chown [OPTION]… –reference=RFILE FILE…
修改文件的属组:chgrp
chgrp [OPTION]… GROUP FILE…
chgrp [OPTION]… –reference=RFILE FILE…
-R 递归
文件权限
文件的权限主要针对三类对象进行定义
owner: 属主, u
group: 属组, g
other: 其他, o
每个文件针对每类访问者都定义了三种权限
r: Readable
w: Writable
x: eXcutable
文件:
r: 可使用文件查看类工具获取其内容
w: 可修改其内容
x: 可以把此文件提请内核启动为一个进程
目录:
r: 可以使用ls查看此目录中文件列表
w: 可在此目录中创建文件,也可删除此目录中的文件
x: 可以cd进入此目录,查看此目录中文件的详细属性,也可以访问此目录中的文件
X: 只给目录x权限,不给文件x权限
chomod change mode
chmod
方法1:mode法
chmod who opt per file
who:u g o a(all)
opt:+ – =
per:r w x X
chomod u+x,g-w,o= file
删除文件的权限,并不是由文件决定的,而是由目录的权限决定的,目录有w权限才能删、新建
对读写权限来说,root帐户是不受控制的,但执行权限对root帐户有效
二进制的读权限不是必须的,没有读权限也能执行,但用file命令无法判断文件的类型了
对目录来讲,如果没有读权限,意味着不能查看目录的文件列表
对目录来讲,如果没有执行权限,意味着不能进到目录里,不能查看目录里文件的详细属性,也不能访问目录里的文件
所以对目录来说,读和执行是基本权限
权限的生效顺序,是按所有者->所属组->其他人来顺序生效,一个生效了的话,后边的就不看了,即使后边的权限更大
vfat(fat32)是不支持这种读写执行权限的
chmod –reference=f1 f2 f3 参考f1来设置f2和f3的读写执行权限
方法2:数字法
rwx rw- r–
111 110 100
chmod 764 file
r:4
w:2
x:1
— 000 0
–x 001 1
-w- 010 2
-wx 011 3
r– 100 4
r-x 101 5
rw- 110 6
rwx 111 7
file:6rw,4r,0,1x
dir:7rwx,5r-x,0
chmod -R a+x dir1 -R 递归
chmod -R +X dir1 +X 针对目录加执行权限,如果是已经有执行权限的文件也会加,没有执行权限的文件不会加
目录里的文件要执行,需要目录至少有执行权限
危险命令:
chmod -R 777 qjy /*
chown -R qjy data /*
带-R的都很危险!
生产中做操作一般都要先在测试环境试做!
umask
type umask 内部命令
umask+default=666/777
对文件,使用666计算,对文件夹,使用777计算
对文件,如果所得结果某位存在执行(奇数)权限,则将其权限+1
umask 026 可直接修改umask值
umask mask:掩码
功能:取消对应的权限
666
125 umask
6 6 6
110110110
001010101 为1的取消
110100010
6 4 2
对于目录
default权限=777-umask
对于文件
default权限=666-umask:对结果观察,如有奇数位+1,偶数不变
改umask也只是改内存,要想存住的话,可加到.bashrc里
umask -p >> bashrc
root的umask默认为022
普通帐号的umask默认为002
默认umask实际存在/etc/bashrc里,但不建议改
SUID,SGID,Sticky
suid :继承二进制程序所有者的权限
普通用户能用passwd命令修改密码,而/etc/passwd的权限是这样的
[qjy@centos7 ~]$ll /usr/bin/passwd
-rwsr-xr-x. 1 root root 27832 Jun 10 2014 /usr/bin/passwd
chmod u+s file
chmod 4755 file
suid权限也很危险,只适合于应用在二进制的可执行程序上
sgid:
1)继承二进制程序所有组的权限
2)作用于目录,此目录新建的文件继承目录的所属组
chmod g+s file
chmod 2755 file
suid4 sgid2 sticky1
sticky又称粘滞位
sticky:作用于目录,此目录的文件只能被所有者删除
chmod o+t dir1
chmod 1777 dir1
Sticky 位
具有写权限的目录通常用户可以删除该目录中的任何文件,无论该文件的权限或拥有权
在目录设置Sticky 位,只有文件的所有者或root可以删除该文件
sticky 设置在文件上无意义
权限设定:
chmod o+t DIR…
chmod o-t DIR…
例如:
ls -ld /tmp drwxrwxrwt 12 root root 4096 Nov 2 15:44 /tmp
suid :继承二进制程序所有者的权限
sgid:
1)继承二进制程序所有组的权限
2)作用于目录,此目录新建的文件继承目录的所属组 -> 用得多点
sticky:作用于目录,此目录的文件只能被所有者删除 -> 用得多点
root权限太大,为防止root误操作,可设定文件特定属性
设定文件特定属性
chattr +i 不能删除,改名,更改
chattr +a 只能追加内容
lsattr 显示特定属性
chattr +A 锁定文件的读时间
访问控制列表
ACL:Access Control List,实现灵活的权限管理
除了文件的所有者,所属组和其它人,可以对更多的用户设置权限
CentOS7 默认创建的xfs和ext4文件系统具有ACL功能
CentOS7 之前版本,默认手工创建的ext4文件系统无ACL功能,需手动增加
tune2fs –o acl /dev/sdb1
mount –o acl /dev/sdb1 /mnt/test
ACL生效顺序:所有者,自定义用户,自定义组,其他人acl 看自定义组的情况下可并列生效
为多用户或者组的文件和目录赋予访问权限rwx
- mount -o acl /directory
- getfacl file |directory
- setfacl -m u:qjy:rwx file|directory
- setfacl -Rm g:sales:rwX directory -R递归
- setfacl -M file.acl file|directory -M是引用file.acl文件,可手写file.acl权限表
- setfacl -m g:salesgroup:rw file| directory
- setfacl -m d:u:qjy:rx directory d:默认acl权限
- setfacl -x u:qjy file |directory
- setfacl -X file.acl directory -X是引用file.acl文件,可一次删多个文件
ACL文件上的group权限是mask 值(自定义用户,自定义组,拥有组的最大权限),而非传统的组权限
getfacl 可看到特殊权限:flags
通过ACL赋予目录默认x权限,目录内文件也不会继承x权限
base ACL 不能删除
setfacl -k dir 删除默认ACL权限
setfacl –b file1清除所有ACL权限
getfacl file1 | setfacl –set-file=- file2 复制file1的acl权限给file2
mask只影响除所有者和other的之外的人和组的最大权限
Mask需要与用户的权限进行逻辑与运算后,才能变成有限的权限(Effective Permission)
用户或组的设置必须存在于mask权限设定范围内才会生效 setfacl -m mask::rx file
–set选项会把原有的ACL项都删除,用新的替代,需要注意的是一定要包含UGO的设置,不能象-m一样只是添加ACL就可以
示例:
setfacl –set u::rw,u:qjy:rw,g::r,o::- file1
备份和恢复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
本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/95002