用户管理及权限

用户概览

# 用户/组基本概念

Users and groups:
. Every process (running program) on the system runs as a particular user.
系统上的每个进程(运行的程序)都是作为特定用户运行的
. Every file is owned by a particular user.
每个文件是由一个特定的用户拥有 每个文件都有属主
. Access to files and directories are restricted by user.
访问文件和目录受到用户的限制
. The user associated with a running process determines the files and directories accessible to that process.
与正在运行的进程相关联的用户确定该进程可访问的文件和目录

查看当前登录的用户信息:

# id
uid=0(root) gid=0(root) groups=0(root)

查看文件的owner:

# ll /home/
drwx------. 4 alice alice 4096 Jun 2 15:59 alice
drwxr-xr-x 2 root root 4096 Jun 2 15:33 tianyun

查看运行进程的username:

# ps aux |less
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 3 0.0 0.0 0 0 ? S 06:27 0:00 [ksoftirqd/0]
root 4 0.0 0.0 0 0 ? S 06:27 0:00 [kworker/0:0]
root 5 0.0 0.0 0 0 ? S< 06:27 0:00 [kworker/0:0H]
[root@tianyun ~]# yum -y install httpd
[root@tianyun ~]# systemctl start httpd
[root@tianyun ~]# ps aux |grep httpd
root 1794 0.0 0.0 491540 16656 ? Ss 06:28 0:00 /usr/sbin/httpd -DFOREGROUND
apache 1955 0.0 0.0 503672 23924 ? S 06:28 0:01 /usr/sbin/httpd -DFOREGROUND
apache 1956 0.0 0.0 514328 34120 ? S 06:28 0:03 /usr/sbin/httpd -DFOREGROUND
apache 1957 0.0 0.0 507968 27404 ? S 06:28 0:01 /usr/sbin/httpd -DFOREGROUND
apache 3534 0.2 0.0 530140 49624 ? S 07:44 0:04 /usr/sbin/httpd -DFOREGROUND
apache 3535 0.1 0.0 503672 23300 ? S 07:44 0:01 /usr/sbin/httpd -DFOREGROUND
apache 3536 0.2 0.0 522128 40228 ? S 07:44 0:03 /usr/sbin/httpd -DFOREGROUND
apache 3537 0.1 0.0 503872 23608 ? S 07:44 0:01 /usr/sbin/httpd -DFOREGROUND
apache 3746 0.0 0.0 511368 30368 ? S 07:56 0:00 /usr/sbin/httpd -DFOREGROUND
apache 3866 0.0 0.0 505480 24392 ? S 08:02 0:00 /usr/sbin/httpd -DFOREGROUND
apache 3869 0.0 0.0 505472 24332 ? S 08:02 0:00 /usr/sbin/httpd -DFOREGROUND

和用户组相关的一些文件:

/etc/passwd root:x:0:0:root:/root:/bin/bash 用户信息
用户名:x(密码位):uid(用户id):gid:描述:HOME:shell
/etc/shadow root:$1$MYG2NDG6$a1wtyr5GDM2esAPjug0YP0:15636:0:99999:7::  : 密码信息
$id$salt$encrypted
/etc/group root:x:0: 组信息
[root@tianyun ~]# man 5 passwd
[root@tianyun ~]# man 5 shadow
[root@tianyun ~]# man 5 group
[root@tianyun ~]# man 3 crypt

加密算法id:1: MD5
5: SHA-2566: SHA-512

系统约定: centos6
uid: 0 特权用户
uid: 1~499 系统用户
uid: 500+ 普通用户

centos7:
uid: 0 特权用户
uid: 1~999 系统用户
uid: 1000+ 普通用户

The root user

. uid is 0
UID是0
. all power
所有权力
. This user has the power to override normal privileges on the file system
该用户有权力覆盖文件系统上的普通权限
. installing or removing software and to manage system files and directorie
安装或删除软件并管理系统文件和目录
. Most devices can only be controlled by root
大多数设备只能由root控制

======================================

用户管理

========================================================
groupadd,groupdel
useradd,usermod,userdel
passwd,chage

用户组

