用户管理:
创建用户、修改用户属性、删除用户、创建组、修改组属性、删除组
权限管理:
密码管理、修改文件的属主、修改属组、修改文件权限
Unix-like:多用户、多任务
1、Linux系统的多用户
组与用户的对应:
一对一、一对多、多对一、多对多
特殊用户和组:
root/root、nobody/nogroup
用户名:用户ID
组:容器:映射用户群和访问权限
权限指派的容器,角色(role)
文件:属主、属组
属主:拥有者
属组:所属的组
用户的类型:
管理员:root,0
普通用户:1-65535
系统用户:1-499
可登录用户:500-65535
2、用户管理
2.1、创建用户
useradd,adduser 创建用户 用法:useradd USERNAME
创建用户的时候,系统会同时创建一个与用户同名的组,这个组是用户的私有组
以用户的角度来说,组的类型:
私有组:基本组
额外组:
# 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
注:可以看到每个用户都是使用冒号(:)隔开的7个段使用man 5 可以看到相关的说明
# export LANG=en #为了避免里面出现乱码,先把文字改为英文 # man 5 passwd
用户的属性:
account:password:UID:GID:GECOS:directory:shell
用户名:密码占位符:UID:GID:注释信息:家目录:默认shell
默认法则:
UID:已有最大UID+1
GID:/etc/group中已有最大GID+1,如果没有给用户组指定基本组,且其UID相同的GID未被占用,则GID用UID
注释信息:空
家目录:/home/USERNAME
shell:/bin/bash
2.2在创建用户的时定制用户属性
-u UID,有效范围0-65535 ,不能重复
-g GID,有限范围已有的GID
# useradd -g 1001 bcde
-G GID,有效范围已有的GID,可以有多个,用逗号分隔创建附属组
-c COMMENT:指定注释信息
# useradd -c "cao yuan lang" gentoo # tail -1 /etc/passwd gentoo:x:1001:1001:cao yuan lang:/home/gentoo:/bin/bash
-d 路径 -d /path/to/somewhere:指定家目录
# mkdir /tmp/chen # useradd -d /tmp/chen/chen1 slackware # !tai #tail -1 /etc/passwd slackware:x:1002:1002::/tmp/chen/chen1:/bin/bash
-s /path/to/shell_commend:指定shell
# useradd -s /bin/bash wolf # !tail #tail -1 /etc/passwd wolf:x:1003:1003::/home/wolf:/bin/dash
-r:创建系统用户,ID号范围为1-499之间的用户;系统用户的家目录不会被真正创建
-M:不为用户创建家目录
-m:强行为用户创建家目录
2.3、查看用户属性和切换用户
id 查看用户属性
-u:显示有效用户uid
-g:显示有效用户gid
-un:显示用户名称
-gn:显示用户组名称
# id root uid=0(root) gid=0(root) groups=0(root) # id -u root 0 # id -un root root # useradd user1 # useradd -g 500 user2 # id -un user2 user2 # id -gn user2 user1
finger:查看用户信息
# yum install finger #安装finger命令
su(switch user)切换用户: su USERNAME
su -l USERNAME
su - USERNAME
管理员su到普通用户时,不需要密码; 反之,则不行
2.4、修改用户属性
usermod:
-u UID 改UID号
-g GID 改基本组
-G GID 改附加组,但 -G 很少独立使用,经常和 -a 使用,如果不加 -a ,则会覆盖原来的附加组,加了 -a 则保留原来的额外组(附加组),并创建新的额外组
-c COMMENT 修改注释信息
-s /PATH/TO/SHELL 修改shell
-l NEW_NAME:改用户名的登录名称
-m -d /path/to/somewhere 修改家目录,和 -m 一起使用,不使用 -m 只修改家目录指向,同时使用 -m 选项则把原来家目录移动为新的家目录
# mkdir /tmp/user # usermod -m -d /tmp/user/user1 wolf1 #把用户wolf1的家目录/home/wolf1改为/tmp/user/user1
2.5、删除用户
userdel:
userdel [options] USERNAME 只会删除用户,不会删除家目录
-r 加入-r选项后才能删除用户的家目录
2.6、创建组
groupadd 用法:groupadd GRPNAME
-g GID:创建组的时候为其制定GID
-r:创建系统组
# cat /etc/group root:x:0: bin:x:1:bin,daemon daemon:x:2:bin,daemon sys:x:3:bin,adm adm:x:4:adm,daemon tty:x:5:
组名:密码占位符:GID:以此组为额外组的用户列表,用户词用逗号分隔
2.7、修改组属性
groupmod:修改组属性
-g GID
-n NEW_NAME
2.8、删除组
groupdel
groupdel GRPNAME
查看有哪些shell可用:
/etc/shells 这里的shell都是安全shell,所有处于这个文件中的shell都是当前系统中的安全shell
环境变量:SHELL(保存当前用户的shell)、PATH、HISTFILE
3、权限管理
3.1、密码管理:
passwd:修改自己的密码
passwd USERNAME:修改指定用户的密码
/etc/shadow 保存密码的文件
密码安全策略:
足够复杂:
1、密码长度越长越好
2、要包含大写字母、小写字母、数字和特殊字符中的至少三类
3、定期更换:不要重复使用此前用过的密码
passwd
-e:设定过期时间
-n:密码最短使用天数
-x:最常使用天数
-w:警告天数
-i:非活动时长
-l:锁定用户账号
-u:解除锁定
# passwd wolf 修改wolf的密码 # passwd -l wolf 锁定wolf,使其不能登录 # passwd -u wolf 解锁wolf # su - wolf # passwd 修改wolf自己的密码
/etc/shadow
登录名:加密的密码:最近一次修改密码的时间:密码最短使用期限:密码最长使用期限:密码到期警告天数:账号的非活动天数:账号过期期限:预留段
加密机制:
$1$:加密方法
$8位随机数$:salt
$:密码
修改密码时间:从1970年1月1号开始至上次修改密码时,所经过的天数
账号的非活动天数:账号密码到期后,不立即锁定,给一定的时间给你缓冲,用户可以登录,但登录后要改密码,不然就不能访问
加密方法:
对称加密:加密和解密使用同一个密钥:3DES,AES(Advanced Encrption Standard) 密钥管理及分发功能很差
公钥加密:也叫非对称加密,私钥/公钥(s/p),公钥可以从私钥中提取得到(反之不行) 加密速度慢,但安全性高,通常用于密钥分发:RSA,DSA
单向加密:提取数据特征码,
特性:
1)、无论输入是多大的数据,其输出是定长的;
2)、如果输入的数据一样,其结果一定一样;反之,输入数据微小改变,将引起结果的巨大改变 雪崩效应
3)、算法:md5(message digest),SHA(Secure Hash Algorithm),SHA1
md5:128bits
sha1:160bits
sha-256:256bits
sha-512:512bits
# openssl passwd -l -salt 12345678 redhat #自己指定salt
密钥属性的修改:
chage:
-d:修改密码的最近一次修改时间
-m,--mindays MIN_DAYS:最短使用期限
-M, --maxdays MAX_DAYS:最长使用期限
-W, --warndays WARN_DAYS:警告天数
-I, --inactive INACTIVE:非活动天数
-E, --expiredate EXPIRE_DATE:过期时间
usermod:
-e YYYY-MM-DD:指定账号过期时间
-f N:表示非活动时长 N 表示天数
gpasswd:给组设定密码
newgrp GROUP:临时设定指定的组为自己的基本组,使用exit退出
3.2、修改文件属主和属组
chown [选项] 用户 文件 修改属主
chgrp [选项] 组 文件 修改属组
chown 用户:组 文件 修改属主和属组
chown 用户.组 文件 修改属主和属组
3.3、修改文件权限
文件系统安全模型:
属主 属组 其它
u, g, o
---:000 --> 0
--x:001 --> 1
-w-:010 --> 2
-wx:011 --> 3
r--:100 --> 4
r-x:101 --> 5
rw-:110 --> 6
rwx:111 --> 7
3位二进制对应一个8进制
4位二进制对应一位16进制
0,9,A,B,C,D,E,F
F:1111
9:1001
640:rw-r-----
755:rwxr-xr-x
750:rwxr-x---
700:rwx------
600:rw-------
644:rw-r--r--
chmod:change mode 改变文件权限(mode):
chmod [选项] 权限 文件
-R:递归修改权限
--refernce=/path/to/somefile FILE
# chmod --reference=/etc first.sh #把first.sh的权限改成etc的权限
权限定义方式:
1)、同时修改三类用户的权限:8进制数字方式
# chmod 444 first.sh 将三类用户改为只读
2)、修改某一类或某些类用户的权限:u,g,o,a
u=rw
u= ,g=
ug=
# chmod u=rw[-] first.sh #使主有读、写权限, # chmod g=r,o=--- first.sh #使组有读权限,其它用户没有权限
3)、只修改某类用户的某位或某些为权限:u,g,o,a
+/-
u+w
[a]+x
[a]-x
g-rw
# chmod g+x first.sh #使组有执行权限
3.4、文件特殊权限
特殊权限、ACL、定时任务
安全上下文:
cat --> /bin/cat
openstack:/bin/cat /etc/fstab
/etc/shadow
openstack,passwd,/etc/shadow
s:suid,set uid,属主有s权限,意味着任何用户在执行此程序时,其进程的属主不再是发起者本人,而是这个程序文件的属主
s:属主有执行权限
S:属主无执行权限
chmod u+s /path/to/somefile
chmod u-s /path/to/somefile
chmod 4644 /path/to/somefile
s:sgid,set gid,属组有s权限,意味着执行此程序时,其进程的属组不在是运行者本人所属的基本组,而是此程序文件的属组
chmod g+s /path/to/somefile
chmod g-s /path/to/somefile
t:sticky,粘贴位,附加在other的权限上,表现为t
t:其他用户原有执行权限
T:其他用户原无执行权限
chmod o+t /path/to/somefile
chmod o-t /path/to/somefile
u:s
g:s
o:t
ugt:000:0
001:1
010:2
011:3
100:4
101:5
110:6
111:7
chmod 6664 /tmp/a.txt 第一个数字对应ugt,后面三位数字对应文件的权限
umask:0022
ACL:文件访问控制列表
hadoop:/var/tmp/test.txt
hadoop,hadoop
664:其它,只读
hadoop希望能够让hive写此文件,他改如何进行:只能修改other的权限有写权限
acl:用于实现在原有的访问控制机制之外补充一种文件访问控制机制
用户访问文件:
1)、用户是否为文件属主
2)、用户是否有特定的访问控制条目
3)、用户是否属于文件属组
4)、用户所属的组是否有特定的访问控制条目
5)、其它
getfacl /path/to/somewhere:查看文件或目录的访问控制列表
setfacl -m u:USERNANE:MODE: /path/to/somewhere:为USERNAME指定的用户设定问件/path/to/somewhere具有MODE访问权限
setfacl -m g:GROUPNANE:MODE: /path/to/somewhere:为GROUPNAME指定的组设定对文件/path/to/somewhere具有MODE访问权限
setfacl -x u:USERNANE: /path/to/somewhere:为USERNAME指定的用户取消对文件/path/to/somewhere访问权限
setfacl -x g:USERNANE: /path/to/somewhere:为USERNAME指定的用户组取消对文件/path/to/somewhere访问权限
额外挂载的文件系统默认不支持acl,如果要支持
方法1:
mount -o acl DEVICEMOUNT_POINT
永久有效,需要编辑/etc/fatab,在挂载选项后附加acl选项
方法2:
设定分区的默认挂载选项汇总有acl,挂载时无需再指定acl
tune2fs -o acl DEVICE
取消此默认挂载选项:
tune2fs -o ^aclDEVICE
hadoop:文件/var/tmp/hadoop.txt,664
拒绝hive用户对此的任何访问
setfacl -m u:hive:--- /var/tmp/hadoop.txt
复制文件/var/log/messages至/data目录,其属主为root用户,且有读写权限,属组为root组,且有读写权限,可以被任何人读取,
可以被gentoo用户和magedu组读写,但centos用户没有任何访问权限
# mkdir /data # cp /var/log/messages /data # chmod 664 /data/messages # setfacl -m u:gentoo:rw /data/messages # setfacl -m g:magedu:rw /data/messages # setfacl -m u:centos:--- /data/messages