用户的身份
管理员:UID为 0。系统的管理员。唯一标识,0就是管理员
系统用户:UID为1-999。不能登录服务器,只能调用服务程序
普通用户:UID从1000开始。管理员创建的用于完成日常工作的用户
Tip:redhat5/6 系统用户:1-499、普通用户:500-65535
UID为0只能区分管理员与其他用户,不能区分系统用户和普通用户。用户的UID号码可以修改
[root@localhost ~]# useradd zhangsan -u 555
[root@localhost ~]# id zhangsan
uid=555(zhangsan) gid=1001(zhangsan) groups=1001(zhangsan)
[root@localhost ~]# su - zhangsan
[zhangsan@localhost ~]$
用户增删改的基本命令
1、id 命令
id命令用于显示用户的详细信息,语法格式为“id用户名”
[root@localhost ~]# id
uid=0(root) gid=0(root) groups=0(root) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[root@localhost ~]# id zhangsan
uid=555(zhangsan) gid=1001(zhangsan) groups=1001(zhangsan)
id 不加用户名称,显示自己的信息
UID:用户名
GID:基本组与扩展组。
基本组:与生俱来的,随用户的建立产生,基本组只有1个。例:一个人出生,有他父母,爷爷奶奶等。
扩展组:后期工作需要添加的组。例:出生长大后上学、上班。学校、公司就是扩展组
2、useradd 命令
useradd命令用于创建新的用户账户,语法格式为“useradd [参数] 用户名”
参数 | 作用 |
---|---|
-d | 指定用户的家目录(默认为/home/username) |
-e | 账户的到期时间,格式为YYYY-MM-DD. |
-u | 指定该用户的默认UID |
-g | 指定一个初始的用户基本组(必须已存在) |
-G | 指定一个或多个扩展用户组 |
-N | 不创建与用户同名的基本用户组 |
-s | 指定该用户的默认Shell解释器 |
[root@localhost ~]# groupadd school
[root@localhost ~]# useradd lisi -G school
[root@localhost ~]# id lisi
uid=1001(lisi) gid=1003(lisi) groups=1003(lisi),1002(school)
3、groupadd 命令
groupadd命令用于创建新的用户组,语法格式为“groupadd [参数] 群组名
在工作中常常会把几个用户加入到同一个组里面,这样便可以针对一类用户统一安排权限
[root@localhost ~]# groupadd school
4、usermod 命令
usermod命令用于修改用户的属性,英文全称为“user modify”,语法格式为“usermod [参数] 用户名”
参数 | 作用 |
---|---|
-c | 填写用户账户的备注信息 |
-d -m | 参数-m与参数-d连用,可重新指定用户的家目录并自动把旧的数据转移过去 |
-e | 账户的到期时间,格式为YYYY-MM-DD |
-g | 变更所属用户组 |
-G | 变更扩展用户组 |
-L | 锁定用户禁止其登录系统 |
-U | 解锁用户,允许其登录系统 |
-s | 变更默认终端 |
-u | 修改用户的UID |
[root@localhost ~]# usermod -u 77777 zhangsan
[root@localhost ~]# id zhangsan
uid=77777(zhangsan) gid=1001(zhangsan) groups=1001(zhangsan)
5、passwd 命令
passwd命令用于修改用户的密码、过期时间等信息,语法格式为“passwd [参数] 用户名”
参数 | 作用 |
---|---|
-l | 锁定用户,禁止其登录 |
-u | 解除锁定,允许用户登录 |
–stdin | 允许通过标准输入修改用户密码,如echo “NewPassWord” |
-d | 使该用户可用空密码登录系统 |
-e | 强制用户在下次登录时修改密码 |
-S | 显示用户的密码是否被锁定,以及密码所采用的加密算法名称 |
[root@localhost ~]# passwd -l zhangsan
Locking password for user zhangsan.
passwd: Success
[root@localhost ~]# passwd -S zhangsan
zhangsan LK 2022-04-18 0 99999 7 -1 (Password locked.)
[root@localhost ~]# passwd -u zhangsan
Unlocking password for user zhangsan.
passwd: Warning: unlocked password would be empty.
passwd: Unsafe operation (use -f to force)
[root@localhost ~]# echo "redhat8" | passwd --stdin zhangsan
Changing password for user zhangsan.
passwd: all authentication tokens updated successfully.
6、userdel 命令
userdel命令用于删除已有的用户账户,语法格式为“userdel [参数] 用户名”
参数 | 作用 |
---|---|
-f | 强制删除用户 |
-r | 同时删除用户及用户家目录 |
[root@localhost ~]# id lisi
uid=1001(lisi) gid=1003(lisi) groups=1003(lisi),1002(school)
[root@localhost ~]# userdel lisi
[root@localhost ~]# id lisi
id: ‘lisi’: no such user
[root@localhost ~]# cd /home
[root@localhost home]# ls
linuxprobe lisi zhangsan
[root@localhost home]# cd ~
[root@localhost ~]# useradd lisi
useradd: warning: the home directory already exists.
Not copying any file from skel directory into it.
Creating mailbox file: File exists
[root@localhost ~]# id lisi
uid=1001(lisi) gid=1003(lisi) groups=1003(lisi)
[root@localhost ~]# userdel -r lisi
[root@localhost ~]# cd /home
[root@localhost home]# ls
linuxprobe zhangsan
Tip:不加 【-r】参数,在/home目录中仍有删除用户的家目录,再次创建该用户会直接关联
通过修改文件添加用户
#编辑用户文件
root@localhost ~]# vim /etc/passwd
wangwu:x:88888:1008::/home/wangwu:/bin/bash
[root@localhost ~]# id wangwu
uid=88888(wangwu) gid=1008 groups=1008
#编辑组文件
root@localhost ~]# vim /etc/group
wangwu:x:1008:
[root@localhost ~]# id wangwu
uid=88888(wangwu) gid=1008(wangwu) groups=1008(wangwu)
#编辑密码文件
[root@localhost ~]# vim /etc/shadow
wangwu:!!:88888:::::
#创建家目录
[root@localhost ~]# cp -r /etc/skel/ /home/wangwu
chown -Rf wangwu:wangwu /home/wangwu
[root@localhost ~]# su - wangwu
[wangwu@localhost ~]$
文件的权限与归属
文件的一般权限
文件 | 目录 | |
---|---|---|
可读® | 读取文件的内容(cat、more) | 显示目录文件列表(ls) |
可写(w) | 修改文件的内容(vim) | 新建、剪切、删除文件(tough、cp、rm) |
可执行(x) | 执行这个脚本 | 进入到目录(cd) |
权限项 | 读 | 写 | 执行 | 读 | 写 | 执行 | 读 | 写 | 执行 |
---|---|---|---|---|---|---|---|---|---|
字符表示 | r | w | x | r | w | x | r | w | x |
数字表示 | 4 | 2 | 1 | 4 | 2 | 1 | 4 | 2 | 1 |
权限分配 | 文件所属者 | | 文件所属组 | 其他用户 |
权限项 | 可读 | 可写 | 可执行 | 可读 | 可写 | 可执行 | 可读 | 可写 | 可执行 |
---|---|---|---|---|---|---|---|---|---|
字符表示 | r | w | x | r | w | x | r | w | x |
数字表示 | 4 | 2 | 1 | 4 | 2 | 1 | 4 | 2 | 1 |
权限分配 | 文件所有者 | 文件所属组 | 其他用户 |
权限字符数字转化,例:
r-xrwxr-- r-x=5;rwx=7;r–=4; 由此数字表示为 574
[root@localhost ~]# chmod 574 a.txt
[root@localhost ~]# ls -l a.txt
-r-xrwxr--. 1 root root 314 Apr 10 20:52 a.txt
注:三个为一组,分别代表所有者权限、所属组权限、其他用户权限
chown [参数] 主(所有者):组(所属组) 文件名称 —— 修改用户和组
chmod [参数] 文件 —— 改变文件或目录权限
[root@localhost ~]# chown root:zhangsan a.txt
[root@localhost ~]# chmod 600 a.txt
[root@localhost ~]# ls -l a.txt
-rw-------. 1 root zhangsan 314 Apr 10 20:52 a.txt
[root@localhost ~]# su - zhangsan
[zhangsan@localhost ~]$ cat /root/a.txt
cat: /root/a.txt: Permission denied
一般权限对root无效
[root@localhost ~]# chmod 000 a.txt
----------. 1 root zhangsan 314 Apr 10 20:52 a.txt
[root@localhost ~]# cat a.txt
Being yourself
your life is your life
don’t let it be trapped into darkness.
keep watching
there is light somewhere.
your heart is your heart,
don't let it be turned into dead.
在权限前面的的符号:
- 表示普通文件
d 表示目录文件
l 表示链接文件
p 表示管道文件
b 表示设备文件
c 表示字符设备文件
文件的特殊权限
1、SUID
(命令)执行者临时获取到文件所有者的权限。设置在二进制可执行文件上面。脚本文件
# /etc/shadow 用户密码存放文件
[root@localhost ~]# cat /etc/shadow
zhangsan:$6$5lX61grJkhyMSW6z$rla813pX1iH.2Mpg1O5Mi2dbLcXveqB5jvuUu3gHE0O3XIlC3Hsf3i6fSTrbFasIzwHvOxsD97JvSRSt2lwp3.:19101:0:99999:7:::
[root@localhost ~]# ls -l /etc/shadow
----------. 1 root root 1452 Apr 19 22:43 /etc/shadow
[root@localhost ~]# su - zhangsan
[zhangsan@localhost ~]$ ls -l /etc/shadow
----------. 1 root root 1452 Apr 19 22:43 /etc/shadow
[zhangsan@localhost ~]$ passwd
Changing password for user zhangsan.
Current password:
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
[zhangsan@localhost ~]$ exit
[root@localhost ~]# cat /etc/shadow
zhangsan:$6$NKKLy6FdycD9IKRv$gauu.Bpcxnmj9apiftoEIp/BCoGiaVqss.RipA/WeIrmc06K87RdDJUAtbJnWGxjad1mzktwbgJRsiBUqxX9q1:19101:0:99999:7:::
通过 /etc/shadow 文件前后比较,我们可以发现,文件被修改了,用户zhangsan的密码发生了变化。从上面可以看出用户zhangsan对该文件并没有读写操作权限,那么是如何修改文件的呢?
[root@localhost ~]# which passwd
/usr/bin/passwd
[root@localhost ~]# ls -l /usr/bin/passwd
-rwsr-xr-x. 1 root root 34512 Aug 13 2018 /usr/bin/passwd
通过执行上面的命令,我们可以看出命令passwd文件的位置是 /usr/bin/passwd。该文件的权限为 rwsr-xr-x 。文件所有者的权限 rws ,x 变成 s 。意味着该文件被赋予了SUID权限,执行者临时获取了文件所有者的权限,root具有修改文件的权限,因此文件被修改了
2、SGID
SGID特殊权限有两种应用场景:
当对二进制程序进行设置时,能够让执行者临时获取文件所属组的权限;
当对目录进行设置时,则是让目录内新创建的文件自动继承该目录原有用户组的名称
[root@localhost ~]# cd /home
[root@localhost home]# mkdir hehe
#目录权限设置
[root@localhost home]# chmod -R 777 hehe
#添加SGID权限
[root@localhost home]# chmod -R g+s hehe
[root@localhost home]# ls -ld hehe
drwxrwsrwx. 2 root root 6 Apr 19 23:11 hehe
[root@localhost home]# su - zhangsan
[zhangsan@localhost ~]$ touch abc
[zhangsan@localhost ~]$ ls -l abc
-rw-rw-r--. 1 zhangsan zhangsan 0 Apr 19 23:18 abc
[zhangsan@localhost ~]$ cd /home/hehe
[zhangsan@localhost hehe]$ touch abc
[zhangsan@localhost hehe]$ ls -l abc
-rw-rw-r--. 1 zhangsan root 0 Apr 19 23:19 abc
从上面可以看出,当目录设置SGID权限后,目录内新创建的文件将所属组继承目录所属组的名称
3、SBIT
粘滞位,保护位(作用)。
用户只能删除自己的文件,不能删除其他用户的文件
[root@localhost home]# ls -ld /tmp
drwxrwxrwt. 35 root root 4096 Apr 19 23:25 /tmp
[root@localhost ~]# su - zhangsan
[zhangsan@localhost ~]$ cd /tmp
[zhangsan@localhost tmp]$ touch abc
[zhangsan@localhost tmp]$ ls -l abc
-rw-rw-r--. 1 zhangsan zhangsan 0 Apr 19 23:28 zabc
#用户lisi无权删除该文件
[root@localhost ~]# su - lisi
[lisi@localhost ~]$ cd /tmp
[lisi@localhost tmp]$ rm -f abc
rm: cannot remove 'abc': Operation not permitted
如何区分SUID、SGID、SBIT
一般权限: rwxrwxrwx
如果所有者权限rwx,x 变为 s ,则拥有SUID权限。大小写区分,S表示原来没有执行(x)权限,s表示有执行(x)权限
如果所属组权限rwx,x 变为 s ,则拥有SGID权限。大小写区分,S表示原来没有执行(x)权限,s表示有执行(x)权限
如果其他用户权限rwx,x 变为 t ,则拥有SBBIT权限。大小写区分,T表示原来没有执行(x)权限,t表示有执行(x)权限
数字表示:SUID=4;SGID=2;SBIT=1
例:
rwsrwsrwt 7777
rwSr-s— 6650
r-sr—wt 5543
[root@localhost ~]# ls -l a.txt
----------. 1 root zhangsan 314 Apr 10 20:52 a.txt
[root@localhost ~]# chmod 5543 a.txt
[root@localhost ~]# ls -l a.txt
-r-sr---wt. 1 root zhangsan 314 Apr 10 20:52 a.txt
设置特殊权限
chmod [参数] 文件
参数 | 作用 |
---|---|
u+s | 设置SUID权限 |
u-s | 取消SUID权限 |
g+s | 设置SGID权限 |
g-s | 取消SGID权限 |
o+t | 设置SBIT权限 |
o-t | 取消SBIT权限 |
文件的隐藏属性
1、chattr 命令
chattr命令用于设置文件的隐藏权限,语法格式为“chattr [参数] 文件名称”
添加隐藏权限 chattr +[参数];移除隐藏权限 chattr -[参数]
参数 | 作用 |
---|---|
i | 无法对文件进行修改;若对目录设置了该参数,则仅能修改其中的子文件内容而不能新建或删除文件 |
a | 仅允许补充(追加)内容,无法覆盖/删除内容(Append Only) |
S | 文件内容在变更后立即同步到硬盘(sync) |
s | 彻底从硬盘中删除,不可恢复(用0填充原文件所在硬盘区域) |
A | 不再修改这个文件或目录的最后访问时间(atime) |
b | 不再修改文件或目录的存取时间 |
D | 检查压缩文件中的错误 |
d | 使用dump命令备份时忽略本文件/目录 |
c | 默认将文件或目录进行压缩 |
u | 当删除该文件后依然保留其在硬盘中的数据,方便日后恢复 |
t | 让文件系统支持尾部合并(tail-merging) |
x | 可以直接访问压缩文件中的内容 |
[root@localhost ~]# chattr +i initial-setup-ks.cfg
[root@localhost ~]# ls -l initial-setup-ks.cfg
-rw-r--r--. 1 root root 1561 Apr 8 08:06 initial-setup-ks.cfg
#添加隐藏权限,root用户也无法删除
[root@localhost ~]# rm -f initial-setup-ks.cfg
rm: cannot remove 'initial-setup-ks.cfg': Operation not permitted
#移除隐藏权限
[root@localhost ~]# chattr -i initial-setup-ks.cfg
#删除文件成功
[root@localhost ~]# rm -v initial-setup-ks.cfg
rm: remove regular file 'initial-setup-ks.cfg'?
2、lsattr 命令
lsattr命令用于查看文件的隐藏权限语法格式为“lsattr [参数] 文件名称”
[root@localhost ~]# lsattr initial-setup-ks.cfg
----i------------- initial-setup-ks.cfg
文件访问控制列表
一般权限、特殊权限、隐藏权限其实有一个共性—权限是针对某一类用户设置的,能够对很多人同时生效。对某个指定的用户进行单独的权限控制,就需要用到文件的访问控制列表(ACL)
1、setfacl 命令
setfacl命令用于管理文件的ACL权限规则,语法格式为“setfacl [参数] 文件名称”
参数 | 作用 |
---|---|
-m | 修改权限 |
-M | 从文件中读取权限 |
-x | 删除某个权限 |
-b | 删除全部权限 |
-R | 递归子目录 |
[root@localhost ~]# mkdir /home/hehe
[root@localhost ~]# cd home
[root@localhost home]# useradd zhangsan
[root@localhost home]# chmod -R 777 hehe
[root@localhost home]# ls -ld hehe
drwxrwxrwx. 2 root root 6 Apr 20 17:41 hehe
#对用户zhangsan单独设置权限,对组设置为setfacl -m g:组:权限 文件
[root@localhost home]# setfacl -Rm u:zhangsan:--- hehe
[root@localhost home]# su - zhangsan
#用户zhangsan没有对该目录的权限
[zhangsan@localhost ~]$ cd /home/hehe
-bash: cd: /home/hehe: Permission denied
#删除权限
[root@localhost home]# setfacl -b hehe
[root@localhost home]# getfacl hehe
# file: hehe
# owner: root
# group: root
user::rwx
group::rwx
other::rwx
2、getfacl 命令
getfacl命令用于查看文件的ACL权限规则,语法格式为“getfacl [参数] 文件名称”
[root@localhost home]# getfacl hehe
# file: hehe
# owner: root
# group: root
user::rwx
user:zhangsan:---
group::rwx
mask::rwx
other::rwx
su与sudo服务
su 切换用户身份
su 用户名 —— 会保留之前用户的变量信息
su - 用户名 —— 不会保留用户之前的变量信息,做完整的变更
[root@localhost home]# echo $MAIL
/var/spool/mail/root
[root@localhost home]# su zhangsan
[zhangsan@localhost home]$ echo $MAIL
/var/spool/mail/root
[zhangsan@localhost home]$ exit
exit
[root@localhost home]# su - zhangsan
[zhangsan@localhost ~]$ echo $MAIL
/var/spool/mail/zhangsan
管理员可以切换到任何人,不需要密码
普通用户切换需要密码
sudo服务程序
使用sudo命令可以给普通用户提供额外的权限来完成原本只有root管理员才能完成的任务,可以限制用户执行指定的命令,记录用户执行过的每一条命令,集中管理用户与权限(/etc/sudoers),以及可以在验证密码后的一段时间无须让用户再次验证密码
参数 | 作用 |
---|---|
-h | 列出帮助信息 |
-l | 列出当前用户可执行的命令 |
-u 用户名或UID值 | 以指定的用户身份执行命令 |
-k | 清空密码的有效时间,下次执行sudo时需要再次进行密码验证 |
-b | 在后台执行指定的命令 |
-p | 更改询问密码的提示语 |
[root@localhost ~]# visudo
#在100行
## Allow root to run any commands anywhere
100 root ALL=(ALL) ALL
101 zhangsan ALL=(ALL) /usr/sbin/reboot,/usr/sbin/poweroff
[root@localhost ~]# su - zhangsan
#用户zhangsan可以通过sudo重启
[zhangsan@localhost ~]$ sudo reboot
We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:
#1) Respect the privacy of others.
#2) Think before you type.
#3) With great power comes great responsibility.
[sudo] password for zhangsan:
zhangsan(用户) ALL(限制来访的来源,比如localhost)=(ALL)(以谁的身份运行,ALL=root)
ALL(可以执行那些命令,命令必须以路径形式书写,多个命令用 ,隔开)
步骤:
1、通过 visudo 添加用户及权限
2、用户通过 sudo 命令名称 执行
注:1、不要放行所有命令;2、不要授予编辑文件的权限(Linux中一切都是文件)