Linux
用户文件权限
用户/用户组/超级用户
我们常见的用户是root,它是linux的超级用户,几乎全部的系统操作时又这个用户来完成的,并且是这些系统文件的属主。
它有很多特殊的权限:
采用chroot命令来改变进程的根目录;
创建设备文件;
设置系统时钟;
提高资源使用率的限度和进程的优先级;
设置系统的主机姓名;
配置网络接口;
打开特殊网络端口;
关闭系统
系统默认就存在的用户:
bin:
原来是系统命令的属主(过时了)
daemon:
原来是系统守护进程的属主(过时了)
nobody:
远程连接root的文件属主(例如NFS共享的属主)
现在的系统划分的更细,不过root还是拥有了所有权力
用户的信息保存在/etc/passwd和/etc/shadow内
passwd
内保存用户的
用户名、UID、GID 描述主目录 登陆shell
shadow
内保存用户的
用户名、密码、用户到期时间等信息
linux
的每个用户都属于至少一个组,在创建用户的时候默认同时创建该用户同名组,可以通过给文件属组赋权使改组内多个用户同时拥有相同权限。
内的信息记录在/etc/group和/etc/gshadow中
group
内保存
组名、GID、组内成员
gshadow
内保存
组名、到期日期等信息、组内成员
权限位
刚才提到文件属性中,在分类后有一个文件权限总共9位字符,那就是文件的权限位。
权限位分三组
属主、属组、其他(其他代表着既不在属主中又不在属组中的用户)
每组三个属性
读取 r 掩码4
写入 w 掩码2
执行 x 掩码1
文件:
读取权限允许用户打开和查看文件
写入权限允许用户写入和删除文件
执行权限允许用户执行文件(程序、脚本)
目录:
读取权限允许用户打开和查看目录中文件
写入权限允许用户修改目录中文件名和删除增添目录中的文件
执行权限允许用户穿过目录到下一级目录中
权限位有2种表示方法
第一种是文件属性中显示的 -rwxrwxrwx 这就是一个普通文件依次有属主属组其他的读写执行权限
drw-r―r--
对目录有属主读写属组读其他读权限
第二种是掩码表示方法 7=4+2+1 上边的权限表示方法就是 777、644
权限位就这么简单,但是确极其强大的捍卫者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
用户吧,使用我们自己的用户。我们可以减少我们的权限,增加安全性。在多个用户同时管理的时候,我们可以通过日志看到是哪个用户进行了操作,进行了什么操作。以便出现问题后快速恢复系统。