Linux用户组和权限管理

Linux用户组和权限管理
Linux安全模型
资源分派:
用户登录成功后,系统自动分配令牌token,包括用户标识和组成员信息。

用户:
Linux每个用户都是通过User Id (UID)唯一标识的
管理员:root,0
普通用户:1-60000 自动分配
系统用户:1-499 (centos6之前),1-999(centos7之后)
对守护进程获取资源进行权限分配
登录用户:500+(centos6之前),1000+(centos7之后)
给用户进行交互式登录使用
用户组:
管理员组:root,0
普通组:
系统组:1-499(centos6之前),1-999(centos7之后)
普通组:500+(centos6之前),1000+(centos7之后)

用户和组的关系:
一个用户必须属于一个且只有一个主组,
默认创建用户时会自动创建和用户名同名的组,作为用户名的主要组,
由于此组中只有一个用户,又称为私有组。
默认情况下一个账号只有一个组,后续可以加辅加组。
用户名和组名可以重名(windows中不允许用户名和组名同名)

安全上下文:
运行的程序,即进程,以进程发起者的身份运行,进程访问资源的权限由用户

用户和组的配置文件:(man 5 配置文件帮助)和文件格式
/etc/passwd 用户账号信息(man 5 passwd) 用户名;密码;uid;gid;账户描述;家目录;shell类型
/etc/shadow 用户口令信息 用户名;加密口令;更改口令时间;口令最短有效期;口令最长有效期;提前天数通知;账户有效期
/etc/group 用户组信息 组名;口令;gid;组成员(附加组)
/etc/gshadow 用户组口令信息(实现组成员调整)组名;口令;组管理员
(口令被锁定显示为!,双重保险!!)
(group和gshadow 文件里每个用户最后显示组成员必须一致)
命令:getent 查看用户文件
getent passwd 用户
getent shadow 用户
生成随机口令:
tr -dc '[:alnum:]' < /dev/urandom |hand -c 12
openssl rand -base64 9
加密口令:
$6:sha512 哈希算法 散列算法

还原旧设置(故障还原)
sudo vi /etc/passwd
sudo -i wang vi /etc/passwd

文件操作
pwck 查看命令
grp 检查group

用户和组管理命令
用户管理命令
useradd
usermod
userdel
组帐号维护命令
groupadd
groupmod
groupdel

用户创建
useradd 创建用户(新建用户账号文件存在隐藏文件)
-u UID
-o 配合-u 选项,不检查UID的唯一性
-g GID 指明用户所属基本组,可为组名,也可以GID
-c "COMMENT“ 用户的注释信息
-d HOME_DIR 以指定的路径(不存在)为家目录
-s SHELL 指明用户的默认shell程序,可用列表在/etc/shells文件中
-G GROUP1[,GROUP2,...] 为用户指明附加组,组须事先存在
-N 不创建私用组做主组,使用users组做主组
-r 创建系统用户 CentOS 6之前: ID<500,CentOS 7以后: ID<1000
-m 创建家目录,用于系统用户
-M 不创建家目录,用于非系统用户
windows创建账号:
net user 用户名 密码 /add

显示或更改默认设置
useradd -D
useradd –D -s SHELL
useradd –D –b BASE_DIR
useradd –D –g GROUP

