用户概览
# 用户/组基本概念
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
加密算法1: MD5
6: 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
- 作用于命令, 其他用户在使用该命令的时候,临时获得该命令的属组的身份执行
- 作用于目录,在该目录下创建文件,其属组会继承该目录的属组
``` 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
- 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
```
- 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)