linux用户文件权限详解-精品总结(二)

Linux 用户文件权限
用户/用户组/超级用户
我们常见的用户是root,它是linux的超级用户,几乎全部的系统操作时又这个用户来完成的,并且是这些系统文件的属主。
它有很多特殊的权限:
采用chroot命令来改变进程的根目录;
创建设备文件;
设置系统时钟;
提高资源使用率的限度和进程的优先级;
设置系统的主机姓名;
配置网络接口;
打开特殊网络端口;
关闭系统
系统默认就存在的用户:
 bin: 原来是系统命令的属主(过时了)
 daemon: 原来是系统守护进程的属主(过时了)
 nobody: 远程连接root的文件属主(例如NFS共享的属主)
现在的系统划分的更细,不过root还是拥有了所有权力
用户的信息保存在/etc/passwd/etc/shadow
passwd 内保存用户的
用户名、UIDGID 描述主目录 登陆shell
shadow 内保存用户的
用户名、密码、用户到期时间等信息
 
linux 的每个用户都属于至少一个组,在创建用户的时候默认同时创建该用户同名组,可以通过给文件属组赋权使改组内多个用户同时拥有相同权限。
内的信息记录在/etc/group/etc/gshadow
group 内保存
组名、GID、组内成员
gshadow 内保存
组名、到期日期等信息、组内成员
 
权限位
刚才提到文件属性中,在分类后有一个文件权限总共9位字符,那就是文件的权限位。
权限位分三组
属主、属组、其他(其他代表着既不在属主中又不在属组中的用户)
每组三个属性
读取  r  掩码4
写入  w 掩码2
执行掩码1
文件: 
  读取权限允许用户打开和查看文件
  写入权限允许用户写入和删除文件
  执行权限允许用户执行文件(程序、脚本)
目录:
  读取权限允许用户打开和查看目录中文件
  写入权限允许用户修改目录中文件名和删除增添目录中的文件
  执行权限允许用户穿过目录到下一级目录中
 
权限位有2种表示方法
第一种是文件属性中显示的 -rwxrwxrwx  这就是一个普通文件依次有属主属组其他的读写执行权限
drw-r―r--  对目录有属主读写属组读其他读权限
第二种是掩码表示方法 7=4+2+1 上边的权限表示方法就是 777644
 
权限位就这么简单,但是确极其强大的捍卫者linux的安全....,灵活的控制文件的权限才能保证系统的安全
 
实际上权限掩码777不止只有3位,在前面应该还有一位7777
如果看到这样的表示  那么第二位开始时属主
第一位代表特殊的权限
 
粘粘位  掩码1xxx  设置后 权限位其他位x变成t
setuid    掩码2xxx
setgid    掩码4xxx
 
粘粘位是已经过时的使用
(如果目录设置粘附位,那么除非你是目录的属主、文件的属主、超级用户)
setuid 设置
(允许进程访问运行进程的用户不允许访问的文件)
setgid 设置后
(允许进程访问运行进程的组不允许访问的文件)
这个机制就是通过区分文件真实 UID 和有效 UID 实现的,这样做的作用是什么呢?
比如一个用户编辑了一个脚本,这个用户只是个普通用户,但这个脚本需要读取 root 用户的文件,那么我们该怎么办?把这个用户增加到 root 组?不行,这样获得了太大的权力,创建一个新组改变这个文件的属组,并把原来文件的属组和该用户都加入到这个组内?这样也许能完成我们需要的操作并且权限限制的也很好,但是这样复杂的操作在多个脚本同时使用一个文件的情况下就会出现问题。所以就出现 setuid 机制,它允许一个进程访问运行该进程无权访问的文件,我们只需要给我们认为安全的程序加上 setuid 就好了。
那么我们有一个问题破获有 setuid 的机制,不是可以直接获得 root 权限?这是一个不可避免的麻烦。
我们可以通过挂载磁盘禁止 setuid 机制来限制某些目录的使用
额外的标志
除了 linux 的文件权限位, ext 文件系统有他独自的标志
使用 lsattr 查看额外属性 chattr 更改额外属性
 -A 从不更新访问时间( st_atime; 出于性能原因)
 -a 只允许以追加模式写入 ( 只有 root 能设置 )
 -D 强制路更新被同步写入
 -d 不作备份 dump 忽略这个文件
 -i 让文件不可变动和不可删除(只有 root 能设置)
 -j 为数据变化和元数据都保留日志
 -S 强迫变动被同步写入 (不做缓冲)
文件的访问控制列表
linux 系统中,有一套文件的访问控制列表。
加载文件系统使用 mount �Co acl 就启用 acl 了访问控制列表
#getfacl        查看文件访问控制列表
#setfacl        更改文件访问控制列表
 -b 清除 acl
 -m 更改、增加 acl
 -x 清楚 acl
Acl 定义项格式
user [name] :( perms
group [name] :( perms
other [name] (perms)
mask [name] (perms)
Acl 定义规则
1,   Acl 与权限位强制保持一致,较为简单的 acl
 user :: (perms) 对应属主权限 group :: (perms) 对应属组权限 other :: (perms) 对应其他用户权限
2,   如果 acl 表中有两个以上的组,那么属组权限位对应的不再是 group :: (perms) 而是 mask :: (perms) 。并且 mask 定义了所有有名字的组,有名字的用户的最大权限
意思就是 mask 限制了除乐属主和 other 以外所有用户的最高权限,并且这个权限强制与属组权限位一致
#default Acl 还有一个默认项用来做继承用的
SUDO 的使用
sudo 命令可使某个用户以另一个用户的权限执行某个特定的文件
visudo 格式
主机别名
Host_Alias      (AliasName 大写 ) = host1, host2
用户别名
User_Alias      (AliasName 大写 ) = user1, user2
命令别名
Cmnd_Alias    (AliasName 大写 ) = cmnd1, cmnd2
sudo 格式
User HOST=(user)  Cmnd
User 可以使用 别名、用户名、组名 例如 :ADMINS user %group
       组名一定前面加 %
HOST 可以使用 别名   主机名   IP 地址
user 代表使用这个主机的用户   就是我们 sudo 后命令有效的 uid
Cmnd 可以使用 命令 别名
命令要全部路径 使用的时候也必须使用全部路径   可带参数
配置日志
Defaults@HOST log_host, logfile=/var/log/sudo.log
HOST 可以使用 别名 主机名   IP 地址
 
这个机制用于多服务器管理相当好,让我们忘掉 root 用户吧,使用我们自己的用户。我们可以减少我们的权限,增加安全性。在多个用户同时管理的时候,我们可以通过日志看到是哪个用户进行了操作,进行了什么操作。以便出现问题后快速恢复系统。

你可能感兴趣的:(linux,权限,职场,休闲)