新建用户的相关文件
/etc/default/useradd 创建用户目录(useradd命令默认文件夹)
/etc/skel/* 新建账号默认文件夹
/etc/login.defs 账号配置文件
如果新建用户home目录删除,可以从/etc/skel文件中将配置文件拷贝到新建的home文件中:
cp /etc/skel/.[^.]* /home/test/ (test为新账户名)
cp -r /etc/skel/. /home/test/ .表示当前文件夹的所有文件,与-r配合使用
cp -r /etc/skel /home/test

批量创建用户
newusers passwd 格式文件  
批量修改用户口令
echo username:passwd | chpasswd

用户属性修改
usermod 命令可以修改用户属性
常见选项:
-u UID: 新UID
-g GID: 新主组
-G GROUP1[,GROUP2,...[,GROUPN]]]:新附加组,原来的附加组将会被覆盖;若保留原有,则要同时使
用-a选项
-s SHELL:新的默认SHELL
-c 'COMMENT':新的注释信息
-d HOME: 新家目录不会自动创建;若要创建新家目录并移动原家数据,同时使用-m选项
-l login_name: 新的名字
-L: lock指定用户,在/etc/shadow 密码栏的增加 !
-U: unlock指定用户,将 /etc/shadow 密码栏的 ! 拿掉
-e YYYY-MM-DD: 指明用户账号过期日期
-f INACTIVE: 设定非活动期限,即宽限期

删除用户
userdel 删除用户(不会删除家目录及相关信息)
userdel -r 删除用户(所有相关信息)
userdel -f, --force   强制删除

查看用户相关的ID信息
id 命令可以查看用户的UID,GID等信息
常见选项:
-u: 显示UID
-g: 显示GID
-G: 显示用户所属的组的ID
-n: 显示名称,需配合ugG使用

切换用户
su 切换用户身份
su 用户名 不完全切换 保留原账户信息 可保留原账户切换时的目录
su - 用户名 完全切换
说明:root su至其他用户无须密码;非root用户切换时需要密码
用exit退出当前身份,不要再用 su 切换至旧用户,否则会生成很多的bash子进程,环境可能会混乱。
su - 用户 -c "口令" 直接切换执行口令后退回

Ubuntu不能切换root身份:getent passwd 口令加!被锁定
修改:passwd 修改用户口令
ll /bin/false
usermod -s 修改信息(永久更改)

修改密码:
passwd
常用选项:
-d:删除指定用户密码
-l:锁定指定用户
-u:解锁指定用户
-e:强制用户下次登录修改密码(将getent passwd 中口令使用时间改为0,使密码到期)
-f:强制操作
-n mindays:指定最短使用期限
-x maxdays:最大使用期限
-w warndays:提前多少天开始警告
-i inactivedays:非活动期限
--stdin:从标准输入接收用户密码,Ubuntu无此选项

修改密码策略:
chage 可以修改用户密码策略
change -l 用户 查看口令信息显示密码策略
change -d 用户更改口令时间
change -m --mindays MIN_DAYS
change -M --maxdays MAX_DAYS
change -W --warndays WARN_DAYS
change -I --inactive INACTIVE #密码过期后的宽限期
change -E --expiredate EXPIRE_DATE #用户的有效期

用户相关的其它命令
chfn 指定个人信息
chsh 指定shell,相当于usermod -s
finger 可看用户个人信息

创建组
groupadd实现创建组
常见选项:
g GID 指明GID号;[GID_MIN, GID_MAX]
-r 创建系统组,CentOS 6之前: ID<500,CentOS 7以后: ID<1000

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

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

groupmems,gpasswd,usermod 三个命令都可以修改组。

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

临时切换主组
newgrp 命令可以临时切换主组, 如果用户本不属于此组,则需要组密码
格式:newgrp [-] [group]

更改和查看组成员
groupmems 可以管理附加组的成员关系
常见选项:
-g, --group groupname   #更改为指定组 (只有root)
-a, --add username     #指定用户加入组
-d, --delete username #从组中删除用户
-p, --purge               #从组中清除所有成员
-l,  --list                #显示组成员列表


文件权限管理
ll 显示权限

设置文件的所有者chown
chown 修改文件所有者,也可以修改文件属组
用法说明:
OWNER   #只修改所有者
OWNER:GROUP #同时修改所有者和属组
:GROUP   #只修改属组,冒号也可用 . 替换
--reference=RFILE  #参考指定的的属性,来修改  
-R #递归,此选项慎用,非常危险!

设置文件的属组信息chgrp
chgrp 命令可以只修改文件的属组
格式
chgrp [OPTION]... GROUP FILE...
chgrp [OPTION]... --reference=RFILE FILE...
-R 递归

文件权限
文件的权限主要针对三类对象进行定义
owner 属主, u
group 属组, g
other 其他, o
注意:用户的最终权限,是从左向右进行顺序匹配,即,所有者,所属组,其他人,一旦匹配权限立即
生效,不再向右查看其权限
每个文件针对每类访问者都定义了三种常用权限
每个文件针对每类访问者都定义了三种权限
r Readable 读
w Writable 写
x eXcutable 执行

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

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

数学法的权限
八进制数字
--- 000 0
--x 001 1
-w- 010 2
-wx 011 3
r-- 100 4
r-x 101 5
rw- 110 6
rwx 111 7
注意:只要数字有基数,肯定有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(all) 所有者,所属组,其他人,所有人
opt :+ ,-,=
permission:r,w,x
u= g= o= ug= a= u=,g= 修改指定一类用户的所有权限
u+ u- g+ g- o+ o- a+ a- + - 修改指定一类用户某个或某个权限
-R : 递归修改权限
有执行权限和写权限才可删除文件,一个文件是否可以删除和文件本身无关,和他所在文件夹权限有关
文件夹没有执行权限就无法进入文件夹

新建文件和目录的默认权限
umask 的值可以用来保留在创建文件权限
实现方式:
新建文件的默认权限: 666-umask,如果所得结果某位存在执行(奇数)权限,则将其权限+1,偶数不变
新建目录的默认权限: 777-umask
非特权用户umask默认是 002
root的umask 默认是 022

umask 查看umask
umask –S #模式方式显示
umask –p #输出可被调用

持久保存umask
全局设置: /etc/bashrc
用户设置:~/.bashrc

Linux文件系统上的特殊权限
特殊权限SUID
前提:进程有属主和属组;文件有属主和属组
1. 任何一个可执行程序文件能不能启动为进程,取决发起者对程序文件是否拥有执行权限
2. 启动为进程之后,其进程的属主为发起者,进程的属组为发起者所属的组
3. 进程访问文件时的权限,取决于进程的发起者
(a) 进程的发起者,同文件的属主:则应用文件属主权限
(b) 进程的发起者,属于文件属组;则应用文件属组权限
(c) 应用文件“其它”权限
二进制的可执行文件上SUID权限功能:
任何一个可执行程序文件能不能启动为进程:取决发起者对程序文件是否拥有执行权限
启动为进程之后,其进程的属主为原程序文件的属主
SUID只对二进制可执行程序有效
SUID设置在目录上无意义

SUID权限设定:
chmod u+s FILE...
chmod 6xxx FILE
chmod u-s 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...

注意:suid sgid 所有者 ,所属组 (只支持二进制可执行程序文件)

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

Sticky权限设定:
chmod o+t DIR...
chmod 1xxx DIR
chmod o-t DIR...

特殊权限数字法
SUID SGID STICKY
000 0
001 1
010 2
011 3
100 4
101 5
110 6
111 7
范例: chmod 4777 /tmp/a.txt

总结:
sticky dir (1)(ll -d /tmp 该权限要删除只能是删自己的文件)
sgid dir (2777 文件下的文件由该文件继承所属组)
suid file (4) chmod 4755
sgid file (2) chmod 2755
去除权限: chmod 755

df -T 查看文件系统类型
新建文件临时修改权限:
( umask 数字;touch /data/f1.txt) ( )临时修改文件权限生效

设定文件特殊属性:
设置文件的特殊属性,可以访问 root 用户误操作删除或修改文件
chattr 设定文件属性
+i 不能删除只能改名
+a 只能追加内容
lsattr 查看文件

访问控制列表

ACL权限(影响指定用户,不能限制root),其他身份修改用户权限
除了文件的所有者,所属组和其它人,可以对更多的用户设置权限
CentOS7 默认创建的xfs和ext4文件系统具有ACL功能
CentOS7 之前版本,默认手工创建的ext4文件系统无ACL功能,需手动增加

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

ACL相关命令
setfacl 设置ACL权限
setfacl -m u:用户:rwx 文件 创建权限
setfacl -x u:用户 文件 删除用户权限
setfacl -b 文件 全部删除权限
getfacl 文件 查看ACL设置的权限

mask权限(
影响除了所有者和other的用户)用户权限不能比mask权限高
mask需要与用户的权限进行逻辑与运算后,才能变成有限的权限(Effective Permission)

setfacl -m mask::rwx 文件
chmod g=rwx 文件

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

posted @ 2020-04-12 14:55  llliuhuiii  阅读(489)  评论(0编辑  收藏  举报