用户及文件权限
用户及文件权限
1.用户理解
用户就是系统使用者的身份,一般有超级用户和普通用户
在系统中用户存储为若干串字符和若干个系统配置文件
用户信息涉及到的系统配置文件:
/etc/passwd ###用户信息
比如:kiosk用户
kiosk:x:1000:1000:kiosk:/home/kiosk:/bin/bash
用户为kiosk:密码x(隐藏起来了):uid为1000:gid为1000:说明文字“kiosk”:家目录/home/kiosk:用户使用的shell为/bin/bash
/etc/shadow ###用户认证信息
比如kiosk用户的认证信息
kiosk:$6$lYEMED5q$ydTHZAWDoggDEcS13WQO26vzofATD2UcMSagP8qPBl3PcRJujxI10lAbz25l9IuWIL8QMtrUZulzTSzcQCTJm0:17524:0:999999:3:2::
用户为kiosk:密码为绿色区域:最后一次密码修改该时间-默认1970年1月1号:最短有效期0天:最长有效期999999天:警告期3天:非活跃期2天:帐号到期日-未设置
/etc/group ###组信息
比如root组信息 root:x:0:
组名称为root:组密码x(隐藏起来了):组id为0:附加组成员无
/etc/gshadow ###组认证信息
/home/username ###用户家目录
/etc/skel/.* ###用户骨架文件
当不小心删除了/etc/passwd 可以执行命令 cp /etc/passwd- /etc/passwd ,相应的/etc/group也有相应的备份文件/etc/group-
2.用户管理
(1).用户建立(仅超级用户,普通用户建立新用户需要相关权限,后边再说)
useradd 参数 用户名字
-u ##指定用户uid
-g ##指定用户初始组信息,这个组必须已经存在
-G ##指定附加组,这个组必须存在
-c ##用户说明
-d ##用户家目录
-s ##用户所使用的shell,/etc/shells记录了用户能使用shell的名字
(2)用户删除
userdel -r 用户名称 ## -r 表示删除用户信息及用户的系统配置
(3)组的建立
groupadd -g 组名 ##建立组
groupdel 组名字 ##删除组
对以上命令进行实验,执行以下命令进行实验的监控
回车后,打开监控内容,新建一个shell
建立westos新用户,初始uid为1003,监控内容可以看出相应的组建立了gid为1003,家目录为/home/westos
命令: useradd -u 1003 westos
再次实验useradd -g westos(实验前执行userdel -r westos 删除westos用户的配置信息)gid初始为1004,2222,很明显无法建立,因为gid为1004,2222的组不存在,试 试21,成功了
命令 :userdel -r westos useradd -g 21 westos
删除westos配置信息,指定westos用户附加组cpdump,组id为72
命令: userdel -r westos useradd -G 72 westos
添加说明westos是进行用户建立实验的用户,第一次未执行userdel -r westos命令westos已经存在,故无法建立,系统默认westos uid gid为1001。
命令:userdel -r westos useradd -c “用户建立的实验” westos
删除westos用户信息,新建westos指定家目录为/mnt/w-home
命令:userdel -r westos useradd -d /mnt/w-home westos
删除用户westos用户信息,指定所使用shell为/bin/tcsh
命令: userdel -r westos useradd -s /bin/tcsh westos
新建组group1 ,gid为1234
命令: groupadd -g 1234 group1
删除很简单了直接执行命令: groupdel group1
(4)用户id信息的查看
id 参数 用户
-u ##用户uid
-g ##用户初始组id
-G ##用户所有所在组id
-n ##显示名称而不是id数字
-a ##显示所有信息
id查看westos用户信息;id -u westos查看westos uid显示1001,其他同此。需要说明的是,id -a westos和id westos显示结果相同。
(5)用户信息更改
usermod 参数 用户名
-l ##更改用户名称
-u ##更改uid
-g ##更改gid
-G ##更改附加组
-aG ##添加附加组
-c ##更改说明
-d ##更改家目录
-md ##更改家目录指定及家目录名称
-s ##更改shell
-L ##冻结帐号
-U ##解锁
实验
将用户名westos改成redhat
执行命令 usermod -l redhat westos 监控信息中名称变成redhat ;usermod -l【欲修改用户新名称】 【原名称】
将westos用户的uid改为1005,输入命令usermod -u 1005 westos 后回车显示改变了。Gid的修改需要组id已经存在,否则无法修改,不再实验
将westos添加到附加组slocate中
执行命令: usermod -G 21 westos
将westos 添加到group1中
命令 usermod -G group1 westos
可以发现usermod -G 组名称/组id用户 都是可以将其添加到附加组内的
再把westos添加到group1附加组的基础上,还要把westos添加到slocate组中
执行命令: uesrmod -aG 21 westos 意思是在westos已经属于group1组的基础上在将其添加到slocate中
更改westos用户家目录并且指定到/mnt/test下
执行命令: usermod -md /mnt/test/ westos
锁定及解锁westos用户,usermod -L westos锁定用户密码,usermod -U westos解锁密码,用cat /etc/shadow | tail -n 1查看westos用户密码状态,注意密码位前的!字 符哦。带!表示锁定状态。
(6).用户权力下放
. 在系统中超级用户可以下放普通用户不能执行的操作给普通用户
**下放权力配置文件:/etc/sudoers
**下放权力的方法
超级用户执行visudo进入编辑/etc/sudoers模式
格式:
【获得权限用户 主机名称=(获得到的用户身份) 命令】
Eg:student foundation10=(root) /usr/sbin/useradd
student用户能在主机为 foundation10上以超级用户身份执行/usr/sbin/useradd
**执行下放权限命令
【sudo 命令】 ##如果第一次执行sudo需要输入当前用户密码
在/etc/sudoers中如果设置如下:
student foundation10=(root) NOPASSWD: /usr/sbin/useradd
表示用户调用sudo命令的时候不需要自己密码
实验:
普通用户student不具备新建用户权限,也就是无法执行/usr/sbin/useradd命令
新开shell切换root用户执行visudo(visudo = vim /etc/sudoers)前者命令形式如果改错会有提示,安全一些,建议使用前者命令
hostname查询主机名称,在104-105行写入说明和命令,注意说明以##开头。
保存退出提示错误,按e进入检查修改,NOPASSWD后少:字符
修改完成后保存退出,以student身份新建用户lee,并用id lee查看用户信息。
注意:授权第一次新建用户是需要密码的,第二次就不需要了。
执行命令前加上sudo, 即sudo useradd lee
(7)用户认证信息的控制(root用户)
passwd [-参数] 用户名称
-l ##锁定帐号
-u ##解锁帐号
-n ##设置密码最短有效期
-x ##设置密码最长有效期
-w ##设置修改警告期
-i ##设置非活跃天数
-S ##查看用户密码状态
-e ##登陆界面强制要求用户修改密码
chage 参数 用户名称
-d ##上一次更改日期,如果设定成0,用户登陆系统后 必须修改自己的密码
-m ##设置密码最短有效期
-M ##设置密码最长有效期
-W ##设置密码修改警告期限
-I ##设置非活跃天数
-E <YYYYMMRDD> ##帐号失效期
实验
执行命令 watch -n 1 | tail -n 3 /etc/shadow进入westos密码信息监控模式
westos密码位后依次是密码上次修改日期:密码最短有效期:密码最长有效期:密码修改警告期:非活跃天数:密码过期日期
利用passwd修改westos密码最短有效期10天,最长有效期8888天,警告期30天,非活跃天数15天
登陆强制改密码
执行命令passwd -e westos 显示成功,监控信息显示上次修改日期位0,logout退出后登陆需要更改密码,就不实验了。
利用chage设置student用户密码最短有效期5天,最长有效期1234天,警告期10天,非活跃天数2天,密码过期日2019-12-31
上图中显示并不是2019-12-31日反而是18261,其实从1971年1月1日算起的。了解就可以了。
3. 文件权限
(1)文件属性的查看 ls -l filename
(以下**1-8对应上图中1-8相应的位置)
**1."-":文件类型
- ##普通文件
d ##目录
c ##字符设备
s ##套接字
p ##管道
b ##快设备
l ##连接
**2."rw-r--r--":文件读写权限
* 所有人的权限
$ 所有组的权限
@ 其他人的权限
**3."1":
对文件:文件内容被系统记录的次数
对目录:目录中文件属性的字节数
**4."root":文件所有人
**5."root":文件所有组
**6."0":文件内容的大小
**7."Jan 1 05:10":文件最后一次被修改的时间
**8."file":文件名字
监控命令
watch -n 1 ls -lR /mnt
4.文件普通权限
u:文件所有人对文件可以读写
g:文件组成员对文件可读
o:其他人对文件可读
u优先匹配,g次优先,o当u,g不匹配时匹配
r 权限(read读的意思)
对文件:可以查看文件中的字符
对目录:可以查看目录中文件的信息
w权限(write写的意思)
对文件:可以更改文件内字符
对目录:可以在目录中添加删除文件
x权限(execute执行的意思)
对文件:可以运行文件内记录的程序动作
对目录:可以进入目录中
5.字符方式修改该文件权限
命令:chmod [-R] <u|g|o><+|-|=><r|w|x> file|dir
chmod u-x file1 ##file1拥有者去掉x权限
chmod g+w file1 ##file1拥有组添加w权限
chmod u-x,g+w file1 ##file1拥有者去掉x权,file1拥有组添加w权限
chmod ugo-r file2 ##file2的用户组其他人去掉r权限
chmod ug+x,o-r file3 ##file3用户和组添加x权限,其他人去掉r权限
实验:在/tmp下新建文件file和目录westos,在wetsos下新建linux1,linux2,linux3三个文件,并对其进行监控
给与/tmp下file文件其他人可写的权力,以及file文件所有组可执行的权限
执行命令:chmod g+x,o+w /tmp/file
给/tmp/westos/linux3任何人可执行权限
命令:chmod ugo+x /tmp/westoslinux3
6.数字方式修改该文件权限
在linux中
r=4
w=2
x=1
文件权限数字表示方式
u=rw-=4+2+0=6
g=r--=4+0+0=4
o=r--=4+0+0=4
所以文件权限表示为644
chmod 修改后权限值 file
chmod 777 file
7=rwx
6=rw-
5=r-x
4=r--
3=-wx
2=-w-
1=--x
0=---
实验:将linux3中所有人所有组其他人的x权限去除,linux3所有*限为755,去除所有人x权限即755-111=644
执行命令:chmod 644 /tmp/westos/linux3
7.系统默认权限的设定
从系统存在角度来说,开放权力越大,系统存在意义越高
从系统安全角度来说,开放权力越少,系统安全性越高
所以系统设定新建文件或目录会去掉一些权限 umask拿掉默认的022,对于文件666-022,对于目录777-022,所以root新建出来的文件权限为644,目录为755
设定方式
umask ##查看系统保留权限默认为022
umask 077 ##修改该系统保留权限为077,此设定为临时设定,只当前shell中生效
永久设定方式:
vim /etc/bashrc ##shell 其中002为普通用户umask 022超级用户umask
**修改成功:wq保存退出
vim /etc/profile ##系统 002普通用户umask 077超级用户umask
以上两个文件umask设定值必须保持一致
执行命令:source /etc/bashrc
source /etc/profile
让设定立即生效
重新打开shell查询umask,改过来了
新建一个文件查看权限,666-077=600
新建一个目录查看权限,777-077=700
没错吧
8.文件所有人所有组的管理
chown username file|dir ##更改文件的所有人
chown username.groupname file|dir ##更改所有人所有组
chown -R username dir ##更改目录本身及里面所有内容的所有人
chgrp -R groupname dir ##更改目录本身及里面所有内容的所有组
(chown = chage owner 改变拥有者,chgrp = chage group 更改组别)
实验:改变/tmp/file 所有人为lee ,所有组为tom
执行命令:chown lee.tom /tmp/file (注意所有者与所有组之间是点不是逗号)
把westos的所有人改成tom
将westos以及其目录下的linux2的所有组改为student
将/tmp所有文件以及目录(含目录里的所有文件)所有组改为student
9.特殊权限
suid ##冒险位
只针对二进制可执行文件,
文件内记录的程序产生的进程的所有人为文件所有人
和进程发起人身份无关
设定方式:
chmod u+s file
suid=4
或
chmod 4xxx file
实验:以/bin/touch为例
对于二进制文件/bin/touch,所有人添加s权限,用户lee使用/bin/touch创建file所有人为root,root用户下取消所有人s权限,用户lee再次使用/bin/touch创建文件file1,所有人为lee
注意图中红线画出内容
sgid ##强制位
对文件:只针对二进制可执行文件,
任何人运行二进制文件
程序时程序产生的进程的所有组都是文件的所有组
和程序发起人组的身份无关
对目录:当目录有sgid权限后,目录中新建的所有文件的所有组
都自动归属到目录的所有组之中,和文件建立者所在的组无关
设定方式:
chmod g+s file|dir
sgid=2
或
chmod 2xxx file|dir
实验
对文件
给/bin/touch用户组添加s权限,新建文件file2,查看属性,file2所有组为root,切换用户lee,同样,lee使用/bin/touch文件新建文件file2,lee所新建文件所有者为lee,但所有组却为root,root用户下取消/bin/touch文件所有的组的s权限,lee用户使用/bin/touch创建文件file3,所有者,所有人都为lee
对目录:
超级用户身份下在/tmp下新建目录test,给与其他人twx权限,用户组给与s权限,此时目录test所有组为root,切换student用户,student用户在/tmp/test目录中新建文件file,查看属性,法ile所有人为student,所有组依旧为root
sticky ##粘制位
t权限:
只针对与目录,当一个目录上有t权限,那么目录中的文件只能被文件的拥有者删除
设定方式:
chmod o+t direcotry
t=1
或
chmod 1777 direcotry
实验
student用户在/tmp下新建目录westos,查看属性,其他人无w权限,给与其他人t权限和w权限,打开新shell切换用户lee,lee在/tmp/westos下新建文件le,切换tom用户,tom用户在/tmp/westos下新建文件to,当用户tom想删除lee在此目录内创建的文件le时,被拒绝,但用户tom删除自己所创建文件to时成功了。
10.设定acl列表
设定格式
setfacl -m <u|g>:<username|groupname>:权限 文件|目录
-m #设定
u #用户
g #组
getfacl filename|dirname 查看acl列表内容
getfacl /westos/
# file: westos/ ##文件名称
# owner: root ##文件所有人
# group: root ##文件所有组
user::rwx ##拥有者权限
user:student:rwx ##特殊用户权限
group::--- ##组权限
mask::rwx ##权限掩码
other::--- ##其他*限
注意:当文件上有权限列表时,ls -l 能看到的权限是假的
实验:
Root在/tmp下新建文件file,并进行编辑两行内容“westos,redhat”设定权限660,查看文件权限。实验如下
切换student用户,student用户作为其他人身份无权限查看/tmp/file文件
root用户设定student用户对/tmp/file文件拥有rw权限
再次切换student用户,可以查看/tmpfile文件内容
对于所有组而言,所有组拥有对/tmp/file文件的rw权限,那么此所有组内的成员都会拥有/tmp/file文件的rw权限。
Root用户新建组lee,新建用户test,将test’用户添加到lee组内,id查看test信息,同时通过acl设定lee组拥有/tmp/file文件的rw权限,切换用户test,因为用户test’在lee组内,lee组拥有/tmp/file文件的rw权限,所以test用户也拥有此文件的rw权限。
删除列表中的用户或者组
setfacl -x <u|g>:<username|groupname> 文件|目录
取消student对/tmp/file文件的权限
删除组lee对/tmp/file文件的权限,test在组lee内,因此test无法查看/tmp/file文件内容
关闭列表,setfacl -b 文件|目录
ls -l 查看/tmp/file属性在第九位权限后有一个+号,通过setfacl -b /tmp/file 关闭acl列表
(1)acl mask值
**mask 权限掩码
mask用来标实能够赋予用户最大权限
当用chmod改变文件普通权限时可能会被破坏
修复
setfacl -m m:rwx 文件名称
实验:root用户在/tmp下新建文件file,设定用户test对此文件拥有rwx权限,改变/tmp/file文件权限为700,查看acl列表信息,发现user和group后出现#effective,新建shell以test用户身份查看/tmp/file文件,发现无法查看。当出现#effective时,表示文件被损坏。
通过命令:setfacl -m m:rwx /tmp/file 来修复,可以看出#effective消失,test用户可以查看/tmp/file,当然没内容显示了,root用户刚建立file文件的时候,就是一个空文件
(2) acl 默认权限
当我们需求某个目录对于student可写,并且目录中新建的子目录对student也可写
就要设定默认默认权限
注意: 默认权限只对目录中新建立的文件或者目录生效,对已经建立的文件无效,
对于目录本身也无效
setfacl -m d:u:student:rwx -R /dir
实验:
(1)root用户在/tmp下新建目录westos,在westos下新建文件linux1,linux2;
查看linux1,linux2,westos的权限,对目录westos进行acl权限设置
(2)root用户在westos下新建目录test,以及test下新建文件file,切换student用户,发现student用户对test以及test下的file文件具备rwx权限。