[root@tianyun ~]# groupadd hr
[root@tianyun ~]# groupadd sale
[root@tianyun ~]# groupadd it
[root@tianyun ~]# groupadd fd
[root@tianyun ~]# groupadd market
[root@tianyun ~]# groupadd net01 -g 2000          //添加组net01,并指定gid 2000
[root@tianyun ~]# grep 'net01' /etc/group         //查看/etc/group中组net01信息
[root@tianyun ~]# groupdel net01                 //删除组net01

用户
每个用户必须有个主组(基本组),默认情况下系统会创建一个和用户同名的组作为用户的主组;
useradd creates users
==创建用户 未指定选项==

[root@tianyun ~]# useradd user01        
. 未指定该用户的主组
. 未指定该用户的附加组
. 未指定用户的HOME
. 未指定用户的SHELL
. 未指定用户的UID...
[root@tianyun ~]# grep 'user01' /etc/passwd /etc/shadow /etc/group
/etc/passwd:user01:x:507:512::/home/user01:/bin/bash
/etc/shadow:user01:!!:16589:0:99999:7:::
/etc/group:user01:x:512:

[root@tianyun ~]# id user01 
uid=507(user01) gid=512(user01) groups=512(user01)

[root@tianyun ~]# ls /var/spool/mail/user01 
/var/spool/mail/user01

小结:
如果创建一个用户时,未指定任何组(主组或附加组),系统会创建一个和用户名相同的组作为用户的Primary Group.

==创建用户 指定选项==

[root@tianyun ~]# useradd user02 -u 503                     //创建用户usr02,指定uid(3)
[root@tianyun ~]# useradd user03 -d /aaa                    //创建用户user03 指定家目录(6)
[root@tianyun ~]# useradd user05 -s /sbin/nologin       //创建用户并指定shell(7)
[root@tianyun ~]# useradd user07 -G hr,it,fd                    //创建用户,指定附加组
[root@tianyun ~]# useradd user10 -u 4000 -s /sbin/nologin
                                 -g                      //指定gid(4)
                                 -c                      //描述信息(5)
                                 -M                      //不创建家目录
userdel deletes users
==删除用户==
[root@tianyun ~]# userdel user10          //删除用户user10,但不删除用户家目录和mail spool
[root@tianyun ~]# ll -d /home/user10/
drwx------ 3 506 510 4096 09-01 21:14 /home/user10/
[root@tianyun ~]# ll /var/spool/mail/user10 
-rw-rw---- 1 506 mail 0 09-01 21:14 /var/spool/mail/user10
[root@tianyun ~]# userdel -r user2        //删除用户user2,同时删除用户家目录和mail spool

==用户密码==

[root@tianyun ~]# passwd alice      //root可以给任何用户设置密码
[zhuzhu@tianyun ~]$ passwd           //普通用户只能给自己修改密码,而且必须提供原密码

不交互的修改(管道):echo newpasswd |passwd --stdin tom

切换账号:su - 用户名

usermod modifies existing users
==组成员管理==
注意:只针对已存在的用户

[root@tianyun ~]# usermod -G hr niuniu2                     //覆盖原有的附加组
[root@tianyun ~]# usermod -G fd,it niuniu2
[root@tianyun ~]# usermod -aG hr niuniu2                   //增加新的附加组
[root@tianyun~]# gpasswd -a jack wheel                     //usermod -aG hr zhuzhu
[root@tianyun~]# gpasswd -M zhuzhu,maomao100 hr            
[root@tianyun~]# gpasswd -d zhuzhu hr

==其它选项管理==
[root@tianyun ~]# usermod -s /sbin/nologin niuniu2
======================================

no shell

/sbin/nologin 用户无法登录系统,实现管理。仅作为运行进程的用户,访问FTP的用户。
安全的用户
# useradd www -s /sbin/nologin
# grep 'bash$' /etc/passwd

/bin/bash 登录系统,实现管理

shell是用户登录后运行的第一个程序
/usr/sbin/poweroff
/usr/sbin/reboot

setenforce 0

======================================

# 用户扩展知识

/etc/login.defs 是设置用户帐号限制的文件。该文件里的配置对root用户无效。

useradd参照文件

[root@tianyun ~]# vim /etc/login.defs
MAIL_DIR /var/spool/mail
PASS_MAX_DAYS 30
PASS_MIN_DAYS 0
PASS_MIN_LEN 5
PASS_WARN_AGE 7
CREATE_HOME yes
ENCRYPT_METHOD SHA512

