用戶概覽
# 用戶/組基本概念
Users and groups:
. Every process (running program) on the system runs as a particular user.
系統(tǒng)上的每個進(jìn)程(運行的程序)都是作為特定用戶運行的
. 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.
與正在運行的進(jìn)程相關(guān)聯(lián)的用戶確定該進(jìn)程可訪問的文件和目錄
查看當(dāng)前登錄的用戶信息:
# 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
查看運行進(jìn)程的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
和用戶組相關(guān)的一些文件:
/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
系統(tǒng)約定: centos6
uid: 0 特權(quán)用戶
uid: 1~499 系統(tǒng)用戶
uid: 500+ 普通用戶
centos7:
uid: 0 特權(quán)用戶
uid: 1~999 系統(tǒng)用戶
uid: 1000+ 普通用戶
The root user
. uid is 0
UID是0
. all power
所有權(quán)力
. This user has the power to override normal privileges on the file system
該用戶有權(quán)力覆蓋文件系統(tǒng)上的普通權(quán)限
. installing or removing software and to manage system files and directorie
安裝或刪除軟件并管理系統(tǒng)文件和目錄
. Most devices can only be controlled by root
大多數(shù)設(shè)備只能由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
用戶
每個用戶必須有個主組(基本組),默認(rèn)情況下系統(tǒng)會創(chuàng)建一個和用戶同名的組作為用戶的主組椅邓;
useradd creates users
==創(chuàng)建用戶 未指定選項==
[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
小結(jié):
如果創(chuàng)建一個用戶時,未指定任何組(主組或附加組)套像,系統(tǒng)會創(chuàng)建一個和用戶名相同的組作為用戶的Primary Group.
==創(chuàng)建用戶 指定選項==
[root@tianyun ~]# useradd user02 -u 503 //創(chuàng)建用戶usr02,指定uid(3)
[root@tianyun ~]# useradd user03 -d /aaa //創(chuàng)建用戶user03 指定家目錄(6)
[root@tianyun ~]# useradd user05 -s /sbin/nologin //創(chuàng)建用戶并指定shell(7)
[root@tianyun ~]# useradd user07 -G hr,it,fd //創(chuàng)建用戶终息,指定附加組
[root@tianyun ~]# useradd user10 -u 4000 -s /sbin/nologin
-g //指定gid(4)
-c //描述信息(5)
-M //不創(chuàng)建家目錄
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可以給任何用戶設(shè)置密碼
[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 用戶無法登錄系統(tǒng)柳譬,實現(xiàn)管理。僅作為運行進(jìn)程的用戶续镇,訪問FTP的用戶美澳。
安全的用戶
# useradd www -s /sbin/nologin
# grep 'bash$' /etc/passwd
/bin/bash 登錄系統(tǒng),實現(xiàn)管理
shell是用戶登錄后運行的第一個程序
/usr/sbin/poweroff
/usr/sbin/reboot
setenforce 0
======================================
# 用戶擴(kuò)展知識
/etc/login.defs 是設(shè)置用戶帳號限制的文件摸航。該文件里的配置對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.
手動創(chuàng)建用戶示例:
[root@tianyun~]# useradd maomao100
[root@tianyun~]# echo 123456 |passwd --stdin maomao100 //給大家的一個初始密碼
[root@tianyun~]# chage -d 0 maomao100 //強(qiáng)制用戶在下一次登錄時修改密碼
======================================
# 用戶和組管理
用戶和組的功能
1.系統(tǒng)上的每個進(jìn)程(運行的程序)都是作為特定用戶運行的
2.每個文件是由一個特定的用戶擁有
3.訪問文件和目錄受到用戶的限制
4.與正在運行的進(jìn)程相關(guān)聯(lián)的用戶確定該進(jìn)程可訪問的文件和目錄
與用戶和組相關(guān)的文件
/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
用戶和組的關(guān)系
1.每個用戶有且只有一個基本組
2.每個用戶可以有任意多個附加組
用戶管理
1.創(chuàng)建用戶:useradd
1).在passwd,shadow文件中創(chuàng)建用戶及密碼信息
2).在group,gshadow文件中創(chuàng)建用戶基本組及組密碼信息
3).創(chuàng)建家目錄,要注意skel及權(quán)限 mkdir /home/tom
4).創(chuàng)建郵箱,要注意權(quán)限 (touch /var/spool/mail/tom)
(手動創(chuàng)建的用戶需要設(shè)置的)
cp -a /etc/skel/ /home/tom
[root@localhost ~]# chown -R tom.tom /home/tom/
[root@localhost ~]# chmod 700 /home/tom/ -R
創(chuàng)建用戶指定選項
[root@tianyun ~]# useradd user02 -u 503 //創(chuàng)建用戶usr02,指定uid(3)
[root@tianyun ~]# useradd user03 -d /aaa //創(chuàng)建用戶user03 指定家目錄(6)
[root@tianyun ~]# useradd user05 -s /sbin/nologin //創(chuàng)建用戶并指定shell(7)
[root@tianyun ~]# useradd user07 -G hr,it,fd //創(chuàng)建用戶酱虎,指定附加組
[root@tianyun ~]# useradd user10 -u 4000 -s /sbin/nologin
-g //指定gid(4)
-c //描述信息(5)
-M //不創(chuàng)建家目錄
2.修改用戶
usermod:用法和useradd基本相同
usermod -G 組名 用戶名 將用戶添加到附加組中
-aG
passwd:修改密碼
root用戶可以修改任何用戶的密碼
普通用戶只能修改自己的密碼
--stdin:從標(biāo)準(zhǔn)輸入中讀取密碼
#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.創(chuàng)建
# groupadd IT
2.刪除
# groupdel IT
注意:如果該組是某用戶的基本組,則不能被刪除
3.修改組成員
# gpasswd
gpasswd -d 用戶名 組名 從組中刪除成員
gpasswd -a 用戶名 組名 將用戶添加到組中
用戶切換
# su - 用戶名(完全登陸
# su 用戶名(非完全登陸
兩者的區(qū)別
tee命令
例:
使用tee命令將/etc/passwd文件的第9行內(nèi)容打印出來的同時追加到pass文件中
head -9 /etc/passwd | tail -1 | tee -a /home/user2/pass
======================================
### 權(quán)限管理
?對用戶權(quán)力的限制
### 文件的屬主屬組
每個文件都屬于一個特定的用戶和一個特定的組
# chown //修改文件的屬主屬組
# chown 用戶名 文件名 //修改文件的屬主
# chown :組名 文件名 //修改文件的屬組,也可以將:換成.
# chown 用戶名:組名 文件名 //同時修改文件的屬主屬組
# chown -R user01 /test // -R遞歸,將/test以及下面的所有文件都設(shè)置屬主為uesr01
# chown -R user01 /test/* // 將/test下的所有文件屬主設(shè)置為user01(不包括/test本身
-R遞歸
UGO權(quán)限介紹
u: user 屬主
g: group 屬組
o: other 其他人
?
普通文件:(需要對文件所在的目錄有x權(quán)限)
r: read 讀,查看文件的內(nèi)容 cat,more,less,head,tail
w: write 寫,修改文件的內(nèi)容 vi/vim, >
x: excute 執(zhí)行,運行一個程序
-: 沒有
?
目錄:
r: 查看目錄的內(nèi)容 ls
w: 修改目錄的內(nèi)容 mv cp mkdir touch rm
x: 進(jìn)入目錄 cd 基本權(quán)限(只有進(jìn)去了才能做其他事)
?
匹配順序:
1.先看用戶是否文件的屬主,如果是,就應(yīng)用屬主的權(quán)限
2.如果不是文件的屬主,再看用戶是否文件屬組的成員,如果是,則應(yīng)用屬組的權(quán)限
3.如果以上均不是,則應(yīng)用其他人的權(quán)限
修改UGO權(quán)限
誰可以修改
1.root
2.文件的屬主
chmod: 修改文件的權(quán)限
語法:
chmod 模式 文件
模式:
[ugoa][+-=][rwx-]
使用數(shù)字來表示:
r 4
w 2
x 1
- 0
[圖片上傳失敗...(image-70e7cc-1541677602010)]
擴(kuò)展:umask
umask:權(quán)限掩碼读串,掩掉的權(quán)限(eg:umask 453:就是掩掉讀聊记、讀執(zhí)行撒妈、寫執(zhí)行)
目錄的默認(rèn)最大權(quán)限:777
文件的默認(rèn)最大權(quán)限:666
創(chuàng)建文件的最終權(quán)限等于最大權(quán)限去掉umask掩掉的權(quán)限
1)目錄的最終權(quán)限:777-453=324(即-wx-w-r--)
2)文件的最終權(quán)限:666-453(6-偶數(shù)、6-奇數(shù)+1)=224
查看掩碼:
umask
修改掩碼
umask 掩碼 //臨時生效
權(quán)限管理(續(xù))
suid - 4
作用于命令, 其他用戶在使用該命令的時候,臨時獲得該命令的屬主的身份執(zhí)行
``` shell
# chmod u+s /tmp/cat
# ll /tmp/cat
-rwsr-xr-x 1 root root 54080 7月 24 09:56 /tmp/cat //屬主權(quán)限的x位變成了s
```
實驗: 驗證suid
``` shell
# mkdir /test
# cp /etc/passwd /test
# chmod 400 /test/passwd //將測試文件中other權(quán)限去掉
# cp /usr/bin/cat /tmp //不要直接修改/usr/bin/cat命令
# /tmp/cat /test/passwd //測試復(fù)制過來的cat命令是否可用
# useradd jim
# su - jim
$ /tmp/cat /etc/passwd //使用普通用戶測試是否可用
$ /tmp/cat /test/passwd //沒有權(quán)限,無法訪問
/tmp/cat: /test/passwd: 權(quán)限不夠
# chmod u+s /tmp/cat //給/tmp/cat加上suid權(quán)限
$ /tmp/cat /test/passwd //現(xiàn)在可以訪問了
```
sgid - 2
- 作用于命令, 其他用戶在使用該命令的時候,臨時獲得該命令的屬組的身份執(zhí)行
- 作用于目錄,在該目錄下創(chuàng)建文件,其屬組會繼承該目錄的屬組
``` shell
# chmod g+s /test
# ll -d /test/
drwxr-sr-x. 3 root IT 39 7月 24 09:56 /test/ //屬組權(quán)限的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權(quán)限的x位變成了t
```
ACL權(quán)限
文件或目錄針對某一用戶或組進(jìn)行的rwx權(quán)限細(xì)分
查看acl權(quán)限: getfacl
設(shè)置acl權(quán)限: setfacl
?
對用戶設(shè)置acl權(quán)限:
實驗: 文件/test/a.txt,屬主為root,屬組為root,請設(shè)計合適的權(quán)限,要求jim用戶可以訪問,其他用戶不能訪問
``` shell
# echo "hello" > /test/a.txt
# chmod 600 /test/a.txt
# setfacl -m u:jim:r-- /test/a.txt //針對用戶設(shè)置acl權(quán)限
驗證:
# su - jim
$ cat /test/a.txt
hello
# su - tom
$ cat /test/a.txt
cat: /test/a.txt: 權(quán)限不夠
?```
對組設(shè)置acl權(quán)限:
``` shell
# setfacl -m g:IT:rwx /yunjisuan
取消用戶的acl權(quán)限
# setfacl -x u:jim /test/a.txt
取消文件所有的acl權(quán)限
# setfacl -b /test/a.txt
查看文件的acl權(quán)限
# getfacl /caiwu/jim.txt
getfacl: Removing leading '/' from absolute path names
# file: caiwu/jim.txt
# owner: caiwu1
# group: caiwu1
user::rw- //屬主的權(quán)限
user:tom:rw- //對用戶tom設(shè)置的acl權(quán)限
user:jim:rwx //對用戶jim設(shè)置的acl權(quán)限
group::rw-
group:IT:rwx //對組IT設(shè)置的acl權(quán)限
mask::rwx
other::---
```
?
文件系統(tǒng)權(quán)限(對所有用戶生效包括root用戶
?a: 只能追加,不能做其他修改,不能刪除
?i: 不能修改,不能刪除
查看: lsattr
設(shè)置: chattr
?``` shell
# chattr +i /test/a.txt //給a.txt文件加上i權(quán)限
# chattr +a /test/b.txt //給b.txt文件加上a權(quán)限
# lsattr /test/ //查看權(quán)限
----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權(quán)限,追加失敗
-bash: a.txt: 權(quán)限不夠
# echo hello >> b.txt //有a權(quán)限,追加成功
# chattr -a /test/b.txt //刪除a權(quán)限
# lsattr /test/b.txt
---------------- /test/b.txt
```
普通用戶提權(quán)
?su : 需要輸入管理員密碼, 不能限制使用范圍
?sudo : 由管理員配置哪些用戶可以提權(quán), 需要輸入普通用戶自己的密碼
``` shell
# su tom //非完全登錄,只會加載兩個環(huán)境配置文件
~/.bashrc
/etc/bashrc
# su - tom //完全登錄,加載四個環(huán)境配置文件
上一次登錄:三 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: 配置可以提權(quán)的用戶名
ALL: 可以在哪臺主機(jī)上
(ALL): 可以以誰的身份執(zhí)行,可以省略,默認(rèn)為root身份
/usr/sbin/useradd: 可以使用的命令列表,注意要用絕對路徑,多條命令用","隔開
?
驗證:
``` shell
# su - tom
$ sudo useradd lily //tom用戶創(chuàng)建用戶lily
[sudo] tom 的密碼: //輸入tom的密碼
$ id lily
uid=10004(lily) gid=10006(lily) 組=10006(lily) //創(chuàng)建成功
$ sudo userdel -r lily //tom刪除用戶,因為沒有授權(quán),所以失敗了
對不起排监,用戶 tom 無權(quán)以 root 的身份在 localhost.localdomain 上執(zhí)行 /sbin/userdel -r lily狰右。
```
sudo普通用戶提權(quán)
以下兩種方式都可以將普通用戶提升為root
- Switching users with su
[alice@tianyun ~]$ useradd u1
-bash: /usr/sbin/useradd: 權(quán)限不夠
[alice@tianyun ~]$ su - root
password: //需要輸入管理員密碼,不能限制使用范圍
[root@tianyun ~]# useradd u1
``` shell
#su tom 非完全登錄,只會加載兩個環(huán)境配置文件
~/.bashrc
/etc/bashrc
#su - tom 完全登錄舆床,加載四個環(huán)境配置文件
上一次登錄:
/etc/profile
~/.bash_profile
~/.bashrc
/etc/bashrc
```
- Running commands as root with sudo
(由管理員配置哪些用戶可以提權(quán)挟阻,需要輸入普通用戶自己的密碼)
[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: 權(quán)限不夠
[yangyang@tianyun ~]$ sudo useradd gougou10
[yangyang@tianyun ~]$ id gougou10
uid=505(gougou10) gid=505(gougou10) 組=505(gougou10)