2018-05-18課堂筆記
2018-05-18課堂筆記
目錄
一、用戶配置文件和密碼配置文件
二、用戶組管理
三、用戶管理
四、usermod命令
五、用戶密碼管理
六、mkpasswd命令
七、su命令
八、sudo命令
九、限制root遠程登錄
一、用戶配置文件和密碼配置文件
1.用戶文件/etc/passwd
[root@bluequark ~]# head -n 5 /etc/passwd //從/etc/passwd文件可以看到,第一行都包括7個字段,第個字段間用":"分隔 //格式 用戶名:密碼:UID:GID:用戶信息說明:用戶家目錄:shell //密碼字段是加密碼後的密碼,若為"x",則密碼保存在/etc/shadow文件中,如用戶沒有密碼,則為空 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 ......中間段信息略 postfix:x:89:89::/var/spool/postfix:/sbin/nologin chrony:x:998:996::/var/lib/chrony:/sbin/nologin sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin hjm:x:5000:5000:HJM:/home/hjm:/bin/bash
2.用戶密碼文件/etc/shadow
/etc/shadow文件是/etc/passwd的影子文件,這兩個文件互補,該文件只有root權限可以讀取和操作。
[root@bluequark ~]# cat /etc/shadow //etc/shadow內容包括九個字段,字段間以":"分隔 //格式 用戶名:密碼:上次密碼修改時間:密碼不可被修改的天數:密碼需要重新修改的天數:密碼需要重新修改前的警告期限:密碼過期的寬限時間:帳號失效日期:保留 //這裏的密碼是真正的密碼,是經過加密的密文,如果該字段包含!或*,表示該用戶無法登錄,該字段為空,表示用戶登錄無需密碼,以!號開始,表示密碼已經被鎖定。 //第三個字段和第八個字段的日期都是使用1970年1月1日作為1 root:$6$wuyQ2nlLIXTI2IPk$99X/7wGl4kR856WTD8tU9QkNjkY3BnlP83pzuROgydZB09Ushf2UmeaeprPdXf46ohfHujbmtGYKxfOyq5L8z.::0:99999:7::: bin:*:17110:0:99999:7::: daemon:*:17110:0:99999:7::: adm:*:17110:0:99999:7::: lp:*:17110:0:99999:7::: ......中間段信息略 postfix:!!:17641:::::: chrony:!!:17641:::::: sshd:!!:17641:::::: hjm:$6$iB95gZCu1U7k6axG$rsEXykYY1zg/rmdLNEgn/tsG9MjpKIbBX0tiaNNH2c7YcDInGyr5LJNZij/nci0fN.HbYhnyqjEYwBJ4InHWG0::0:99999:7:::
二、用戶組管理
1.組配置文件/etc/group
[root@bluequark ~]# cat /etc/group
///etc/group包括4個字段,以":"分隔
//格式 用戶組名稱:用戶組密碼:GID:用戶組成員
//用戶組密碼如果為x,表示未設置密碼。通常無須設置。
root:x:0:
bin:x:1:
daemon:x:2:
sys:x:3:
adm:x:4:
tty:x:5:
......中間段信息略
postfix:x:89:
chrony:x:996:
sshd:x:74:
hjm:x:5000:hjm
2.組密碼配置文件/etc/gshadow
[root@bluequark ~]# cat /etc/gshadow //在/etc/gshadow文件中,每個用戶組獨占一行,每行包括4個字段,字段間以":"分隔 //格式 用戶組名稱:用戶組密碼:用戶組管理者:組成員 //用戶組密碼是加密後的密碼,該字段為空,表示只有組內成員可以擁有該組的權限。 root::: bin::: daemon::: sys::: adm::: tty::: ......中間段信息略 postfix:!:: chrony:!:: sshd:!:: hjm:!!::hjm
3.添加組
//新建一個組名為group1的用戶組
[root@bluequark ~]# groupadd group1
[root@bluequark ~]# grep group1 /etc/group /etc/gshadow
/etc/group:group1:x:5001:
/etc/gshadow:group1:!::
//新建一個名為group2的系統組
[root@bluequark ~]# groupadd -r group2
[root@bluequark ~]# grep group2 /etc/group /etc/gshadow
/etc/group:group2:x:994:
/etc/gshadow:group2:!::
//添加GID為1111的用戶組group3
[root@bluequark ~]# groupadd -g 1111 group3
[root@bluequark ~]# grep group3 /etc/group /etc/gshadow
/etc/group:group3:x:1111:
/etc/gshadow:group3:!::
4.刪除組
//刪除用戶組group3
[root@bluequark ~]# groupdel group3
//group3用戶組被成功刪除
[root@bluequark ~]# grep group3 /etc/group /etc/gshadow
//如果用戶還存在,無法刪除用戶的主組
[root@bluequark ~]# grep adminuser /etc/passwd
adminuser:x:5001:5002::/home/adminuser:/bin/bash
[root@bluequark ~]# grep adminuser /etc/group
adminuser:x:5002:
[root@bluequark ~]# groupdel adminuser
groupdel: cannot remove the primary group of user ‘adminuser‘
//將組中的用戶移走後,可刪除該組
[root@bluequark ~]# groupadd newgroup
[root@bluequark ~]# usermod -g newgroup adminuser
[root@bluequark ~]# groupdel adminuser
//成功刪除
[root@bluequark ~]# grep adminuser /etc/group
三、用戶管理
1.新建用戶
可使用useradd命令建立用戶帳戶和創建用戶的起始目錄,但只有超級用戶才有權限。
useradd命令加添用戶時,如不加任何參數,則系統將根據默認的參數來添加用戶(/etc/login.defs和/etc/default/useradd,/etc/skel/*)
//不加任何參數,以系統默認值建立一個用戶admin
[root@bluequark ~]# useradd admin
[root@bluequark ~]# grep admin /etc/passwd /etc/shadow /etc/group /etc/gshadow
/etc/passwd:admin:x:5002:5002::/home/admin:/bin/bash
/etc/shadow:admin:!!:17670:0:99999:7:::
/etc/group:admin:x:5002:
/etc/gshadow:admin:!::
[root@bluequark ~]# ls -la /home/admin
total 12
drwx------ 2 admin admin 62 May 19 16:26 .
drwxr-xr-x. 5 root root 47 May 19 16:26 ..
-rw-r--r-- 1 admin admin 18 Aug 3 2017 .bash_logout
-rw-r--r-- 1 admin admin 193 Aug 3 2017 .bash_profile
-rw-r--r-- 1 admin admin 231 Aug 3 2017 .bashrc
//添加用戶user1,設置其真實名字"a common user",其家目錄在/opt/user1下,讓其歸屬為組admin,root成員,其shell類型為tcsh
/etc/passwd:user1:x:5003:5004:a common user:/opt/user1:/bin/tcsh
/etc/shadow:user1:!!:17670:0:99999:7:::
/etc/group:root:x:0:user1
/etc/group:admin:x:5002:user1
/etc/group:user1:x:5004:
/etc/gshadow:root:::user1
/etc/gshadow:admin:!::user1
/etc/gshadow:user1:!::
// 添加自定義用戶ID為5005的用戶user2
[root@bluequark ~]# useradd -u 5005 user2
[root@bluequark ~]# grep user2 /etc/passwd
user2:x:5005:5005::/home/user2:/bin/bash
//新建用戶時不生成家目錄
[root@bluequark ~]# useradd -M user3
[root@bluequark ~]# ls -al /home/user3
//說明家目錄文件夾不存在
ls: cannot access /home/user3: No such file or directory
//但是user3是有家目錄的,只是家目錄文件夾不存在,可以手動創建
[root@bluequark ~]# grep user3 /etc/passwd
user3:x:5006:5006::/home/user3:/bin/bash
[root@bluequark ~]# su - user3
su: warning: cannot change directory to /home/user3: No such file or directory
-bash-4.2$
2.刪除用戶
[root@bluequark ~]# grep user2 /etc/passwd
user2:x:5005:5005::/home/user2:/bin/bash
//不帶參數,刪除用戶user2, 家目錄還在
[root@bluequark ~]# userdel user2
[root@bluequark ~]# grep user2 /etc/passwd
[root@bluequark ~]#
[root@bluequark ~]# ls -ld /home/user2
drwx------ 2 5005 5005 62 May 19 17:45 /home/user2
//帶參數-r,刪除用戶的同時,刪除其家目錄
[root@bluequark ~]# grep admin /etc/passwd
admin:x:5002:5002::/home/admin:/bin/bash
[root@bluequark ~]# ls -ld /home/admin
drwx------ 2 admin admin 62 May 19 16:26 /home/admin
[root@bluequark ~]# userdel -r admin
[root@bluequark ~]# grep admin /etc/passwd
[root@bluequark ~]#
[root@bluequark ~]# ls -ld /home/admin
ls: cannot access /home/admin: No such file or directory
四、Usermod
usermod的作用:修改用戶類型、所歸屬的組,修改用戶密碼的有效期,還能修改登錄名
常用選項
-g 修改用戶的所屬組
//用戶nico的主組id為5007,主組名:nico
[root@bluequark ~]# grep nico /etc/passwd
nico:x:5007:5007::/home/nico:/bin/bash
[root@bluequark ~]# grep 5007 /etc/group
nico:x:5007:
//變更nico主組為newgroup
[root@bluequark ~]# usermod -g newgroup nico
[root@bluequark ~]# id nico
uid=5007(nico) gid=5003(newgroup) groups=5003(newgroup)
//用戶nico的主組已經變更為newgroup
-G 增加用戶的附屬組
[root@bluequark ~]# id nico
uid=5007(nico) gid=5003(newgroup) groups=5003(newgroup)
[root@bluequark ~]# usermod -G nico nico
[root@bluequark ~]# id nico
uid=5007(nico) gid=5003(newgroup) groups=5003(newgroup),5007(nico)
-u 修改用戶的uid
[root@bluequark ~]# id nico
uid=5007(nico) gid=5003(newgroup) groups=5003(newgroup),5007(nico)
[root@bluequark ~]# usermod -u 5008 nico
[root@bluequark ~]# id nico
uid=5008(nico) gid=5003(newgroup) groups=5003(newgroup),5007(nico)
-L 鎖定用戶
//密碼字段第一位不為!,說明用戶沒有鎖定
[root@bluequark ~]# grep nico /etc/shadow
nico:$6$Q52VYIOk$MhEHOcBLqPSiAwz.j4K.74mvfSuYKhluACR25QOrsn6yRRWEBOeP8fN6s1KWObm0IJcdah5wrXkuize5Anlgn1:17670:0:99999:7:::
//鎖定用戶
[root@bluequark ~]# usermod -L nico
[root@bluequark ~]# grep nico /etc/shadow
nico:!$6$Q52VYIOk$MhEHOcBLqPSiAwz.j4K.74mvfSuYKhluACR25QOrsn6yRRWEBOeP8fN6s1KWObm0IJcdah5wrXkuize5Anlgn1:17670:0:99999:7:::
-U 解鎖用戶
[root@bluequark ~]# grep nico /etc/shadow
nico:!$6$Q52VYIOk$MhEHOcBLqPSiAwz.j4K.74mvfSuYKhluACR25QOrsn6yRRWEBOeP8fN6s1KWObm0IJcdah5wrXkuize5Anlgn1:17670:0:99999:7:::
[root@bluequark ~]# usermod -U nico
[root@bluequark ~]# grep nico /etc/shadow
nico:$6$Q52VYIOk$MhEHOcBLqPSiAwz.j4K.74mvfSuYKhluACR25QOrsn6yRRWEBOeP8fN6s1KWObm0IJcdah5wrXkuize5Anlgn1:17670:0:99999:7:::
-l修改用戶登錄名
-d修改用戶家目錄
//將kennminn用戶改名為shelly,並將其家目錄轉移到/opt/shelly
[root@bluequark ~]# usermod -d /opt/shelly -m -l shelly -U kennminn
[root@bluequark ~]# ls -ld /opt/shelly/
drwx------ 2 shelly kennminn 62 May 19 19:58 /opt/shelly/
[root@bluequark ~]# groupadd shelly
[root@bluequark ~]# chown -R shelly.shelly /opt/shelly
[root@bluequark ~]# ls -ld /opt/shelly/
drwx------ 2 shelly shelly 62 May 19 19:58 /opt/shelly/
五、用戶密碼管理
可以用passwd命令來實現對用戶密碼的管理
//交互式修改用戶密碼
[root@bluequark ~]# useradd nico
[root@bluequark ~]# passwd nico
Changing password for user nico.
New password: //輸入密碼
BAD PASSWORD: The password is shorter than 8 characters
Retype new password: //再次輸入密碼
passwd: all authentication tokens updated successfully.
//非交互式修改用戶密碼方法1
[root@bluequark ~]# echo ‘12345‘ | passwd --stdin nico
Changing password for user nico.
passwd: all authentication tokens updated successfully.
//非交互式修改用戶密碼方法2
[root@bluequark ~]# echo -e "123456\n123456" | passwd nico
Changing password for user nico.
New password: BAD PASSWORD: The password is shorter than 8 characters
Retype new password: passwd: all authentication tokens updated successfully.
//刪除用戶密碼
[root@bluequark ~]# passwd -d nico
Removing password for user nico.
passwd: Success
//鎖定用戶帳戶
[root@bluequark ~]# passwd -l nico
Locking password for user nico.
passwd: Success
//解鎖用戶帳戶
[root@bluequark ~]# passwd -u nico
Unlocking password for user nico.
passwd: Success
六、mkpasswd
mkpasswd是一種密碼生成工具,可生成隨機復雜密碼。
最小化安裝默認沒有mkpasswd命令,需安裝expect軟件包
//expect軟件包安裝
[root@bluequark ~]# yum -y install expect-5.45-14.el7_1.x86_64
常見用法
-l 指定密碼長度,默認長度為9
//不帶參數生成默認長度為9的隨機密碼
[root@bluequark ~]# mkpasswd
av‘lZ8zY4
//帶l參數生成指定長度的密碼
[root@bluequark ~]# mkpasswd -l 12
a1ivcnRXh%0m
-s 指定新生成密碼中特殊字符的最小個數,默認為1
[root@bluequark ~]# mkpasswd -s 3
?sA<04gN*
-d 指定新生成密碼中數字的最小個數,默認為2
[root@bluequark ~]# mkpasswd -d 3
W1yn&k7V5
七、su命令
通過su命令可以在用戶之間切換,root用戶向普通戶切換無需密碼,普通用戶切換到其他用戶需要密碼。
常見用法
普通用戶切換到root用戶
//普通用戶切換到root用戶,不帶"-"時,環境變量不會切換。
[hjm@bluequark ~]$ su root
Password:
[root@bluequark hjm]# pwd
/home/hjm
//普通用戶切換到root用戶,帶"-"時,環境變量會切換
[hjm@bluequark ~]$ su - root
Password:
Last login: Sat May 19 21:37:43 CST 2018 from 192.168.1.9 on pts/0
[root@bluequark ~]# pwd
/root
以指定身份運行一條命令
[hjm@bluequark ~]$ su - -c "head -n 5 /etc/passwd" root
Password:
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
若要切換到的用戶沒有家目,則使用系統的默認配置
[root@bluequark ~]# grep user6 /etc/passwd
user6:x:5012:5013::/home/user6:/bin/bash
[root@bluequark ~]# ls -ld /home/user6
ls: cannot access /home/user6: No such file or directory
[root@bluequark ~]# su - user6
su: warning: cannot change directory to /home/user6: No such file or directory
-bash-4.2$
//可手動生成用戶家目錄文件夾並拷貝/etc/skel下的默認配置文件到相應目錄,
[user6@bluequark ~]$ cp /etc/skel/* /home/user6
[root@bluequark ~]# su - user6
[user6@bluequark ~]$
八、sudo
sudo允許系統管理員讓普通用戶執行一些或全部的root命令。
sudo通過/etc/sudoers進行授權,編輯文件時最好用visudo,它會進行簡單語法檢查。
授權普通用戶使用root的部分命令
//授權hjm用戶使用root用戶的ls,cat權限
......上部略
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
hjm ALL=(ALL) /usr/bin/ls,/usr/bin/cat
......略
//授權的ls可以查看root家目錄下的文件
[hjm@bluequark ~]$ ls /root/
ls: cannot open directory /root/: Permission denied
[hjm@bluequark ~]$ sudo /usr/bin/ls /root/
We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:
#1) Respect the privacy of others.
#2) Think before you type.
#3) With great power comes great responsibility.
[sudo] password for hjm:
anaconda-ks.cfg bbbb day.jpg default.jpg demo dir2 fd1 morning.jpg named.pipe night.jpg path_demo pxe_config
[hjm@bluequark ~]$ cat /root/f1.txt
cat: /root/f1.txt: Permission denied
[hjm@bluequark ~]$ sudo /usr/bin/cat /root/f1.txt
#version=DEVEL
# System authorization information
auth --enableshadow --passalgo=sha512
visudo中用戶別名
......
User_Alias ADMINS = hjm, nico
ADMINS ALL=(ALL) /usr/bin/ls,/usr/bin/cat
......
//驗證hjm用戶可以使用root的ls命令
[root@bluequark ~]# su - hjm
Last login: Sat May 19 22:25:17 CST 2018 on pts/0
[hjm@bluequark ~]$ ls /root/
ls: cannot open directory /root/: Permission denied
[hjm@bluequark ~]$ sudo /usr/bin/ls /root/
[sudo] password for hjm:
anaconda-ks.cfg bbbb day.jpg default.jpg demo dir2 f1.txt fd1 morning.jpg named.pipe night.jpg path_demo pxe_config
//驗證nico用戶可以使用root的ls命令
[hjm@bluequark ~]$ su - nico
Password:
Last login: Sat May 19 19:32:49 CST 2018 on pts/0
Last failed login: Sat May 19 22:49:36 CST 2018 on pts/0
There were 2 failed login attempts since the last successful login.
[nico@bluequark ~]$ ls /root/
ls: cannot open directory /root/: Permission denied
[nico@bluequark ~]$ sudo /usr/bin/ls /root/
We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:
#1) Respect the privacy of others.
#2) Think before you type.
#3) With great power comes great responsibility.
[sudo] password for nico:
anaconda-ks.cfg bbbb day.jpg default.jpg demo dir2 f1.txt fd1 morning.jpg named.pipe night.jpg path_demo pxe_config
visudo中命令別名設置
......省略
Cmnd_Alias ALIAS_CMD = /usr/bin/ls, /usr/bin/cat
......省略
//NOPASSWD表示用戶無需輸入密碼
ADMINS ALL=(ALL) NOPASSWD:ALIAS_CMD
......省略
//驗證hjm用戶可以不輸入密碼直接使用/root的ls命令
[root@bluequark ~]# su - hjm
Last login: Sat May 19 22:44:43 CST 2018 on pts/0
[hjm@bluequark ~]$ ls /root/
ls: cannot open directory /root/: Permission denied
[hjm@bluequark ~]$ sudo /usr/bin/ls /root/
anaconda-ks.cfg bbbb day.jpg default.jpg demo dir2 f1.txt fd1 morning.jpg named.pipe night.jpg path_demo pxe_config
//驗證nico用戶無需輸入密碼可以直接使用/root的ls命令
[hjm@bluequark ~]$ su - nico
Password:
Last login: Sat May 19 22:49:43 CST 2018 on pts/0
[nico@bluequark ~]$ ls /root/
ls: cannot open directory /root/: Permission denied
[nico@bluequark ~]$ sudo /usr/bin/ls /root/
anaconda-ks.cfg bbbb day.jpg default.jpg demo dir2 f1.txt fd1 morning.jpg named.pipe night.jpg path_demo pxe_config
管理員組wheel
## Allows people in group wheel to run all commands
%wheel ALL=(ALL) ALL
//添加用戶到wheel組
[root@bluequark ~]# usermod -a -G wheel shelly
[root@bluequark ~]# grep shelly /etc/group
wheel:x:10:shelly
shelly:x:5012:
[root@bluequark ~]# su -shelly
su: failed to execute helly: No such file or directory
[root@bluequark ~]# su - shelly
[shelly@bluequark ~]$ ls /root
ls: cannot open directory /root: Permission denied
[shelly@bluequark ~]$ sudo /usr/bin/ls /root/
We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:
#1) Respect the privacy of others.
#2) Think before you type.
#3) With great power comes great responsibility.
[sudo] password for shelly:
anaconda-ks.cfg bbbb day.jpg default.jpg demo dir2 f1.txt fd1 morning.jpg named.pipe night.jpg path_demo pxe_config
九、限制root用戶遠程登錄
鑒於直接使用Root用戶登錄所具有的高風險性,為避免誤操作引起的事故,根據權限最小化原則,應盡量使用普通用戶遠程登錄,只有在需要root用戶權限的時候切換到root用戶身份。執行完回退至普通用戶。可采用如下方案:
//1. 通過visudo編輯/etc/sudoers文件,將需要切換到root用戶設置到同一個別名
User_Alias ADMINS = hjm, nico
//2. 允許這些用戶免密執行root用戶的/usr/bin/su命令
ADMINS ALL=(ALL) NOPASSWD:/usr/bin/su
//這樣普通用戶不用知道root密碼也可以切換到root用戶身份,執行完也可以回退至本身的帳戶
[hjm@bluequark ~]$ sudo /usr/bin/su -
Last login: Sat May 19 23:35:30 CST 2018 on pts/0
[root@bluequark ~]#
[root@bluequark ~]# exit
logout
[hjm@bluequark ~]$
//3.限制root用戶不能遠程ssh登錄
[root@bluequark ~]# sed -ni s/#PermitRootLogin\ yes/PermitRootLogin\ no/p /etc/ssh/sshd_config
[root@bluequark ~]# grep PermitRootLogin !$
grep PermitRootLogin /etc/ssh/sshd_config
PermitRootLogin no
//4.重啟sshd 服務
[root@bluequark ~]# systemctl restart sshd.service
此時再以root用戶遠程密碼登錄,服務器拒絕登錄。
此時再以普通用戶登錄,可正常登錄
Connecting to 192.168.1.211:22...
Connection established.
To escape to local shell, press ‘Ctrl+Alt+]‘.
Last login: Sat May 19 23:39:10 2018
[hjm@bluequark ~]$
//需要時可以通過sudo /usr/bin/su - 切換至root用戶身份
[hjm@bluequark ~]$ sudo /usr/bin/su -
Last login: Sat May 19 23:44:09 CST 2018 on pts/0
Last failed login: Sat May 19 23:58:44 CST 2018 from 192.168.1.9 on ssh:notty
There were 11 failed login attempts since the last successful login.
[root@bluequark ~]#
2018-05-18課堂筆記