Linux权限管理之基本权限
1、文件权限: -rw-r--r-- : r 读 w 写 x 执行
-: 文件类型(- 文件 d 目录 l软链接文件)rw- r-- r--
u所有者(user) g所属组(group) o其他人(other)
2、chmod命令
chmod 选项 模式 文件名
选项 :-R 递归
模式 :[ugoa] [+-=] [rwx]
例如:chmod u+x 文件名 给user赋予x权限
chmod g+w,o+w 文件名 给....
chmod a=rwx 文件名 给所有人...
权限的数字表示:r --- 4 w --- 2 x --- 1
rwxr-xr-x 755
chmod 755 abc
对文件来讲:最高权限是 X
对目录来讲:最高权限是 W 目录只有0 5(rx) 7(rwx)三个权限
3、权限对目录和文件的作用
r:可以查询目录下的文件名(ls、ll)
w:具有修改目录结构的权限。如新建文件和目录,删除此目录下文件和目录,重命名此目
录下文件和目录,剪切(touch、rm、mv、cp)
x:可以进入目录 (cd)
权限对文件的作用
r:读取文件内容(cat、more、head、tail)
w:编辑、新增、修改文件内容(vi、echo)
-但是不包含删除文件
x:可执行
4、修改文件的所有者和所属组
chown 用户名:组名 文件名 例如:chown user1:user abc
chgrp 组名 文件名
useradd user1 #添加用户 groupadd user #添加组
gpasswd -a user1 user #把user1添加到user里
chown user1:user 文件名 #赋予user1和user对该文件的权限
Linux权限管理之特殊权限
一、ACL权限:给予所有者、所属组和其他人之外的用户的权限
1、ACL权限 (1)查看分区ACL权限是否开启:dumpe2fs -h /dev/sda5
#dumpe2fs命令是查询指定分区详细文件系统信息的命令
选项: -h #仅显示超级块中的信息,不显示磁盘块组的详细信息
(2)临时开启分区ACL权限:mount -o remount,acl /
#重新挂载根分区,并挂载加入ACL权限
(3)永久开启分区ACL权限:vi /etc/fstab
UUID=c2......./ ext4 defaults,acl 1 1 #加入acl
mount -o remount / #重新挂载或重启系统,使修改生效
2、ACL查看与设定
useradd tony groupadd stu mkdir /abc chown tony:stu /abc
chmod 770 /abc useradd lw setfacl -m u:lw:rx abc
#给用户lw赋予r-x 权限,使用'u:用户名:权限' 格式
#为组group2分配acl权限,使用'g:组名:权限' 格式
getfacl abc #查看acl权限
3、删除ACL权限
setfacl -x u:用户名 文件名 #删除指定用户的ACL权限
setfcal -x g:组名 文件名 #删除指定用户组的ACL权限
setfacl -b 文件名 #会删除文件的所有ACL权限
4、递归和默认ACL权限 #权限只能赋予目录,不能赋予文件
(1)递归是父目录在设定ACL权限时,所有的子文件和子目录也会拥有相同的ACL权限
setfacl -m u:用户名:权限-R 目录名(绝对路径)
(2)默认ACL权限的作用是如果给父目录设定默认ACL权限,那么父目录中所有新建的
子文件都会继承父目录的ACL权限
setfacl -m d:u:用户名:权限 目录名(绝对路径)
二、sudo权限
1、sudo权限
root把本来只能超级用户执行的命令赋予普通用户执行
sudo的操作对象是系统命令
2、sudo的使用
visudo #实际修改的是/etc/sudoers文件
root ALL = (ALL) ALL
#用户名 被管理主机的地址=(可使用的身份) 授权命令(绝对路径)
#%wheel ALL==(ALL) ALL
# %组名 被管理主机的地址=(可使用的身份) 授权命令(绝对路径)
例子1、授权普通用户可以重启服务器
visudo user1 ALL=(ALL) /sbin/shutdown -r now
sudo /sbin/shutdown -r now
普通用户执行sudo赋予的命令:
su - user1 #切换到user1用户
sudo -| #查看可用的sudo命令
例子2、授权普通用户可以添加其他用户
visudo user1 ALL=/usr/sbin/useradd
user1 ALL=/usr/bin/passwd #授予用户设定密码的权限
user1 ALL=/usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd'',
!/usr/bin/passwd root #不能设定root用户的密码
三、文件特殊权限 (特殊权限尽量少修改)
1、SetUID的功能
只有可以执行的二进制程序才能设定SUID权限
命令执行者要对该程序拥有X(执行)权限
命令执行者在执行该程序时获得该程序文件属主的身份
SetUID权限只在该程序执行过程中有效,也就是说身份改变只在程序执行过程中有效
2、设定SetUID的方法
4代表SUID
chmod 4(0)755 文件名 chmod u+(-)s 文件名 (u是所有者) 0和- 是取消USID
passwd命令拥有SetUID权限,所有普通用户可以修改自己的密码
ll /usr/bin/passwd -rwsr-xr-x.....
cat命令没有SetUID权限,所以普通用户不能查看/etc/shadow文件内容
ll /bin/cat -rwxr-xr-x......
3、危险的SetUID
关键目录应严格控制写权限。如'/','/usr'等
用户的密码设置要严格遵守密码三原则:复杂性、易记忆性、时效性
对系统中默认应该具有SetUID权限的文件作一列表,定时检查有没有这之外的文件
被设置了SetUID权限:
{ #!/bin/bash
find / -perm -4000 -o -perm -2000 > /tmp/setuid.check
#搜索系统中所有拥有SUID和SGID的文件,并保存到临时目录中。
for i in $(cat /tmp/setuid.check)
#做循环,每次循环取出临时文件中的文件名
do
grep $i /root/suid.log > /dev/null #( '> /dev/null'抛进回收站)
#比对这个文件名是否在模板文件中(suid.log是新Linux系统运行find / -perm -4000
-o -perm -2000 > /root/setuid.log保存的原始包含SUID和SGID的信息)
if [ '$?' != '0' ]
#检测上一个命令的返回值,如果不是0,证明上一个命令报错
then
echo '$i isn't in listfile!' >> /root/suid_log_$(date +%F)
#如果文件名不在模板文件中,则输出错误信息,并把报错送到日志中
fi
done
rm -rf /tmp/setuid.check
#删除临时文件 }
实例:touch abc
find / -perm -4000 -o -perm -2000 > /tmp/suid.log #suid_log模板
vi suid_check.sh 然后把上面脚本语言粘贴到suid_check.sh中,'shift+:wq'保存退出
chmod 755 suid_check.sh #赋权
ll
chmod u+s abc #给abc USID权限
./suid_check.sh #执行脚本
ls
cat suid_log_2016-3-16 #查看新文件的内容,有多余的有SUID的abc文件
rm -rf abc
1、SetGID针对文件的作用
只有可执行的二进制程序才能设置SGID权限
命令执行者要对该程序拥有X权限
命令执行程序时,组身份升级为该程序文件的属组
SetGID权限同样只在该程序执行过程中有效。
2、SetGID针对目录的作用
普通用户必须对此目录拥有r和x权限,才能进入此目录
普通用户在此目录中的有效组会变成此目录的属组
若普通用户在此目录拥有w权限时,新建的文件默认属组是该目录的属组
3、设定SetGID
2代表SGID:chmod 2755 文件名 chmod g+s 文件名
1、SBIT粘着位作用
粘着位目前只对目录有效
普通用户对该目录拥有w和x权限
如果没有粘着位,因为普通用户拥有w权限,所以可以删除此目录下所有文件,包括其他用户
建立的文件。一旦赋予看粘着位,除了root可以删除所有文件,普通用户就算拥有w权限,也只能
删除自己建立的文件,但不能删除其他用户建立的文件。
2、设置与取消粘着位
设置粘着位: chmod 1755 目录名 chmod o+t 目录名 (o是other)
取消粘着位: chmod 0777 目录名 chmod o-t 目录名
四、不可改变位权限
1、chattr命令格式
chattr [+-=] [选项] 文件或目录名
+:增加权限
-:删除权限
=:等于某权限
chattr选项包括:i和a a等价于append、 i等价于insert
i:如果对文件设置i属性,那么不允许对文件进行删除、改名,也不能添加和修改数据;如果
对目录设置i属性,那么只能修改目录下文件的数据,但不允许建立和删除文件。
a:如果对文件设置a属性,那么只能在文件中增加(echo)数据,但是不能删除也不能修改数据;
如果对目录设置a属性,那么只允许在目录中建立和修改文件,但不允许删除。
2、查看文件系统属性
lsattr 选项 文件名
选项: -a 显示所有文件和目录
-d 若目标是目录,仅列出目录本身的属性,而不是子文件的
实例:chattr +i abc(文件名)
lsattr abc
lsattr -d 123(目录)
chattr +a abc
echo bbbbb >> abc (添加数据,不能用vi命令)