[root@tianyun ~]# vim /etc/default/useradd
SHELL=/sbin/nologin

Password aging

# chage -m 0 -M 90 -W 7 -I 14 username
chage -d 0 username will force a password update on next login.
chage -l username will list a username's current settings.
chage -E YYYY-MM-DD will expire an account on a specific day.

手动创建用户示例:

[root@tianyun~]# useradd maomao100
[root@tianyun~]# echo 123456 |passwd --stdin maomao100 //给大家的一个初始密码
[root@tianyun~]# chage -d 0 maomao100 //强制用户在下一次登录时修改密码

======================================

# 用户和组管理

用户和组的功能

1.系统上的每个进程(运行的程序)都是作为特定用户运行的
2.每个文件是由一个特定的用户拥有
3.访问文件和目录受到用户的限制
4.与正在运行的进程相关联的用户确定该进程可访问的文件和目录

与用户和组相关的文件

/etc/passwd 用户信息
/etc/shadow 用户密码
/etc/group 组信息
/etc/gshadow 组密码信息

/etc/passwd文件介绍

每个用户信息保存为一行,由":"分隔为7列

# head -2 /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin

用户名:密码位:UID:GID:描述信息:家目录:登录shell

用户和组的关系

1.每个用户有且只有一个基本组
2.每个用户可以有任意多个附加组

用户管理

1.创建用户:useradd
1).在passwd,shadow文件中创建用户及密码信息
2).在group,gshadow文件中创建用户基本组及组密码信息
3).创建家目录,要注意skel及权限 mkdir /home/tom
4).创建邮箱,要注意权限 (touch /var/spool/mail/tom)
(手动创建的用户需要设置的)

cp -a /etc/skel/ /home/tom
[root@localhost ~]# chown -R tom.tom /home/tom/
[root@localhost ~]# chmod 700 /home/tom/ -R

创建用户指定选项

[root@tianyun ~]# useradd user02 -u 503         //创建用户usr02,指定uid(3)
[root@tianyun ~]# useradd user03 -d /aaa     //创建用户user03 指定家目录(6)
[root@tianyun ~]# useradd user05 -s /sbin/nologin      //创建用户并指定shell(7)
[root@tianyun ~]# useradd user07 -G hr,it,fd     //创建用户,指定附加组
[root@tianyun ~]# useradd user10 -u 4000 -s /sbin/nologin
                                 -g                      //指定gid(4)
                                 -c                      //描述信息(5)
                                 -M                      //不创建家目录

2.修改用户
usermod:用法和useradd基本相同
usermod -G 组名 用户名 将用户添加到附加组中
-aG
passwd:修改密码
root用户可以修改任何用户的密码
普通用户只能修改自己的密码
--stdin:从标准输入中读取密码

#echo newpasswd |passwd --stdin tom    
#echo 333 > pass           
#passwd --stdin tom <pass

//不交互的修改(管道)、(文件重定向)
3.删除用户
userdel
-r 干净地删除用户
4.查看用户

# id tom
 uid=1000(tom) gid=1000(tom) groups=1000(tom)
 #echo user0{1..2} | xargs -n1 id
       "user01 user02"|           

/etc/login.defs
/etc/default/useradd
组管理

1.创建
# groupadd IT
2.删除
# groupdel IT
注意:如果该组是某用户的基本组,则不能被删除
3.修改组成员

# gpasswd
    gpasswd -d 用户名 组名           从组中删除成员
    gpasswd -a 用户名 组名           将用户添加到组中

用户切换

# su - 用户名(完全登陆
# su 用户名(非完全登陆
两者的区别

tee命令
例:

使用tee命令将/etc/passwd文件的第9行内容打印出来的同时追加到pass文件中
    head -9 /etc/passwd | tail -1 | tee -a /home/user2/pass

======================================

### 权限管理

​对用户权力的限制

### 文件的属主属组

每个文件都属于一个特定的用户和一个特定的组

# chown    //修改文件的属主属组
# chown  用户名  文件名    //修改文件的属主
# chown  :组名  文件名     //修改文件的属组,也可以将:换成.
# chown  用户名:组名  文件名   //同时修改文件的属主属组
# chown -R user01 /test      // -R递归,将/test以及下面的所有文件都设置属主为uesr01
# chown -R user01 /test/*    //        将/test下的所有文件属主设置为user01(不包括/test本身

-R递归

