AI智能
改变未来

Linux用户组和权限管理

用户:
Linux中每个用户是通过user id(UID)来唯一标识的
管理员:root,0
普通用户:
系统用户:1-499(CentOS 6以前),1-999(CentOS 7以后)
对守护进程获取资源进行权限分配
登录用户:500+(CentOS 6以前),1000+(CentOS 7以后)
给用户进行交互式登录使用

用户和组的关系:
用户的主要组:用户必须属于一个且只有一个主组,默认创建用户时自动创建和用户名同名的组,作为用户的主要组,由于此组中只有一个用户,又称为私有组
用户的附加组:一个用户可以属于零个或多个辅助组,附属组

安全上下文:运行中的程序,即进程,以进程发起者的身份运行,进程所能够访问资源的权限取决于进程的运行者的身份

passwd文件格式:
login name:登录用户名
passwd:密码(x)
UID:
GID:
GECOS:用户全名或注释
home directory:用户家目录
shell:用户默认shell类型

shadow文件格式:
登录用户名
用户密码:一般用sha512加密
从1970年1月1日起到密码最近一次被修改的时间
密码再过几天可以被修改(0表示随时可被修改)
密码再过几天必须被修改(99999表示永不过期)
密码过期前几天系统提醒用户(默认为一周)
密码过期几天后账号会被锁定
从1970年1月1日起,多少天后账号失效

密码的安全策略:
足够长
使用数字、大写字母、小写字母及特殊字符中至少3种
使用随机密码
定期更换,不要使用最近用过的密码

group文件格式:
群组名称
群组密码:通常不需要设定,密码是被记录在/etc/gshadow
GID:就是群组的ID
以当前组为附加组的用户列表(分隔符为逗号)

gshadow文件格式:
群组名称
群组密码
组管理员的列表,更改组密码和成员
以当前组为附加组的用户列表:多个用户间用逗号隔开

useradd:创建用户
-r:创建系统用户
-M:不创建家目录,用于非系统用户
-m:创建家目录,用于系统用户
-c “COMMENT”:用户的注释信息
-p:指定加密的密码
-o:UID可以不唯一
-d HOME_DIR:以指定的路径为家目录
-s SHELL:指定SHELL类型
-G GROUP1[,GROUP2,…]:为用户指明附加组,组须事先存在

