Linux用户和权限管理
基础知识
-
Linux用户
- 管理员:root 0
- 普通用户:1-65535
- 系统用户:Centos6:1-499,Centos7:1-999
- 登录用户:Centos6:500+,Centos7:1000+
-
Linux组:
-
管理员组:root 0
-
普通组:
- 系统组
- 登录用户组
-
组类别:
- 基本组(主组):组名同用户名,且仅包含一个用户,私有组
- 附加组(额外组):一个用户可以属于多个额外组
-
-
用户和组相关的配置文件
-
/etc/passwd:用户及其属性信息(名称、UID、基本组ID等等)
-
/etc/group:组及其属性信息
-
/etc/shadow:用户密码及其相关属性
-
/etc/gshadow:组密码及其相关属性
-
[root@server1 ~]# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
字段解析:
name:password:UID:GID:描述:directory:shell
[root@server1 ~]# cat /etc/group
root:x:0:
bin:x:1:
daemon:x:2:
sys:x:3:
adm:x:4:
tty:x:5:
disk:x:6:
字段解析:
group_name:password:GID:user_list
[root@server1 ~]# cat /etc/shadow
root:$6$pGGxCptV$ORQhySfwpOCMr4mUPZ0bJfv3X82Zg8dCyqfcjfmafP5cyfaObevcXM2kl5azMfKYorG3BnjFwQyYkORIzGZry/:18819:0:99999:7:::
bin:*:18353:0:99999:7:::
daemon:*:18353:0:99999:7:::
adm:*:18353:0:99999:7:::
lp:*:18353:0:99999:7:::
字段解析:
name:password:最近一次更改密码的日期:密码的最小使用期限:最大密码使用期限:密码警告时间段:密码禁用日期:账户过期日期:保留字段
用户管理
信息查看
id
[root@server1 ~]# id
uid=0(root) gid=0(root) 组=0(root) 环境=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[root@server1 ~]# id user01
uid=1000(user01) gid=1000(user01) 组=1000(user01)
查看文件
[root@server1 ~]# ll /home
总用量 0
drwxr-xr-x. 4 root root 29 7月 11 20:22 abc
drwx------. 2 alice alice 83 4月 19 00:01 alice
drwxr-xr-x. 2 root root 6 7月 11 20:22 dfg
-rw-r--r--. 1 root root 0 7月 11 20:37 dir01
drwxr-xr-x. 2 root root 36 7月 11 20:39 dir02
用户管理
创建用户useradd
常用选项:
‐u:指定uid
‐g:指定gid
‐c:用户注释信息
‐d:家目录
‐s:指定shell(/etc/shells)
‐G:附加组
‐r:创建系统用户
默认设置:/etc/default/useradd
[root@server1 ~]# useradd zhangsan -G group1 -s /bin/csh -c '张三的信息'
[root@server1 ~]# id zhangsan
uid=1007(zhangsan) gid=1010(zhangsan) 组=1010(zhangsan),1009(group1)
[root@server1 ~]# cat /etc/passwd | grep zhangsan
zhangsan:x:1007:1010:张三的信息:/home/zhangsan:/bin/csh
修改用户组usermod
常用选项:
‐ aG:将用户添加到附加组
‐ dm:移动用户新登录目录
‐ L:锁定用户
‐ U:解锁用户
[root@server1 ~]# usermod -G it user01 #覆盖附加组
[root@server1 ~]# id user01
uid=1000(user01) gid=1000(user01) 组=1000(user01),1011(it)
[root@server1 ~]# usermod -aG hr user01 #追加附加组
[root@server1 ~]# id user01
uid=1000(user01) gid=1000(user01) 组=1000(user01),1004(hr),1011(it)
修改用户密码passwd
常用选项:
‐n mindays:指定最短使用期限
‐x maxdays:最大使用期限
‐w warndays:提前多少天开始警告
‐i inactivedays:非活动期限
‐‐stdin:从标准输入接收用户密码
echo "PASSWD" | passwd ‐‐stdin username
[root@server1 ~]# passwd zhangsan
更改用户 zhangsan 的密码 。
新的 密码:
无效的密码: 密码是一个回文
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
删除用户userdel
-r 连同家目录一起删除
[root@server1 home]# ls
abc alice dfg file10 gaoxinyu nizhan user01 user02 user03 user04 zhangsan
[root@server1 home]# userdel -r zhangsan
[root@server1 home]# ls
abc alice dfg file10 gaoxinyu nizhan user01 user02 user03 user04
组管理
创建组groupadd
常用选项:
‐g:指定gid
‐r:创建系统组
删除组groupdel
sudo提权
常用切换方式:
su username:切换用户,不读取用户配置信息
su ‐ username:完全切换(记住这个,就可)
[root@server1 ~]# id alice
uid=1004(alice) gid=1006(alice) 组=1006(alice)
#普通用户alice尝试创建用户wanger,被拒绝
[alice@server1 ~]$ useradd wanger
useradd: Permission denied.
useradd:无法锁定 /etc/passwd,请稍后再试。
#修改sudo提权配置文件
[root@server1 ~]# vim /etc/sudoers
将107行的%whee ALL=(ALL) NOPASSWD:ALL前面的#和%删除
:wq!保存强制退出
[root@server1 ~]# gpasswd -a alice wheel
正在将用户“alice”加入到“wheel”组中
[root@server1 ~]# id alice
uid=1004(alice) gid=1006(alice) 组=1006(alice),10(wheel)
#重新登录alice用户,sudo提权
[root@server1 ~]# su - alice
#sudo提权并创建用户,成功
[alice@server1 ~]$ sudo useradd wanger
[sudo] alice 的密码:
[alice@server1 ~]$ ls /home
alice wanger
权限管理
权限设置原因
-
服务器中的数据价值
-
员工的工作职责和分工不同
-
应对自外部的攻击(挂马)
-
内部管理的需要
基本概念
- 文件的权限对象:
- owner:属主,u
- group:属组,g
- other:其他,o
root不受权限限制,拥有所有权限
-
文件的三种权限:
- r:Readable 4
- w:Writeable 2
- x:eXcutable 1
-
文件:
- r:可读文件内容
- w:可修改其内容
- x:可作为命令执行
-
目录:
- r:可以使用ls查看此目录中的文件列表
- w:可在此目录中创建mkdir,touch,也可以删除rmdir,rm -rf此目录中的文件
- x:可以使用ls查看此目录中文件列表,可以cd进入此目录
注:一般给予目录读权限时,也将会给其执行权限
奇葩权限:
- 设置不合理的权限,单独出现2或3的权限数字。如权限731中的3权限,3表示写+执行权限,但是写又必须需要能打开之后才可以写,因此必须需要具备可读权限,因此此权限设置不合理。
权限管理(u,g,o)
更改属主(组)chown
更改属组chgrp
[root@server1 ~]# chown alice:hr file1#改属主,属组
[root@server1 ~]# chown alice file1 #改属主
[root@server1 ~]# chown :hr file1 #改属组
[root@server1 ~]# chgrp g1 file1#改文件属组
[root@server1 ~]# ll file1
-rw-r--r--. 1 alice g1 0 7月 12 18:01 file1
[root@server1 ~]# chgrp -R g1 dir1#改文件夹属组
[root@server1 ~]# ll
总用量 16
-rw-------. 1 root root 1241 3月 16 17:52 anaconda-ks.cfg
-rwxr-xr-x. 1 root root 9024 5月 24 12:11 a.out
drwxr-xr-x. 2 root g1 6 7月 12 18:10 dir1
更改文件权限chmod
常用选项:
‐R:递归设置,针对文件夹(目录)
[root@server1 ~]# chmod u=rwx,g=r,o=r file1
[root@server1 ~]# ll file1
-rwxr--r--. 1 alice g1 0 7月 12 18:01 file1
[root@server1 ~]# chmod u-x file1
[root@server1 ~]# ll file1
-rw-r--r--. 1 alice g1 0 7月 12 18:01 file1
[root@server1 ~]# chmod a-w file1
[root@server1 ~]# ll file1
-r--r--r--. 1 alice g1 0 7月 12 18:01 file1
[root@server1 ~]# chmod 764 file1
[root@server1 ~]# ll file1
-rwxrw-r--. 1 alice g1 0 7月 12 18:01 file1
删除文件失败如何解决?
- sudo提权
- 可检查用户对所在目录是否有w权限
ACL权限
- ACL 是 Access Control List 的缩写,在 Linux 系统中, ACL 可实现对单一用户设定访问文件的权限。优势就是让权限控制更加的精准。
getfacl获取ACL权限
getfacl 文件或目录名
setfacl设置ACL权限
常用选项:
‐m :修改acl设定参数
‐x :删除acl设定参数
‐b :移除所有的ACL设定
‐R :递归
‐d :添加默认的acl权限
- 删除ACL权限
删除用户权限:setacl ‐x u:username filename
删除组权限:setacl ‐x g:groupname filename
删除整个acl权限:setacl ‐b filename
- 用户设定ACL权限:setfacl -m u:username:权限 filename
设定alice对file1有rwx权限
[root@server1 ~]# setfacl -m u:alice:rwx file1
[root@server1 ~]# getfacl file1
# file: file1
# owner: alice
# group: g1
user::rwx
user:alice:rwx
group::rw-
mask::rwx
other::r--
设定user对testdirectory目录下所有文件有rwx权限
setfacl ‐R ‐m u:user:rwx testdirectory
去掉user对testdirectory的x权限
setfacl ‐x u:user testdirectory/
去掉所有acl权限
[root@server1 ~]# setfacl -b file1
[root@server1 ~]# getfacl file1
# file: file1
# owner: alice
# group: g1
user::rwx
group::rw-
other::r--
为testdirectory目录添加默认的acl权限,此目录下创建目录和文件,user都有rwx权限
setfacl ‐d ‐m u:user:rwx testdirectory/
- 组设定ACL权限: setfacl -m g:groupname:权限 filename
给acl_test1文件添加mygropu1组rx权限设定
[root@study ~]# setfacl ‐m g:mygroup1:rx acl_test1
[root@study ~]# getfacl acl_test1
# file: acl_test1
# owner: root
# group: root
user::rwx
user:vbird1:rx
group::r‐‐ group:mygroup1:rx # 组权限设定
mask::rx
other::r‐‐
特殊权限
文件的特殊权限包括:SUID、SGID、SBIT
SUID:冒险位S(4)
-
SUID:暂时借出程序所有者的权限
- SUID权限仅对二进制文件(命令)有效 ,且仅在本程序中拥有改权限
查询命令所在的路径
[root@server1 ~]# whereis passwd passwd: /usr/bin/passwd /etc/passwd /usr/share/man/man1/passwd.1.gz [root@server1 ~]# type passwd passwd 是 /usr/bin/passwd
- 举例
- 普通用户zhangsan修改密码=> 调用passwd命令=> 执行/usr/bin/passwd => 修改/etc/shadow文件
[root@server1 ~]# ll /usr/bin/passwd
-rwsr-xr-x. 1 root root 27856 4月 1 2020 /usr/bin/passwd
[root@server1 ~]# ll /etc/shadow
----------. 1 root root 1100 7月 12 17:44 /etc/shadow
普通用户没有直接修改/etc/shadow中密码的权利,只有root可以
普通用户可以通过使用具有s权限的passwd命令,借用root的权利来修改自己的密码
SGID:强制位S(2)
- SGID:暂时借出用户组的权限 2
- 二进制文件(命令)有效
[root@localhost ~]# useradd zhangsan
[root@localhost ~]# useradd lisi
[root@localhost ~]# ll /home/
total 0
drwx‐‐‐‐‐‐. 2 lisi lisi 62 Aug 5 09:51 lisi
drwx‐‐‐‐‐‐. 2 zhangsan zhangsan 62 Aug 5 09:51 zhangsan
[root@localhost ~]# chmod 2770 /home/zhangsan
[root@localhost ~]# ll ‐d /home/zhangsan
drwxrws‐‐‐. 2 zhangsan zhangsan 62 Aug 5 09:51 /home/zhangsan
[root@localhost ~]# usermod ‐aG zhangsan lisi
[root@localhost ~]# su lisi
[lisi@localhost root]$ cd /home/lisi/
[lisi@localhost ~]$ touch 1.txt
[lisi@localhost ~]$ ll
total 0
‐rw‐rw‐r‐‐. 1 lisi lisi 0 Aug 5 09:56 1.txt
[lisi@localhost ~]$ cd /home/zhangsan
[lisi@localhost zhangsan]$ touch 1.txt
[lisi@localhost zhangsan]$ ll
total 0
‐rw‐rw‐r‐‐. 1 lisi zhangsan 0 Aug 5 09:57 1.txt
#lisi用户在SGID目录创建文件的属主为 zhangsan(该目录的所属组)
SBIT:粘滞位T(1)
-
该特殊权限针对目录,目录中的文件只能被文件的拥有者删除
-
SBIT用来做共享目录 :同一用户组的多个用户拥有共同的目录,在创建文件时该用户组的所有用户都有相同的权利操作文件。用户创建该目录时,只有自己或root可以删除该目录下的文件,其他用户不可以修改此文件
[root@server1 ~]# ll -d /tmp
drwxrwxrwt. 9 root root 264 7月 12 14:01 /tmp#t表示具有SBIT权限
设置或修改特殊文件
使用数字,第一位表示特殊权限,后三位为基本权限
chmod u+s file1
chmod 4644 file1
chmod u-s file1
chmod 0644 file1
chmod g+s dir1
chmod 2755 dir1
chmod g-s dir1
chmod 0755 dir1
chmod o+t dir1
chmod 1755 dir1
chmod o-t dir1
chmod 0755 dir1
[root@server1 ~]# chmod 7644 file1
[root@server1 ~]# ll
-rwSr-Sr-T. 1 alice g1 0 7月 12 18:01 file1
注:
大写的高级权限表示普通权限没有x执行权限
小写的高级权限表示普通权限有x执行权限
特殊权限生效的前提是:文件(夹)必须拥有x执行权限
进程umask
umask :文件或目录的遮掩码
File:666 ‐ umask :root创建的文件权限默认为644,普通用户创建的文件权限默认为664
Dir: 777 ‐ umask :root创建的目录权限默认为755,普通用户创建的目录权限默认为775
扩展:实际上我们创建一个普通文件最高权限666(预设没有x权限)。而创建一个文件夹其最高权限777
实际文件权限 = 最高权限 - umask的值
- 查看:umask
[root@server1 ~]# umask
0022 #root默认为022
[zhangsan@server1 ~]$ umask
0002 #普通用户默认为022
-
临时设定:umask 设置值(不建议修改)
-
永久设定:修改相关配置文件~/.bashrc(不建议修改)
- 在文件中追加 :
- umask 设置值