UGO权限介绍

u: user 属主
g: group 属组
o: other 其他人

普通文件:(需要对文件所在的目录有x权限)
r: read 读,查看文件的内容 cat,more,less,head,tail
w: write 写,修改文件的内容 vi/vim, >
x: excute 执行,运行一个程序
-: 没有

目录:
r: 查看目录的内容 ls
w: 修改目录的内容 mv cp mkdir touch rm
x: 进入目录 cd 基本权限(只有进去了才能做其他事)

匹配顺序:
1.先看用户是否文件的属主,如果是,就应用属主的权限
2.如果不是文件的属主,再看用户是否文件属组的成员,如果是,则应用属组的权限
3.如果以上均不是,则应用其他人的权限

修改UGO权限

谁可以修改
1.root
2.文件的属主

chmod: 修改文件的权限
语法:
chmod 模式 文件
模式:
[ugoa][+-=][rwx-]

使用数字来表示:
r 4
w 2
x 1
- 0

[图片上传失败...(image-70e7cc-1541677602010)]

扩展:umask

umask:权限掩码,掩掉的权限(eg:umask 453:就是掩掉读、读执行、写执行)
目录的默认最大权限:777
文件的默认最大权限:666
创建文件的最终权限等于最大权限去掉umask掩掉的权限
1)目录的最终权限:777-453=324(即-wx-w-r--)
2)文件的最终权限:666-453(6-偶数、6-奇数+1)=224
查看掩码:

umask

修改掩码

umask 掩码 //临时生效

权限管理(续)

suid - 4
作用于命令, 其他用户在使用该命令的时候,临时获得该命令的属主的身份执行


``` shell
# chmod u+s /tmp/cat
# ll /tmp/cat
-rwsr-xr-x 1 root root 54080 7月  24 09:56 /tmp/cat    //属主权限的x位变成了s
```

实验: 验证suid
``` shell
# mkdir /test
# cp /etc/passwd  /test
# chmod 400  /test/passwd    //将测试文件中other权限去掉
# cp /usr/bin/cat  /tmp      //不要直接修改/usr/bin/cat命令
# /tmp/cat  /test/passwd     //测试复制过来的cat命令是否可用
# useradd jim
# su - jim
$ /tmp/cat /etc/passwd       //使用普通用户测试是否可用
$ /tmp/cat /test/passwd      //没有权限,无法访问
/tmp/cat: /test/passwd: 权限不够
# chmod u+s /tmp/cat         //给/tmp/cat加上suid权限
$ /tmp/cat /test/passwd      //现在可以访问了
```

sgid - 2

  1. 作用于命令, 其他用户在使用该命令的时候,临时获得该命令的属组的身份执行
  2. 作用于目录,在该目录下创建文件,其属组会继承该目录的属组
``` shell
# chmod g+s /test
# ll -d /test/
drwxr-sr-x. 3 root IT 39 7月  24 09:56 /test/      //属组权限的x位变成了s
```
实验: 验证sgid
``` shell
# chown :IT /test
# chmod g+s /test
# cd /test/
# touch abcd
# ll abcd
-rw-r--r-- 1 root IT    0 7月  24 10:56 abcd    //属组继承了目录的属组
```

stiky bit - 1
作用于共享目录(777), 用户不能修改或删除别人的文件

``` shell
# chmod o+t /test
# ll -d /test/
drwxrwxrwt 2 root root 6 7月  24 11:44 /test/   //other权限的x位变成了t
```

ACL权限
文件或目录针对某一用户或组进行的rwx权限细分


查看acl权限: getfacl
设置acl权限: setfacl
​
对用户设置acl权限:
实验: 文件/test/a.txt,属主为root,属组为root,请设计合适的权限,要求jim用户可以访问,其他用户不能访问
``` shell
# echo "hello" > /test/a.txt
# chmod 600 /test/a.txt
# setfacl -m u:jim:r-- /test/a.txt    //针对用户设置acl权限
验证:
# su - jim
$ cat /test/a.txt
hello
# su - tom
$ cat /test/a.txt
cat: /test/a.txt: 权限不够
​```
对组设置acl权限:
``` shell
# setfacl -m g:IT:rwx /yunjisuan
取消用户的acl权限
# setfacl -x u:jim /test/a.txt
取消文件所有的acl权限
# setfacl -b /test/a.txt
查看文件的acl权限
# getfacl /caiwu/jim.txt 
getfacl: Removing leading '/' from absolute path names
# file: caiwu/jim.txt
# owner: caiwu1
# group: caiwu1
user::rw-              //属主的权限
user:tom:rw-           //对用户tom设置的acl权限
user:jim:rwx           //对用户jim设置的acl权限
group::rw-
group:IT:rwx           //对组IT设置的acl权限
mask::rwx
other::---
```


