Linux里面每个用户都是通过UserId UID来唯一标识每个用户的,也就是说UID才是每个用户的身份唯一标识
- 管理员 root 0
- 普通用户1-4个字节范围 自动分配
- 系统用户:1-499(centos6)以前1-999(centos7) 这些主要是给Linux上的服务用的账号,对守护进程获取资源进行权限分配
- 登录用户500+(Centos6以前) 1000+ (centos7之后)给用户进行交互登录使用的
- 用户组的ID分配规则也是同样的
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 递归修改
- 家目录下的隐藏文件
\etc\skel
文件夹里的隐藏模板拷贝过来的
- 创建的用户的默认值
- \etc\default\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权限生效顺序
所有者 自定义用户 所属组|自定义组 其他人
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