创建用户时的配置文件中的默认属性:
/etc/default/useradd
/etc/login.defs
/etc/skel/*

批量创建用户:
newusers passwd 格式文件

usermod:用户属性修改
-L:锁定指定用户
-U:解锁指定用户
-aG:追加附加组
-d HOME:新家目录不会自动创建;若要创建新家目录并移动原家数据
-l login_name:新的名字
-e YYYY-MM-DD:指定用户账号过期日期
-f INACTIVE:设定非活动期限,即宽限期

userdel:删除用户
-r:删除用户时一并将家目录和邮箱删除

id:可以查看用户的UID,GID等信息
-u:显示UID
-g:显示GID
-G:显示用户所属的附加组的ID
-n:显示名称,需配合ugG使用,如-un,-gn,-Gn
su:可以切换用户身份,并且以指定用户身份执行命令
su USERNAME:半切换,即不会读取目标用户的配置文件,不改变当前工作目录
su – USERNAME:完全切换,会读取目标用户的配置文件,切换至自己的家目录,即完全切换

passwd:可以修改用户密码
-d:删除指定用户密码
-l:锁定指定用户
-u:解锁指定用户
-e:强制用户下次登录修改密码
-n mindays:指定最短使用期限
-x maxdays:最大使用期限
-w warndays:提前多少天开始警告
-i inactivedays:非活动期限
–stdin:从标准输入接受用户密码

非交互式修改用户密码:
方法1(通用):
echo -e ‘123456\\n123456’ | passwd mage
方法2:
echo “1223456” | passwd –stdin mage
Ubuntu非交互式修改用户密码:
方法1:
echo wang:centos | chpasswd
方法2:
echo -e “magedu\\nmagedu” | passwd wang

chage:可以修改用户密码策略
-d LAST_DAY:最近一次更改密码的时间
-m|–mindays MIN_DAYS
-M|–maxdays MAX_DAYS
-W|–warndays WARN_DAYS
-I|–inactive INACTIVE:密码过期后的宽限期
-E|–expiredate EXPIRE_DATE:用户的有效期

groupadd:创建组
-g GID:指明GID号
-r:创建系统组

groupmod:组属性修改
-n group_name:新名字
-g GID:新的GID

groupdel:删除组
-f:强制删除,即使是用户的主组也强制删除

gpasswd:可以更改组密码,也可以修改附加组的成员关系
-a USER:将USER添加至指定组中
-d USER:从指定附加组中移除用户user
-A user1,user2,…:设置有管理权限的用户列表

newgrp:可以临时切换主组,如果用户本不属于此组,则需要组密码

groupmems:可以管理附加组的成员关系
-g|–group groupname:更改为指定组
-a|–add username:指定用户加入组
-d|–delete username:从组中删除用户
-p|purge:从组中清除所有成员
-l|–list:显示组成员列表

注意:修改了附加组,需要注销重新登录后才能生效新的附加组

groups:可查看用户组关系

chown:可以修改文件的属主,也可以修改文件属组
OWNER:只修改所有者
OWNER:GROUP或OWNER.GROUP:同时修改所有者和属组
:GROUP或.GROUP:只修改属组
–reference=RFILE:参考指定的属性来修改
-R:递归,此选项慎用

chgrp:可以只修改文件的属组
-R:递归

对文件的权限:
r:可使用文件查看类工具,可以获取其内容
w:可修改其内容
x:可以把此文件提请内核启动为一个进程,即可执行此文件

对目录的权限:
r:可以使用ls查看此目录中文件列表
w:可在此目录中创建文件,也可删除此目录中的文件,而和此被删除的文件的权限无关
x:可以cd进入此目录,可以使用ls -l查看此目录中文件元数据(需配合r权限),属于目录的可访问的最小权限
X:只给目录x权限,不给无执行权限的文件x权限

chmod:修改文件权限
格式:
chmod [OPTION]… MODE[,MODE]… FILE…
chmod [OPTION]… OCTAL-MODE FILE…
#参考RFILE文件的权限,将FILE的修改为同RFILE
chmod [OPTION]… –reference=RFILE FILE…
说明:
MODE:who opt permission
who:u,g,o,a
opt:+,-,=
permission:r,w,x
修改指定一类用户的所有权限
u= g= o= ug= a= u=,g=
修改指定一类用户某个或某个权限
u+ u- g+ g- o+ o- a+ a- + –

-R:递归修改权限
范例:chown -R a+X d1:只对d1目录的ugo增加执行权限
chown -R a+x d1:对d1目录及其子目录以及文件增加执行权限

新建文件和目录的默认权限:
umask的值可以用来保留在创建文件权限
实现方式:
新建文件的默认权限:666-umask,如果所得结果某位存在执行(奇数)权限,则将其权限+1,偶数不变
新建目录的默认权限:777-umask
范例:
临时设置文件的权限:(umask 077;touch f{1…10}.txt)

特殊权限SUID:
前提:进程有属主和属组,文件有属主和属组
1、任何一个可执行程序文件能不能启动为进程,取决发起者对程序文件是否有执行权限
2、启动位进程之后,其进程的属主为发起者,进程的属组为发起者所属的组
3、进程访问文件的权限,取决于进程的发起者

(a)进程的发起者,同文件的属主:则应用文件属主权限(b)进程的发起者,属于文件属组;则应用文件属组权限(c)应用文件\"其它\"权限

二进制的可执行文件上SUID权限功能:
任何一个可执行程序文件能不能启动为进程:取决发起者对程序文件是否拥有执行权限
启动为进程之后,其进程的属主为原程序文件的属主
SUID只对二进制可执行程序有效
SUID设置在目录上无意义
SUID权限设定:
chmod u+s FILE…
chmod 4xxx FILE
chmod u-s FILE…
chmod xxx FILE

特殊权限SGID:
二进制的可执行文件上SGID权限功能:
任何一个可执行程序文件能不能启动为进程:取决发起者对程序文件是否拥有执行权限
启动为进程后,其进程的属组为原程序文件的属组

SGID权限设定:
chmod g+s FILE…
chmod 2xxx FILE
chmod g-s FILE…

目录上的SGID权限功能:
默认情况下,用户创建文件时,其属组为此用户所属的主组,一旦某目录被设定了SGID,则对此目录有写权限的用户在此目录中创建的文件所属的组为此目录的属组,通常用于创建一个协作目录
SGID权限设定:
chmod g+s DIR…
chmod 2xxx DIR
chmod g-s DIR…

特殊权限sticky位:
具有写权限的目录通常用户可以删除该目录中的任何文件,无论该文件的权限或拥有权在目录设置sticky位,只有文件的所有者或root可以删除该文件
sticky设置在文件上无意义

sticky权限设定:
chmod o+t DIR…
chmod 1xxx DIR
chmod o-t DIR…

权限位映射:
SUID:user,占据属主的执行权限位
s:属主拥有x权限
S:属主没有x权限
SGID:group,占据属组的执行权限位
s:group拥有x权限
S:group没有x权限
Sticky:othere,占据other的执行权限位
t:other拥有x权限
T:other没有x权限

设定文件特殊属性:
设置文件的特殊属性,可以防止root用户操作删除或修改文件

不能删除,改名,更改
chattr +i FILE
只能追加内容,不能删除,改名
chattr +a FILE
lsattr:显示特定属性

ACL访问控制列表:
可以实现灵活的权限管理
除了文件的所有者,所属组和其他人,可以对更多的用户设置权限
CentOS7默认创建的xfs和ext4文件系统具有ACL功能
CentOS之前版本,默认手工创建的ext4文件系统无ACL功能,需手动增加

ACL生效顺序:
所有者 > 自定义用户 > 所属组|自定义组 > 其他人

setfacl:可以设置ACL权限
-m:修改ACL文件访问权限
setfacl -m u:kobe:- all.txt
-x:清除指定的ACL文件权限
set -x u:wang passwd
-b:清除所有的ACL权限
set -b passwd

getfacl:可查看设置的ACL权限

mask权限:
mask只影响所有者和other的之外的人和组的最大权限
mask需要与用户的权限进行逻辑与运算后,才能变成有限的权限
用户或组的设置必须存在于mask权限设定范围内才会生效
setfacl -m mask::rx file

–set选项会把原有的ACL项都删除,用新的替代,需要注意的是一定要包含UGO的设置,不能像-m一样只是添加ACL就可以

备份和还原ACL:
主要的文件操作命令cp和mv都支持ACL,只是cp命令需要加上-p参数。但是tar等常见的备份工具是不会保留目录和文件的ACL信息

#备份ACL
getfacl -R /tmp/dir > acl.txt
#消除ACL权限
setfacl -R -b /tmp/dir
#还原ACL权限
setfacl -R –set-file=acl.txt /tmp/dir
#还原ACL权限
setfacl –restore acl.txt
#查看ACL权限
getfacl -R /tmp/dir

赞(0) 打赏
未经允许不得转载:爱站程序员基地 » Linux用户组和权限管理