文件系统权限(对所有用户生效包括root用户
​a: 只能追加,不能做其他修改,不能删除
​i: 不能修改,不能删除


查看: lsattr
设置: chattr
​``` shell
# chattr +i  /test/a.txt          //给a.txt文件加上i权限
# chattr +a  /test/b.txt          //给b.txt文件加上a权限
# lsattr /test/                   //查看权限
----i----------- /test/a.txt
-----a---------- /test/b.txt
# rm -rf a.txt b.txt             //删除文件失败
rm: 无法删除"a.txt": 不允许的操作
rm: 无法删除"b.txt": 不允许的操作
# echo hello >> a.txt            //有i权限,追加失败
-bash: a.txt: 权限不够
# echo hello >> b.txt            //有a权限,追加成功
# chattr -a /test/b.txt          //删除a权限
# lsattr /test/b.txt 
---------------- /test/b.txt
```

普通用户提权
​su : 需要输入管理员密码, 不能限制使用范围
​sudo : 由管理员配置哪些用户可以提权, 需要输入普通用户自己的密码

``` shell
# su tom    //非完全登录,只会加载两个环境配置文件
~/.bashrc
/etc/bashrc
# su - tom  //完全登录,加载四个环境配置文件
上一次登录:三 7月 25 09:41:07 CST 2018pts/5 上
/etc/profile
~/.bash_profile
~/.bashrc
/etc/bashrc
```

sudo配置文件:/etc/sudoers
建议使用 visudo 命令来配置,具有语法检测功能
配置示例:
    # visudo
    ...
    tom     ALL=(ALL)   /usr/sbin/useradd
    ...
    说明:
    tom: 配置可以提权的用户名
    ALL: 可以在哪台主机上
    (ALL): 可以以谁的身份执行,可以省略,默认为root身份
    /usr/sbin/useradd: 可以使用的命令列表,注意要用绝对路径,多条命令用","隔开
​
验证:
``` shell
    # su - tom
    $ sudo useradd lily      //tom用户创建用户lily
    [sudo] tom 的密码:       //输入tom的密码
    $ id lily
    uid=10004(lily) gid=10006(lily) 组=10006(lily)         //创建成功
    $ sudo userdel -r lily    //tom删除用户,因为没有授权,所以失败了
    对不起,用户 tom 无权以 root 的身份在 localhost.localdomain 上执行 /sbin/userdel -r lily。
```

sudo普通用户提权

以下两种方式都可以将普通用户提升为root

  1. Switching users with su
[alice@tianyun ~]$ useradd u1
-bash: /usr/sbin/useradd: 权限不够
[alice@tianyun ~]$ su - root
password:      //需要输入管理员密码,不能限制使用范围
[root@tianyun ~]# useradd u1
``` shell
#su tom   非完全登录,只会加载两个环境配置文件
~/.bashrc
/etc/bashrc
#su - tom  完全登录,加载四个环境配置文件
上一次登录:                      
/etc/profile
~/.bash_profile
~/.bashrc
/etc/bashrc
```
  1. Running commands as root with sudo
    (由管理员配置哪些用户可以提权,需要输入普通用户自己的密码)
[root@tianyun ~]# useradd yangyang -G wheel
[root@tianyun ~]# id yangyang
uid=504(yangyang) gid=504(yangyang) 组=504(yangyang),10(wheel)

[yangyang@tianyun ~]$ useradd gougou10
-bash: /usr/sbin/useradd: 权限不够
[yangyang@tianyun ~]$ sudo useradd gougou10
[yangyang@tianyun ~]$ id gougou10
uid=505(gougou10) gid=505(gougou10) 组=505(gougou10)
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,590评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,808评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,151评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,779评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,773评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,656评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,022评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,678评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,038评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,756评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,411评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,005评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,973评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,053评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,495评论 2 343

推荐阅读更多精彩内容