1.用户提权:
su 切换身份;
1.需要知道root的密码;
2.提权; 拿到最高的权限; 危险;
su UserName
su - Username
区别在于,加载的环境变量不一样; (可能会造成程序运行异常; )
# 借助www用户身份去运行ifconfig命令;
[root@oldboyedu ~]# su - www -c "ifconfig"
因为有些程序不支持root直接启动; 必须是普通用户;
1.普通用户不需要登录系统;
2.只是用来完成服务的启动;
3.创建该用户时,一般都创建为一个系统用户;
4.最后通过 su - username -c "command" 来完成服务的启动;
sudo 提取权限;
当你在做某件无法完成的事情时, 可以通过提权来完成;
# 1.使用sudo定义分组,这个系统group没什么关系
User_Alias OPS = oldxu,oldqiang
User_Alias DEV = oldli,oldguo
# 2.定义可执行的命令组,便于后续调用
Cmnd_Alias NETWORKING = /sbin/ifconfig, /bin/ping
Cmnd_Alias SOFTWARE = /bin/rpm, /usr/bin/yum
Cmnd_Alias SERVICES = /sbin/service, /usr/bin/systemctl start
Cmnd_Alias STORAGE = /bin/mount, /bin/umount
Cmnd_Alias DELEGATING = /bin/chown, /bin/chmod, /bin/chgrp
Cmnd_Alias PROCESSES = /bin/nice, /bin/kill, /usr/bin/kill, /usr/bin/killall
Cmnd_Alias Grant = /bin/rm, /bin/ls
# 3.使用sudo开始分配权限
OPS ALL=(ALL) NETWORKING,SOFTWARE,SERVICES,STORAGE,DELEGATING,PROCESSES
DEV ALL=(ALL) SOFTWARE,PROCESSES
# 查看自己有哪些sudo权限
[oldxu@oldboyedu ~]$ sudo -l
比较危险的命令:
vim
rm
su
cp
chmod
chown
1.什么是权限?
2.为什么要使用权限?
3.权限与用户之间的关系?
4.权限中的rwx是干什么的?
5.验证权限rwx对文件和对目录的含义?
6.如何变更一个文件至其他用户?
7 6 4
文件示例: rwxrw-r-- alice hr file1.txt
Q1: alice对file1文件拥有什么权限?
Q2: jack 对 file1.txt 文件有什么权限? 前提:jack 属于 hr 组
Q3: tom 对 file1.txt 文件有什么权限?
针对 hr 部门的访问目录/home/hr 设置权限,要求如下:
1.root 用户和 hr 组的员工可以读、写、执行。
2.其他用户或者组没有任何权限。
1.需要一个hr组;
2.hr中需要用户; zhangsan;
3.需要一个用户; erma;
[root@oldboyedu ~]# mkdir /home/hr -p
[root@oldboyedu ~]# groupadd hr
[root@oldboyedu ~]# useradd zhangsan -g hr
[root@oldboyedu ~]# useradd erma
变更属组;
[root@oldboyedu ~]# chown .hr /home/hr/
[root@oldboyedu ~]# ll -d /home/hr/
drwxr-xr-x 2 root hr 6 Mar 16 10:41 /home/hr/
变更权限 默认的是755 --> 770
[root@oldboyedu ~]# chmod 770 /home/hr/
[root@oldboyedu ~]# ll -d /home/hr/
drwxrwx--- 2 root hr 6 Mar 16 10:41 /home/hr/
文件设定权限:
rw: 读写
rx: 读,执行
一般不给rwx,因为权限太高了;
目录设定权限:
rx: 能浏览目录中的文件,并且能进入目录,但如果要操作该文件,需要看该文件的属性;
rwx: 能浏览目录中的文件,能进入目录,但如果要操作该文件,需要看该文件的属性(rwx), 但删除,拷贝,移动,看目录是否有w;
PS: 总结rwx对目录的影响
读取权限(r),如果目录只有r权限: 具有浏览目录及子目录权限
1.可以使用ls命令浏览目录及子目录, 但同时也会提示权限拒绝
2.使用ls -l命令浏览目录及子目录,文件属性会带问号,并且只能看到文件名
总结: 目录只有r权限,仅仅只能浏览内的文件名,无其他操作权限
写入权限(w),如果目录只有w权限: 具有增加、删除或修改目录内文件名权限(需要x权限配合)
PS: 如果目录有w权限, 可以在目录内创建文件, 删除文件(跟文件本身权限无关)
不能进入目录、不能复制目录、不能删除目录、不能移动目录
执行权限(x),如果目录只有x权限
1.只能进入目录
2.不能浏览、复制、移动、删除
3.Linux权限总结与注意事项
文件r权限, 只给用户查看,无其他操作
文件rw权限, 可以查看和编辑文件内容
文件rx权限, 允许查看和执行文件、但不能修改文件----->(脚本文件、命令文件)
文件rwx权限, 能读,能写,能执行,但不能删除,因为删除需要看上级目录的权限有没有w----->(谨慎赋予)
目录rx权限, 允许浏览目录内文件以及子目录, 不允许在该目录下创建文件、删除文件
目录rw权限, 能查看目录,能往目录写入文件,但无法进入目录----->(使用的情况太少)
PS: 文件的 x 权限小心给予,目录的 w 权限小心给予。
PS: 文件通常设定的权限是644,目录设定的权限是755。
程序-->运行-->进程 --> ( 用户 )
进程能够以什么样的方式去访问一个文件或目录,
取决于这个进程所运行的用户身份对该文件或目录拥有什么样的权限:
chmod: 变更权限
chmod 777
chmod 666
chmod -R 644
chown: 变更属主和属组
chown -R www PATH/ # 仅变更属主
chown -R .www PATH/ # 仅变更属组
chown -R www.root PATH/ # 同时变更属主和属组;
文件类型:
-
s
d
c
l
b
权限:
rwxrwxrwx
硬连接数:
2
用户和用户组
用户和权限之间的关系;
特殊权限:
s
t
练习基础命令+用户+权限+思考
project_a
a1
a2
project_b
b1
b2
需求如下:
0.创建项目同名的组,并将用户加入到组中;
1.所有目录,文件保存在/project_all目录下;
2.在/project_all下创建三个项目目录,分别为 project_a,project_b
3.各个项目之间不可以互相访问(project_a项目不可访问prohect_b );
4.在每个项目下创建一个与用户同名的目录
5.相同部门之间可以互相查看文件内容,但不可以修改,用户自己创建的文件自己可以修改;
需求0:
[root@oldboyedu ~]# groupadd project_a
[root@oldboyedu ~]# groupadd project_b
[root@oldboyedu ~]# useradd usera_1 -g project_a
[root@oldboyedu ~]# useradd usera_2 -g project_a
[root@oldboyedu ~]# useradd userb_1 -g project_b
[root@oldboyedu ~]# useradd userb_2 -g project_b
需求1:
[root@oldboyedu ~]# mkdir /project_all
需求2:
[root@oldboyedu ~]# mkdir /project_all/project_{a..c} -pv
需求3:
[root@oldboyedu ~]# chown .project_a /project_all/project_a/
[root@oldboyedu ~]# chown .project_b /project_all/project_b/
[root@oldboyedu ~]# chown .project_c /project_all/project_c/
[root@oldboyedu ~]# chmod 770 /project_all/project_a/
[root@oldboyedu ~]# chmod 770 /project_all/project_b/
[root@oldboyedu ~]# chmod 770 /project_all/project_c/
需求4:
[root@oldboyedu ~]# mkdir -p /project_all/project_a/usera_1
[root@oldboyedu ~]# mkdir -p /project_all/project_a/usera_2
[root@oldboyedu ~]# mkdir -p /project_all/project_b/userb_1
[root@oldboyedu ~]# mkdir -p /project_all/project_b/userb_2
需求5:
[root@oldboyedu ~]# chown -R usera_1.project_a /project_all/project_a/usera_1/
[root@oldboyedu ~]# chown -R usera_2.project_a /project_all/project_a/usera_2/
[root@oldboyedu ~]# chown -R userb_1.project_b /project_all/project_b/userb_1/
[root@oldboyedu ~]# chown -R userb_2.project_b /project_all/project_b/userb_2/
今日总结:
1.提权:
1.1) su 切换身份; 加- 不加-: 加载的环境变量不一样;
1.2) sudo提权;
用户 ==> 逻辑组 ==> 命名集合名称 ==> ( 相同命令归档到同一个命令集名称中; )
Command_File = /bin/ls,/bin/rm,/bin/cp
2.权限是什么:
约束 登录的用户能对系统所做的操作;
3.为什么有:
保护每个用户的隐私以及系统安全;
4.权限与用户关系:
当用户访问一个文件时,
系统会检查该用户是否属于文件的属主,则权限的前三位字符;
如果文件属于属组,则看中间三位;
如果都不是则看最后三位;
5.权限中的rwx是什么意思:
r: 读 4
w: 写 2
x: 执行 1
6.权限对文件和目录的影响;
7.如何变更权限; 如何变更属主和属组;
8.为什么需要变更属主和属组;
程序-->运行-->进程 --> ( 用户 )
进程能够以什么样的方式去访问一个文件或目录,
取决于这个进程所运行的用户身份对该文件或目录拥有什么样的权限:
如果用户有读权限,那么进程则有读权限;
痛点:
衣食住行;
成长需求; ( 知识 )
吃喝玩乐 (x);
学历; 能力;
昨日内容:
1.修改权限; chmod;
2.修改属主属组;
3.场景:
进程有关的场景;
Nginx服务;
xx服务;
今日内容:
特殊权限:
setuid
举个例子:当我们使用普通用户oldxu执行passwd命令会发生什么变化呢?
1.由于passwd命令拥有suid特殊权限(在命令属主权限位有一个s)
2.所以passwd命令在执行的过程中,会以命令的属主身份去运行该命令。(也是root身份)
3.oldxu --执行--> passwd命令 --setuid--> 转换为命令属主身份root执行 --> 完成 /etc/shadow 信息变更
chmod 4755
chmod u+s
例子: jack --> /etc/shadow 文件:
1.jack执行cat命令查看 /etc/shadow;
2.cat是由jack运行的, 能不能查看,取决于 jack用户对 /etc/shadow 有没有权限;
3./etc/shadow默认任何人都无权限; 所以查看失败; 提示 Permission denied
解决:
方式1: sudo 提权
jack ALL=(ALL) /usr/bin/cat
方式2: 将cat命令添加特殊权限位 suid;
[root@oldboyedu ~]# ll /bin/cat
-rwxr-xr-x. 1 root root 54080 Aug 20 2019 /bin/cat
[root@oldboyedu ~]# chmod 4755 /bin/cat
[root@oldboyedu ~]# ll /bin/cat
-rwsr-xr-x. 1 root root 54080 Aug 20 2019 /bin/cat
1.jack运行-->cat命令-->由于有特殊权限位suid, 所以cat命令不在是以jack的身份运行,而是由命令的属主身份运行
2.由于命令属主的身份是root,所以执行该命令时的身份是root;
3.root用户能够查看/etc/shadow文件, 所以jack用户执行cat命令会成功查看;
常规权限: 让jack这个普通用户为tom用户添加一个新的附加组;
jack --> usermod --> /etc/passwd /etc/shadow /home /var/spool/mail
特殊权限: 为useradd命令增加setuid
jack --> useradd --> root --> /etc/passwd /etc/shadow /home /var/spool/mail
[root@oldboyedu ~]# ll /sbin/useradd
-rwxr-xr-x. 1 root root 137616 Aug 9 2019 /sbin/useradd
[root@oldboyedu ~]# chmod 4755 /sbin/useradd
[root@oldboyedu ~]# ll /sbin/useradd
-rwsr-xr-x. 1 root root 137616 Aug 9 2019 /sbin/useradd
取消特殊权限:
[root@oldboyedu ~]# chmod 0755 /sbin/usermod
[root@oldboyedu ~]# ll /sbin/usermod
-rwxr-xr-x. 1 root root 133456 Aug 9 2019 /sbin/usermod
[root@oldboyedu ~]# chmod u-s /sbin/useradd
[root@oldboyedu ~]# ll /sbin/useradd
-rwxr-xr-x. 1 root root 137616 Aug 9 2019 /sbin/useradd
rm,vim,
suid:不可以对目录执行,他只针对二进制文件; 命令
setgid ( 了解 )
命令: 赋予setgid后, 任何用户在执行命令时,以这个命令的属组身份去运行;
目录: 赋予setgid后, 所有该目录下创建的文件,都按照属组的身份来;
用户 默认组 附加组
user1 user1 project
user2 user2 project
目录
/data/code
1.创建组, 以及用户
[root@oldboyedu ~]# groupadd project
[root@oldboyedu ~]# useradd user1 -G project
[root@oldboyedu ~]# useradd user2 -G project
2.创建项目目录,分配权限; 禁止其他人访问该目录,同时还要保证user1.user2能正常读写执行;
[root@oldboyedu ~]# chown .project /data/code/
[root@oldboyedu ~]# chmod 770 /data/code/
[root@oldboyedu ~]# ll -d /data/code/
drwxrwx--- 2 root project 6 Mar 17 10:47 /data/code/
3.给目录增加sgid;
[root@oldboyedu ~]# chmod 2770 /data/code/
[root@oldboyedu ~]# ll -d /data/code/
drwxrws--- 2 root project 24 Mar 17 10:52 /data/code/
4.user1创建文件.测试user2能否正常修改;
[user1@oldboyedu code]$ touch user1_file
[user1@oldboyedu code]$ ll
total 0
-rw-rw-r-- 1 user1 project 0 Mar 17 10:54 user1_file
5.测试user2修改文件; 属性没有发生变化
[user2@oldboyedu code]$ echo "aaa" > user1_file
[user2@oldboyedu code]$ cat user1_file
aaa
[user2@oldboyedu code]$ ll -d user1_file
-rw-rw-r-- 1 user1 project 4 Mar 17 10:56 user1_file
setbit
1.服务初始化,会存储一些临时文件,而这个服务运行的身份不足以存储到/opt等这样的目录; /tmp目录
2.yum命令; /tmp
chmod o+s /tmp
chmod 1777 /tmp
特殊属性;
chattr
lsattr
+i: 中毒后;由于病毒文件会不断串改文件; 加锁让其无法篡改,无法执行;
+a: append追加; 常用重要的日志文件加锁;使其无法删除内容只能追加内容
# 查看特殊属性
[root@oldboyedu ~]# lsattr /etc/passwd
---------------- /etc/passwd
# 加锁
[root@oldboyedu ~]# chattr +i /etc/passwd
[root@oldboyedu ~]# lsattr /etc/passwd
----i----------- /etc/passwd
# 测试
[root@oldboyedu ~]# mv /etc/passwd /tmp/
mv: cannot move ‘/etc/passwd’ to ‘/tmp/passwd’: Operation not permitted
[root@oldboyedu ~]# rm -f /etc/passwd
rm: cannot remove ‘/etc/passwd’: Operation not permitted
umask:
判断:
如果用户的UID大于199 并且 用户名称与组的名称一致,则执行then后面的代码;设定umask为002
如果不满足条件,则执行else后面的代码;
if [ $UID -gt 199 ] && [ "`/usr/bin/id -gn`" = "`/usr/bin/id -un`" ]; then
umask 002
else
umask 022
fi
# umask所有位位偶数时,奇数不需要加一
# umask部分位为奇数时,奇数位加一
# umask所有位为奇数时,奇数位加一
##################################
特殊权限:
suid:
执行时使用该命令的属主身份运行; chmod u+s chmod 4755
sgid:
文件: 执行时使用该命令的属组身份运行; chmod g+s chmod 2755
目录: 让创建的文件与目录的属组保持一致;
sbit:
粘滞位; 任何人都可以存储文件; 但只能自己删除; chmod o+s chmod 1755
服务初始化;
存储临时资源;
特殊的属性: chattr lsattr
+i: 锁住文件; 病毒的保护文件不被二次修改;
+a: 只允许追加; 重要的日志文件; 追溯事件产生的背景;
umask:
表示要减掉的权限; 默认系统的 目录权限是777 文件是666
默认权限 --> umask = 最终权限;
> >> | xargs