-
11111
查看全部 -
11111
查看全部 -
getfacl 文件名 #查看ACL权限;
setfacl 选项 文件名 #设定ACL的权限;
例:setfacl -m u/g:用户名或组名:权限 目录或文件名
setfacl -m u:lw:rx /av
-m 设定ACL权限;
-x 删除指定的ACL权限;
-b 删除所有的ACL权限;
查看全部 -
11111
查看全部 -
11111
查看全部 -
11111
查看全部 -
dumpe2s -h /dev/sda5
查看全部 -
ACL权限
查看全部 -
文件就三个权限
所有者权限 组权限 其他权限 有时候不够用 这时候就需要ACL权限 用来解决用户身份不够的问题
查看分区ACL权限是否开启
dumpe2fs -h /dev/sda5
查看全部 -
chattr命令格式(对root生效)
chattr [+-=] [选项] 文件或目录
+ #增加权限
- #删除权限
= #等于某权限
i:如果对文件设置i属性,那么不允许对文件进行删除,改名也不能添加和 修改数据;如果对目录设置i属性,那么只能修改目录下文件的数据,但不能建立和删除文件
a:如果对文件设置a属性,那么只能在文件中增加数据,但不能删除也不能修改数据 如果对目录设置a属性,那么只允许在目录中建立和修改文件,但不允许删除
chattr +i abc #给abc文件赋予i权限,不能修改和删除
lsattr abc #查看abc文件权限
chattr -i abc #给abc文件取消i权限
chattr +i 123 #给目录赋予i权限
lsattr -d 123查看目录123本身的具有attr权限的文件
lsattr 123查看目录123下的具有attr权限的文件
文件a权限举例
mkdir lw
cd lw
vi dt
chattr dt
lsattr dt
vi dt #不能修改数据
echo asdasda >> dt
cat dt
目录a权限举例
cd ..
chatttr +a lw
lsattr -d lw/
cd lw
touch asd
rm -rf dt #不能删除
查看文件系统属性
lsattr 选项 文件名 查看文件系统属性
选项:-a 显示所有文件和目录
-d 仅列出目录本身的属性,仅列出目录本身的属性,而不是子文件的
查看全部 -
SBIT粘着位作用
粘着位目前只对目录有效
普通用户对该目录拥有w和x权限,即普通用户可以再次目录拥有写入权限
如果没有粘着位,因为普通用户拥有w权限,所以可以删除此目录下所有文件,包括其他用户建立的文件。一旦赋予了粘着位,除了root可以删除所有文件,普通用户就算拥有w权限,也只能删除自己建立的文件,但是不能删除其他用户建立的文件
举例:
root用户
cd /home/usr1/
mkdir 123
chmod 777 123
cd 123
touch av
chmod o+t /home/user1/123/
touch cangls
user1用户
rm -rf cangls
设置与取消粘着位
设置粘着位
chmod 1755 目录名
chmod o+t 目录名
取消粘着位
chmod 0755 目录名
chmod o-t 目录名
补充:
ll -d /tmp/ #目录默认有SBIT权限
1.SUID只能对执行文件生效,SGID能对目录和执行文件生效,SBIT只能对目录生效
2.要赋予SBIT 权限必须给目录普通用户赋予7权限,因此也比较危险。
3.超级用户赋予SBIT权限: chmod o+t 或者 chmod 1***
4.目录有SBIT权限后,任何普通用户都可以在目录下新建文件,但是只能删除自己创建的文件,不允许删除其它用户的文件。
5. /tmp/ 目录默认有SBIT权限
查看全部 -
SetGID针对文件的作用
只有可执行二进制程序才能设定SGID权限
命令执行者要对该程序拥有x(执行)权限
命令执行执行程序时,组身份升级为该程序文件的属组
SetGID权限只在程序执行过程中有效
例子 、usr/bin/locate具有SetGID身份
解释
/usr/bin/locate是可执行二进制程序,可以赋予SGID
执行用户user1对/usr/bin/locate命令拥有执行权限
执行/usr/bin/locate命令时,组身份会升级为slocate组而slocate组对/var/lib/mlocate/mlocate数据库拥有r权限,所以普通用户可以使用locate命令查询mlocate.db数据库
命令结束,user1用户的组身份返回为user1组
SetGID针对目录的作用
普通用户必须对此目录必须拥有r和x权限,才能进入此目录
普通用户在此目录中的有效组会变成此目录的属组
若普通用户对此目录拥有w权限,新建的文件的默认属组是这个目录的属组
举例:
root用户
cd /tmp/
mkdir test
chmod 777 test
user1用户
cd /tmp/test
touch cangls
ll
chmod 2777 test #切换到root用户
touch bols
ll
设定SetGID
chmod g+s 文件名
chmod 2755 文件名
取消SetGID
chmod g-s 文件名 chmod 0755 文件名
测试:
touch abc
chmod g+s abc
举例:
ll /usr/bin/locate
ll /var/lib/mlocate/mlocate
查看全部 -
设定SetUID的方法
4代表SUID
chmod 4755 文件名
chmod u+s 文件名
chmod u-s 文件名 取消某文件的SetUID (chmod g-s 文件名 //组)
chmod u+s 文件名 增加某文件的SetUID (chmod g+s 文件名 //组)
取消SetUID的方法
chmod 0755 文件名
chmod u-s 文件名
危险的SetUID(尽量少操作SetUID)
关键目录应严格控制写权限。比如“/”、“/usr”等
用户的密码设置要严格遵守密码三原则:复杂性、易记性、时效性
实际工作当中应该将默认具有SetUID权限的文件作一列表,定时检查有没有这之外的文件被设置了SetUID权限。
绝不允许给系统文件赋SUID权限,如chmod 4755 /bin/vi
定期检查suid和sgid
#!/bin/bash
find / -perm -4000 -o -perm -2000> /tmp/setuid.check #搜索系统中所有拥有SUID和SGID的文件,并保存到临时目录中
for i in $(cat /tmp/setuid.check) #for循环,每次循环取出临时文件中的文件名赋予变量i
脚本
do
grep $i /home/suid.log> /dev/null #对比这个文件名是否在模板文件中 临时扫描出的文件名是否在这个模板文件中 把所有输出丢到/dev/null
if [ "$?" != "0" ] #检测上一个命令的返回值,如果不为0,证明上一个命令报错
then
echo "$i isn't in listfile!">>/home/suid_log_$(date +%F)
#如果文件名不在模板文件中,则输出错误信息,并把报错报错到日志当前日期中
fi
done
rm -rf /tmp/setuid.check
操作步骤
vi suid_check.sh
chmod 755 suid_check.sh
chmod u+s abc
./suid_check.sh
cat suid_log_........
查看全部 -
文件特殊权限
SetUID
SetGID #UID与GID极不安全 尽量不去修改
Sticky BIT
SetUID功能
1.只有可执行二进制程序才能设定SUID权限
2.命令执行者要对该程序拥有x(执行)权限(如果当前文件没有执行权限,着会出现大S权限,大S权限是无效的,s=S+x,s才是超级权限。)
3.命令执行者在执行该程序时获得该程序文件属主身份
4.SetUID权限只在程序执行过程中有效,也就是说身份改变只在程序执行过程中有效
设定SetUID方法
chmod 4755 文件名
chmod u+s 文件名
举例:
touch abc
chmod 755 abc
ll #执行这三条命令后可以看到abc为绿色
umask #0022 0第一位是特殊权限
chmod 4775 abc #给abc赋予UID权限 必须是执行文件
ll #该文件变为红色 提示这个文件要小心
touch bcd
chmod 4644 bcd #与abc相比无执行权限 s=S+x
ll
passwd拥有SetUID权限,所以普通用户可以修改自己密码
ll /usr/bin/passwd #可查看passwd详细权限 -rwsr-xr-x.
cat命令没有SetUID权限,所以普通用户不能查看/etc/shadow文件内容
ll /bin/cat #-rwxr-xr-x 无s
查看全部 -
授权普通用户可以添加其他用户
wheris useradd
visudo #sudo赋予普通用户user1添加用户的命令 在最后加上user1 ALL=/usr/sbin/useradd
sudo /usr/sbin/useradd cangls #切换到user1用户执行该命令
cat /etc/passwd #查看cangls是否添加完成
授权普通用户可以添加用户密码
wheris passwd
visudo #在最后加上user1 ALL= /usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd "", !/usr/bin/passwd root
sudo -l
sudo /usr/sbin/passwd cangls
#授权user1用户设定密码的权限
#注意:这样设置极不安全,因为user1可以设置root用户密码了,这是不合理的,应该按下面这样写
user1 ALL= /usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd "", !/usr/bin/passwd root
#说明1:[A-Za-z]* ,这是个正则表达式,passwd后面的跟的用户名包括任何字母,*代表字母可以重复0-N次
#说明2:!/usr/bin/passwd "",!代表取反,这意味着passwd 后面跟的用户名不能为空,因为为空代表设置自身密码,而user1执行设置密码命令时使用的是root身份
#说明3:!/usr/bin/passwd root,!代表取反,这意味着passwd后面不能跟root
#说明4:,后面一定要有空格,没有空格不生效
#说明5:三段代码顺序不能颠倒
#原则:sudo赋予的命令越详细,普通用户的权限越小,赋予的越简单,权限越大
user1 ALL=/bin/vi #不能在visudo里添加该命令。该赋予user1使用vi更改任意文件的权限(甚至包括/etc/shadow 保存用户名密码文件)
查看全部
举报