linux文件权限和用户组
文件权限
1. linux文件权限
(一)linux文件属性
ls -l 命令可以看到文件相关属性,每个字段的意义如下:
-
chown
语法:chown [OPTION]… [OWNER][:[GROUP]] FILE…
-R 递归
-
chgrp 设置文件所属组
-R 递归
chgrp的功能chown也能够实现
(二)linux文件权限
linux定义了以下三类用户:
所有者 (owner,u)
所属组 (group,g)
其他人 (other,o)
linux文件为每类用户规定了三种权限
读权限 (readable,r)
写权限 (writable,w)
可执行权限 (executable,x)
三种权限在文件与目录中的不同效果
文件:
- r: 可以查看文件内容
- w: 可以修改文件内容
- x: 可以被系统运行
目录:
- r: 可以通过ls命令查看目录内文件列表
- w: 可以在目录下新建、删除文件
- x: 可以通过cd命令进入目录内
- X:只给目录x权限,不给文件x权限
2.文件权限描述方法
用户描述:u:所有者,g:所属组,o:其他人,a:所有三类用户
权限变化描述:+:增加权限,-:减少权限,=:将权限赋值
u+w:所有者增加写权限
g-x:所属组减少可执行权限
a=rw:所有用户的权限赋值为读、写权限
1rwx 7=4+2+1
2rw- 6=4+2+0
3r-x 5=4+0+1
4r-- 4=4+0+0
5-wx 3=0+2+1
6-w- 2=0+2+0
7--x 1=0+0+1
8--- 0=0+0+0
chmod 修改文件权限
chmod [OPTION]… MODE[,MODE]… FILE…
chmod [OPTION]… OCTAL-MODE FILE…
选项:-R 递归设置
3.umask值:新建文件和目录的默认权限
umask默认值:root用户为022,普通用户为002
umask值计算新建文件和目录的权限的方法:
对于目录,用777-umask值即可
对于文件,用666-umask值后,将出现的奇数位权限值加1其他不变
4.linux文件特殊权限
一般来说,用户是否能够访问文件取决于被访问文件的权限设置。但是,linux文件的特殊权限(SUID,SGID)表现在:用户继承了访问文件使用的可执行程序文件的权限设置。
SUID
SUID : 运行某程序时,相应进程的属主是程序文件自身的属主,而不是启动者
1 chmod u+s file
2 chmod u-s file
3 chmod 4720 FILE... 用数值法描述时,在原三位数字前添加数字4
4
5一、先看下/usr/bin/passwd这个文件,也就时命令passwd。
6 -rwsr-xr-x. 1 root root 25980 2月 22 2012 /usr/bin/passwd
7 发现这个文件的拥有者是root,并且其他组的权限为r-x,也就说普通用户对其具有r和x的权限。
8二、既然普通用户对其具有执行权限,因此当普通用户执行这条命令时,由于s这个权限的存在,那么在执行过程中会暂时获取root的权限。
9三、由于只有root才可以修改/etc/shadow文件,而在此次执行过程中已经得到了root用户的支持,因此密码会顺利得写入到这个文件中。
10如果file 本身原来就有执行权限,则suid显示s ,否则显示S
SGID
可执行文件上的SGID权限
SGID :运行某程序时,相应进程的属组是程序文件自身的属组,而不是启动者所属的基本组
1chmod g+s file
2chmod g-s file
3chmod 2770 FILE... 用数值法描述时,在原三位数字前添加数字2
实验:
1、当前普通用户(不属于natasha组)无法用cat命令访问abc文件
2、将cat程序文件的所属组改为abc文件的所属组natasha,并为其赋予SGID权限
3、此时普通用户可以访问abc文件了。这是因为执行cat命令时,普通用户的身份切换为cat命令文件的所属组,而abc文件的所属组与cat的相同并且具备读权限,所以普通用户也可以访问了。
1sgid 共享文件 案例
2#前提 是shared组成员。 可以用附加组搞定
3#mkdir testdir
4#chgrp shared testdir
5#chmod g+s testdir
6#umask 002
7#cd testdir
8#touch testfile //新文件的属组 也是shared 。
Sticky 粘滞位
Sticky 在一个公共目录,每个都可以创建文件,删除自己的文件,但不能删除别人的文件
一般情况下,具有对目录写权限的用户可以删除目录下的任意文件,而不需考虑文件的所有者。
当对目录赋予Sticky权限,目录内的文件只能由其所有者和root用户删除,其他用户即使对目录具有写权限也不能删除别人的文件。
用法:
1
2chmod o+t DIR... <!--先前位置的x会被t代替-->
3chmod o-t DIR... <!--t会恢复成x-->
4chmod 1647 DIR... <!--用数值法描述时,在原三位数字前添加数字1-->
5举例:
6[root@localhost tmp]# ls -al /tmp
7总用量 12
8drwxrwxrwt. 9 root root 4096 10月 27 10:30 .
9
10/tmp 目录 就是这个有权限 ,
11这个权限可以控制避免被删除的作用
12特殊权限的大小写区别
SUID:
- s:所有者拥有x权限
- S:所有者没有x权限
SGID:
- s:所属组拥有x权限
- S:所属组没有x权限
Sticky:
- t:其他人拥有x权限
- T:其他人没有x权限
由于特殊权限都赋予在二进制可执行文件或目录上,这些文件的x权限都比较重要,失去x权限而赋予特殊权限,将无法实现很多功能,所以大写的权限一般视作一种故障状态。
1000
2001
3110
4111
51755 sticky -001
62755 sgid -010
73755 sgid sticky -011
85755 sticky suid -101
9umask 0022 有4位
5.设定文件特定属性
1chattr +i 不能删除,改名,更改
2chattr +a 只能追加内容
3lsattr 显示特定属性
6.ACL访问控制列表
ACL能够专门对个别用户进行权限控制,实现更加灵活的权限管理
CentOS 7下的分区自动具备ACL功能;
CentOS 6下的分区:若分区是在系统安装时划定的,则自动具备ACL功能;若分区是安装后增加的,则默认不具备ACL功能,需要手动修改。
手动开启ACL功能
1tune2fs –o acl /dev/sdb1
2mount –o acl /dev/sdb1 /mnt/test
3setfacl 设置文件ACL
语法:setfacl [option] [{-m|-x} acl_spec] file …
用法
1 -m 修改 -x 删除
2 option:-R 递归 -b 清空 -k 删除默认acl权限
3 u:hellopeiyang:rwx 设定用户hellopeiyang的所有者权限为rwx
4 g:natasha:rw 设定组natasha的所属组权限为rw
5 m::rw 设定mask值为rw
6 setfacl -m u:hellopeiyang:rw hello 设置文件hello的ACL权限为自定义用户拥有读写权限
7 setfacl -b hello 清空hello文件的ACL权限
mask值限定了ACL中除所有者、其他人外其他用户能够达到的最高权限。修改个别自定义用户、自定义组的权限会导致
umask值变化,进而影响其他权限,故umask只能在自定义用户与自定义组权限设置完毕后再统一调整。
getfacl 查看文件ACL getfacl file …
ACL生效顺序:所有者,自定义用户,自定义组,其他人
复制文件保留ACL设置:cp -p
1 setfacl
2 -m 设定
3 u:uid:perm
4 g:gid:perm
5 -x 取消
6setfacl -m u:hadoop:rw inittab (inkttab 是root 用户,其他组没写权限)
7专门给hadoop 设置读写权限
8setfacl -m g:mygroup:rw inittab
9//取消
10setfacl -x u:hadoop inittab
用户组
用户、组
用户
-
系统在用户登录时为用户分配一个令牌便于权限管理,在linux系统中令牌即为UID
-
UID编码规则:
-
系统用户:1-499(CentOS 6),1-999(CentOS 7)
-
登录用户:500+(CentOS 6),1000+(CentOS 7)
-
root用户的UID为0,普通用户的UID为1-60000,其中系统用户与登录用户的分配如下:
-
系统用户主要为系统运行的程序准备。
组
- 系统为了方便管理,设立组的概念,组内用户的权限继承自组权限
- 组同样设置GID,其编码规则同UID
- 建立新用户时系统默认同时建立同名组,其UID和GID号相同
安全上下文
- 进程所能够访问资源的权限取决于进程的运行者的身份
组的类别
- 用户的主要组:一个用户有且只属于一个主组,默认其名称与用户名相同
- 用户的辅助组:一个用户可以属于零个或多个辅助组
用户、组的配置文件
- linux用户、组的配置文件主要如下四个:
- /etc/passwd 用户账号相关属性配置文件
- /etc/shadow 用户密码相关属性配置文件
- /etc/gpasswd 组账号相关属性配置文件
- /etc/gshadow 组密码相关属性配置文件
- passwd文件格式:
name:passwd:UID:GID:GECOS:directory:shell
- name: 用户登录名
- passwd: 用户密码,现在密码已经移至
/etc/shadow
文件,被占位符x
代替 - UID: 用户ID号
- GID: 用户所属的主组ID号
- GECO: 用户信息注释
- directory: 用户家目录路径
- shell: 用户默认shell
- shadow文件格式:
login name:encrypted password:date of last password change:minimum password age:maximum password age:password warning period:password inactivity period:account expiration date:reserved field
- login name:用户登录名
- encrypted password: 加密的密码
$6
代表加密方式为SHA512,加密方式很多,例如$1
代表MD5加密$AArU9fX$
中两个$符号间是一段随机字符,称作盐(salt),用于确保即使是相同密码加密的结果也不同,进一步加强密码安全性- 后面的字符是加密密文正文,不同加密方式长度不同,但是只要加密方式相同,密码位数不同加密后的密文位数是相同的
- 更改密码加密方式:
authconfig --passalgo=sha256 --update
- date of last password change: 上次修改密码时间,从1970-1-1起算的天数
- minimum password age: 最短密码时间,普通用户更换密码的最短间隔天数,0表示随时可以变更
- maximum password age: 最长密码时间,用户使用一个密码最长时间,99999表示永不过期
- password warning period: 密码达到最长时间前提前报警提示的天数,默认7天
- password inactivity period: 密码达到最长时间后允许修改密码的宽限期,超出后用户被锁定
- account expiration date: 用户账户有效期,从1970-1-1起算的天数
- group文件格式:
group name:passwd:GID:user list
- group name: 组名称
- passwd: 组密码,用占位符
x
代替,加密密码移至/etc/gpasswd
文件 - GID: 组ID号
- user list: 以当前组为辅助组的用户,多用户用
,
分隔
- gshadow文件格式:
group name:encrypted password:administrators:members
- group name: 组名称
- encrypted password: 加密的密码,与
/etc/shadow
文件中的密码加密方式相同 - administrators: 组管理员,可以修改组密码,多名管理员用
,
分隔 - members: 以当前组为辅助组的用户,内容必须与
/etc/group
文件中的user list相同
- 注意: 修改账号相关设置(e.g. /etc/passwd /etc/shadow /etc/group /etc/gpasswd)时,必须重新登录才能够生效
用户和组管理命令
用户管理命令
useradd 用户创建
- 语法:
useradd [options] LOGIN
用法:
创建一个用户billy,指明UID=1010,属于附加组hellopeiyang和natasha,家目录为/app/billy,使用的shell为csh。
命令:useradd -u 1010 -G hellopeiyang,natasha -d /app/billy -s /bin/csh bill
用getent
命令检查hellopeiyang,natasha,billy三个组的/etc/group文件,确认用户列表存放的是以此组作为辅助组的用户
-
用户创建默认配置文件
/etc/default/useradd
-
使用
useradd -D
命令修改用户创建默认配置文件 -
用户家目录默认配置文件
/etc/skel
使用useradd
建立用户家目录时,将/etc/skel
下的所有文件复制到家目录中,相当于执行命令cp -a /etc/skel/.[^.]* /home/user
-
newusers passwd格式文件
批量创建用户 -
cat 格式文件 | chpasswd
批量修改用户密码,格式文件格式user name:password
useradd -m username 创建家目录 和 linux 发行版本有关系。
usermod 用户属性修改
语法:usermod [OPTION] login
用法:
将billy用户的主组改为harry,附加组增加sarah,家目录迁移到/home/billy下,账号于2018年8月31日过期,最后将billy账户锁定
1getent group harry
2usermod -g 1004 -aG sarah -md /home/billy -e 2018-08-31 billy <!--注意a在G前,m在d前-->
3usermod -L billy
userdel 删除用户
1userdel login 删除login用户
2userdel -r login 删除login用户同时删除家目录
id 查看用户相关ID信息
语法:id [OPTION]... [USER]
用法
1-u 显示UID
2-g 显示GID
3-G 显示用户所属组的ID
4-n 显示名称,需配合ugG使用
切换用户 su
1su user 切换至user用户,但是不切换至user目录、不读取user用户配置文件
2su - user 切换至user用户,同时切换至user目录并读取user用户配置文件
3su/ su - 不写用户名默认切换至root用户
4exit 退出切换的用户,注意不要在切换的用户下再切换用户,会导致系统异常
5su - user -c 'command' 只使用user身份执行一次command命令即切换回原用户
6
7root用户切换至普通用户不需要密码,普通用户切换至root用户需要root密码
设置密码 passwd
语法:passwd [OPTIONS] UserName
用法:
实验:将harry的密码改为"hello",同时密码最短使用期限3天,最长使用期限42天,密码到期前7天提示修改,过期后5天将账户锁定
1echo "hello" | passwd -n 3 -x 42 -w 7 -i 5 --stdin harry
修改用户密码策略 chage
语法:chage [OPTION]... LOGIN
用法:
其他用户管理命令
- chsh -s shell 修改shell
- chfn 修改用户注释信息
- finger 查看用户详细信息
组管理命令
创建组 groupadd
语法:groupadd [OPTION]... group_name
用法:
1-g GID 指明GID号;[GID_MIN, GID_MAX]定义在/etc/login.defs
2-o 配合-g属性,不检查GID的唯一性
3-r 创建系统组
修改组属性 groupmod
语法:groupmod [OPTION]... group
用法:
1-n group_name 设置新名字
2-g GID 设置新的GID
3-o 配合-g属性,不检查GID的唯一性
删除组 groupdel
语法 groupdel group_name
更改组密码 gpasswd
语法:gpasswd [OPTION] GROUP
用法:
1-a user 将user添加至指定组中
2-d user 从指定组中移除用户user
3-A user1,user2,... 设置有管理权限的用户列表
4-d user 将user 从指定组中删除
实验:创建组david,将用户hellopeiyang,natasha,sarah加入到组中,将natasha从组中移除
1groupadd david
2gpasswd -a hellopeiyang,natasha,sarah david
3gpasswd -d natasha
newgrp命令:临时切换主组,如果用户本不属于此组,则需要组密码
更改和查看组成员 groupmems
语法:groupmems [options] [actions]
用法:
1#groups 显示用户所属于的组 `
2groups user_name`