5.用户-组和权限

1.Linux用户组和权限管理

Linux里面每个用户都是通过UserId UID来唯一标识每个用户的,也就是说UID才是每个用户的身份唯一标识

用户和组常用命令

id root
groupadd -g 336 -r mysql
	-g 指定GID
	-r 指定为系统组,也就是不要创建跟用户相关的额外文件
groupmod
groupdel
useradd -M -d /home/mysql -s /bin/false -u 336 -g mysql -r  mysql
	-M 不要创建家目录 
	-m 创建家目录
	-d 指定用户的家目录位置
	-s 指定shell类型  /bin/false  /sbin/nologin  /bin/bash
	-u 指定UID
	-g 指定主组
	-G 附加组
	-r 指定为系统用户
usermod
userdel 
	-r 选项,把用户相关的配置和目录一起删除
getent shadow mysql #这个命令非常有用,可以查看指定的数据库里面的对应一条记录,可以查看的数据库支持一下类型
ahosts ahostsv4 ahostsv6 aliases ethers group gshadow hosts initgroups
netgroup networks passwd protocols rpc services shadow
 
sudo -i 登录为root 输入自己密码 Ubuntu系统
su - 切换环境
su 不切换环境 ,没有好坏,只有适合的场景
su [-] UserName -c 'COMMAND' #换个身份执行一条命令
passwd 设置密码
passwd username
----passwd是交互式的----chpasswd----非交互式的---可以批量修改主机密码
echo "root:123456" | chpasswd
chpasswd -e 加密类型 #也就是说root:加密后的密码,然后-e 指定加密的类型就行了
echo 'root:$6adsf23dsgfd' | chpasswd  -e #注意,如果使用sha512,加密的密钥不要用""双引号,里面$会被转义

生成随机密码:
tr -dc '[:alnum:]' < /dev/urandom | head -c 12 
解释: -c 后面集合的补集-d 删除补集 所以 相当于密码范围就是后面集合 -c 取多少位

非交互式修改用户密码
通用形式
echo -e "123456\n123456" | passwd shay
适用于红帽
echo '123456' | passwd --stdin shay
生成随机密码
yum install -y expect
mkpasswd -l 8 -c 2 -C 2 -d 2 -s 2 |tee passwd.txt | passwd --stdin  shay
-l 密码长度
-c 小写字母
-C 大写字母
-d 数字
-s 特殊符号

groupmems #命令,对组内成员进行管理
-l 列出组内成员
-p 删除组内所有成员
-d username 删除成员username
-a username 添加成员username
-g 指定对那个组进行操作

显示附加组成员
groupmems -l -g root
getent group root

指定用户加入组
groupmems -a root -g mail
显示用户所属哪些组
groups root
id 命令也可以看用户属于那些组

chown root:root /etc/shadow
chmod
	a,u,g,o
	-R 递归修改

useradd 默认创建的用户默认值有两个地方配置文件控制

[root]cat  /etc/default/useradd 
# useradd defaults file
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes

文件权限

==权限生效顺序 拥有者 所属组 其他人,如果有其中一个满足,那么就用这个满足的权限==
rwx 
也就是这样说:如果你想操作目录下的文件本身,包括读和写
想读取目录下的文件的内容必须有目录的x权限和文件的r权限
想再目录下创建文件,必须有目录的xw权限
1.如果你想进入目录,必须有x权限,如果你知道目录下的文件名,那么只有x权限,你就可以直接访问目录下的文件,
例如cat /etc/shadow  那么对于etc目录而言,你只需要有x权限即可

2.如果你不知道目录下有什么文件,你还想访问,那么你必须要有目录的x和r权限

3.如果在2的基础之上,你还想删除或者增加目录下的文件,那么你还必须要用有目录的w权限

对于文件本身而言,如果你想读就必须有r想写就必须有w,如果是二进制文件,想执行就必须有x这个权限,对于脚本文件
如果想执行必须要有rx两个权限

文件的特殊权限

SUID 作用于二进制可执行文件上,用户将继承此程序所有者的权限
SGID 
	作用于二进制可执行文件上,用户将继承此程序所有组的权限
	作于于目录上, 此目录中新建的文件的所属组将自动从此目录继承
STICKY 作用于目录上,此目录中的文件只能由所有者自已来删除

chmod u+s ...
chmod 4xxx ...
chmod u-s ....

chmod g+s ...
chmod 2xxx ....
chmod g-s ....

chmod o+t ....
chmod 1xxx ...
chmod o-t ...

文件特殊属性

chattr +i file  root不可删除或者修改
chattr +a file root可以追加内容但是不可以删除
lsattr 显示特殊属性

ACL,更小粒度的权限划分

ACL权限生效顺序
所有者 自定义用户 所属组|自定义组 其他人
setfacl 
getfacl
setfacl -m u:shay:rwx hello.sh
setfacl -b hello.sh  #清楚所有ACL的权限
setfacl -x u:shay hello.sh  #清楚一条acl记录

一个使用场景,如果chmod 把chmod的x权限去掉了,那么没法再加回来了,可以通过acl来加回来执行权限然后再使用chmod修改

新建文件和目录的默认权限

umask xxx  # 指定默认权限被减值
如果是文件 666 - umask 如果结果有奇数 + 1 变成偶数,主要因为,文件默认不能有x权限,x是1,所以是奇数一定有x
如果是目录777 - umask 
持久保存
	/ect/bashrc
	~/.bashrc