用戶用戶組,與密碼管理,su,sudo命令,限制root遠程登錄

用戶配置文件和密碼文件

  • cat /etc/passwd 用戶核心的配置文件

若是密碼文件若是刪除了,全部用戶就登不上去了。html

[root@aming1 ~]# 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
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-bus-proxy:x:999:997:systemd Bus Proxy:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:998:996:User for polkitd:/:/sbin/nologin
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
chrony:x:997:995::/var/lib/chrony:/sbin/nologin
aming:x:1000:1000::/home/aming:/bin/bash
aming2:x:1001:1001::/home/aming2:/bin/bash
  • /etc/passwd 用「 : 」分爲7段,每一個字段都有具體的含義
·第一個字段爲用戶名
·第二字段以前是存放的是該帳號的密碼.早期的Unix系統口令確實存放在這裏,由於安全因素,後來就存放到了/etc/shadow中了,所·以用「x」來代替
·第三個字段爲一個數字,表示用戶的「uid」。
·第四個字段也是數字,表示爲組標識號,稱爲「gid」
·第五個字段爲註釋說明,沒有實際意義。
·第七段是用戶的shell。若是是/sbin/nologin。則不容許登錄。
  • etc/shadow 密碼配置文件
[root@aming1 ~]# cat /etc/shadow
root:$6$TPvL1jnqi26yNubi$CnNodDe5nuT4WHIybkUvhS0.lSBNJUvYTov8VtEztJ0LKjo9cvAE2yFSzhzqom6bttBzgdC/9s7l8LDPmGjSD1::0:99999:7:::
bin:*:17110:0:99999:7:::
daemon:*:17110:0:99999:7:::
adm:*:17110:0:99999:7:::
lp:*:17110:0:99999:7:::
sync:*:17110:0:99999:7:::
shutdown:*:17110:0:99999:7:::
halt:*:17110:0:99999:7:::
mail:*:17110:0:99999:7:::
operator:*:17110:0:99999:7:::
games:*:17110:0:99999:7:::
ftp:*:17110:0:99999:7:::
nobody:*:17110:0:99999:7:::
systemd-bus-proxy:!!:17607::::::
systemd-network:!!:17607::::::
dbus:!!:17607::::::
polkitd:!!:17607::::::
tss:!!:17607::::::
postfix:!!:17607::::::
sshd:!!:17607::::::
chrony:!!:17607::::::
aming:!!:17666:0:99999:7:::
aming2:!!:17666:0:99999:7:::
  • /etc/shadow 分爲9個字段。
·第一段爲用戶名,與/etc/passwd 對應
·第二個字段爲用戶密碼。是加密的。使用SHA-512加密方式加密的密碼。沒法反編譯,即便相同的密碼加密字符也會不一樣。若是!!表明密碼爲空是不能登錄的,若是是*則表明該用戶是鎖定的。
·第三個字段是上次更改密碼的日期。這個數字以1970年1月1日和上次更改密碼的日期計算而來。單位是「天」。
·第四段是要過多少天才能夠更改密碼。默認是0,就不受限制。
·第五段爲密碼多少天后到期。
·第六段爲密碼到期前多少天來進行提醒。
·第七段爲帳號失效期限,好比設置爲3,若是密碼到期,再過3天,這個帳號會被鎖定而失效。
·第8段爲生命週期,也是從1970年1月1日開始算的,若是過時帳號則做廢。
·第九段是保留段,沒有實際意義。

在這裏第二段的加密字符即便密碼相同加密字符也是不同的,採用的是SHA-512加密方式。shell

aming:$6$MesREyTp$J/IgN6.oT7uBJ292J.LLGC1dMQkN7ckgq0Olz/zDchzs6rQdWSee2o0fiJt8wPIHCNX4bNTOrsQsqsCTqhSPm.:17670:0:99999:7:::
aming2:$6$l.NeS.LF$EQGwaMvyhvJnAz0eoAbUDXsTwEwbHvAOlqjFHCTWOUykSf0mzC6j0HwEFzUpvcSOZM6R2.jvN8qTsupdC2ho4.:17670:0:99999:7:::

用戶管理

用法以下安全

useradd 增長用戶

  • -u:自定義UID
  • -g:自定義用戶組
  • -d: 自定義用戶家目錄
  • -M:表示不創建家目錄
  • -s :表示自定義shell

添加用戶,默認uid是從1000開始的。bash

[root@aming1 ~]# useradd aming3
[root@aming1 ~]# tail -n3 /etc/passwd
aming:x:1000:1000::/home/aming:/bin/bash
aming2:x:1001:1001::/home/aming2:/bin/bash
aming3:x:1002:1002::/home/aming3:/bin/bash
[root@aming1 ~]#

-u 與 -g 自定義UID與用戶組app

[root@aming1 ~]# tail -3 /etc/group
aming:x:1000:
aming2:x:1001:
aming3:x:1002:
[root@aming1 ~]# useradd -u 1111 -g aming linyu1
[root@aming1 ~]# tail -n2 /etc/passwd
aming3:x:1002:1002::/home/aming3:/bin/bash
linyu1:x:1111:1000::/home/linyu1:/bin/bash

用 -d -s 自定義家目錄與shelldom

[root@aming1 ~]# useradd -u 1113 -g aming -d /home/linyu111 -s /sbin/nologin  linyu3
[root@aming1 ~]# tail -n2 /etc/passwd
linyu2:x:1112:1000::/home/aming:/sbin/nologin
linyu3:x:1113:1000::/home/linyu111:/sbin/nologin

-M:表示不創建家目錄(並非該用戶沒有家目錄,只是沒有建立)ssh

[root@aming1 ~]# useradd -M user1
[root@aming1 ~]# tail -n1 /etc/passwd
user1:x:1114:1114::/home/user1:/bin/bash
[root@aming1 ~]# ls /home/
aming  aming2  aming3  linyu1  linyu111

用戶的家目錄是能夠更改的。可vi編輯etc/passwd 直接更改,ide

家目錄是能夠手動建立的。可是新建用戶的家目錄光有空文件夾不行,裏面還要有bash ,否則會顯示不正常。,在ls -la /etc/skel/ 有用戶配置文件的模板,這裏有模板,cp到新建的家目錄裏就能夠了。而後賦予該目錄有該用戶與組的權限!工具

[root@aming1 ~]# ls -la /etc/skel/ 
總用量 24
drwxr-xr-x.  2 root root   62 3月  17 18:59 .
drwxr-xr-x. 77 root root 8192 5月  19 15:02 ..
-rw-r--r--.  1 root root   18 8月   3 2016 .bash_logout
-rw-r--r--.  1 root root  193 8月   3 2016 .bash_profile
-rw-r--r--.  1 root root  231 8月   3 2016 .bashrc
cp /etc/skel/.bash* /home/user

userdel 刪除用戶的命令。

[root@aming1 ~]# userdel linyu3
[root@aming1 ~]# tail -n3 /etc/passwd
linyu1:x:1111:1000::/home/linyu1:/bin/bash
linyu2:x:1112:1000::/home/aming:/sbin/nologin
user1:x:1114:1114::/home/user1:/bin/bash
[root@aming1 ~]# ls /home/
aming  aming2  aming3  linyu1  linyu111

能夠看到刪除用戶後,用戶的家目錄並無被刪除。(留給管理員,肯定這個家目錄沒有用了以後在手動刪掉。)post

  • userdel -r 選項能夠連同用戶家目錄同時刪除。

用戶組管理

  • groupadd 增長組命令
[root@aming1 ~]# groupadd grp1
[root@aming1 ~]# tail -n1 /etc/group
grp1:x:1002:
  • 用-g自定義新建用戶組的gid 。groupadd -g 1006 group4
[root@localhost ~]# groupadd -g 1006 group4
[root@localhost ~]# tail -n5 /etc/group
chrony:x:995:
grp1:x:1000:
grp2:x:1001:
grp3:x:1002:
group4:x:1006:

通常新建的組或者用戶都是從1000 gid/uid開始的。1000之前都是爲系統來保留的。

  • 用戶組管理文件 (還有用戶組的密碼文件在etc/gshadow)
[root@aming1 ~]# cat /etc/group
root:x:0:
bin:x:1:
daemon:x:2:
sys:x:3:
adm:x:4:
games:x:20:
tape:x:30:
video:x:39:
ftp:x:50:
lock:x:54:
audio:x:63:

utempter:x:35:
ssh_keys:x:999:
input:x:998:
systemd-journal:x:190:
systemd-bus-proxy:x:997:
systemd-network:x:192:
dbus:x:81:
polkitd:x:996:
tss:x:59:
dip:x:40:
postdrop:x:90:
postfix:x:89:
sshd:x:74:
chrony:x:995:
aming:x:1000:
aming2:x:1001:
[root@aming1 ~]#
  • groupdel 刪除組命令
[root@aming1 ~]# groupdel grp1
[root@aming1 ~]# tail -n2 /etc/gro
groff/  group   group-  
[root@aming1 ~]# tail -n2 /etc/group
aming:x:1000:
aming2:x:1001:

不能直接刪除有用戶的組。須要先刪除用戶,在刪除用戶組。

  • 系統自動備份用戶,用戶組管理及密碼文件
[root@localhost ~]# ls /etc/passwd
/etc/passwd
[root@localhost ~]# ls /etc/passwd
passwd   passwd-  
[root@localhost ~]# ls /etc/shadow
shadow   shadow-  
[root@localhost ~]# ls /etc/shadow
shadow   shadow-  
[root@localhost ~]# ls /etc/gs
gshadow   gshadow-  gss/

後面帶「-」號的文件就是系統自動備份的文件。

若是誤刪了配置文件能夠copy一份帶「-」號的進行恢復。

不過備份文件可能稍有偏差,好比剛剛創建的用戶尚未備份。恢復的時候就沒有哪些沒來得及備份的用戶。


usermod 更改用戶屬性的命令

如下是用法:

  • usermod – u 111 username 更改uid

  • usermod -g 1010 username 更改 gid

  • usermod –d /home/safasfa username 更改家目錄

  • usermod -s /sbin/nologin username 更改shell

  • usermod –G 添加擴展組

  • 每一個用戶能夠經過 id username命令來查看一個用戶的uid,gid,組,擴展組的。

[root@aming1 ~]# id aming2
uid=1001(aming2) gid=1001(aming2) 組=1001(aming2)
  • usermod –G 添加擴展組
[root@aming1 ~]# usermod -G aming aming2 
[root@aming1 ~]# id aming2
uid=1001(aming2) gid=1001(aming2) 組=1001(aming2),1000(aming)

增長多個擴展組,

[root@aming1 ~]# usermod -G aming,grp1  aming2 
[root@aming1 ~]# id aming2
uid=1001(aming2) gid=1001(aming2) 組=1001(aming2),1000(aming),1115(grp1)

若是不像上面那樣添加,直接-G添加就會把以前的擴展組替換掉。用 -g 則不會。


用戶密碼管理

passwd 更改用戶密碼

  • 更改root密碼直接輸入 passwd
[root@aming1 ~]# passwd
更改用戶 root 的密碼 。
新的 密碼:
從新輸入新的 密碼:
passwd:全部的身份驗證令牌已經成功更新。
  • 更改用戶密碼須要passwd 加上用戶名字(passwd 由於有set_uid 因此可讓普通用戶更改本身密碼的權限)
[root@aming1 ~]# passwd aming
更改用戶 aming 的密碼 。
新的 密碼:
從新輸入新的 密碼:
passwd:全部的身份驗證令牌已經成功更新。
  • 一鍵更改密碼命令(這種用法一般在寫腳本的時候會用的到)

一鍵更改密碼:echo "密碼" | passwd --stdin 用戶名

[root@aming1 ~]# echo "123456" |passwd --stdin aming
更改用戶 aming 的密碼 。
passwd:全部的身份驗證令牌已經成功更新。

一鍵更改密碼:echo -e "密碼\n密碼" |passwd 用戶名

  • echo -e 對轉義字符的輸出不同,好比echo "\n"會直接輸出\n,而echo -e "\n"會輸出一個換行。
[root@aming1 ~]# echo  "123456\n123456"
123456\n123456
[root@aming1 ~]# echo -e "123456\n123456"
123456
123456
[root@aming1 ~]# echo -e "123456\t123456"
123456	123456
[root@aming1 ~]# echo -e "123456\n123456"
123456
123456
[root@aming1 ~]# echo -e "123456\n123456" |passwd aming
更改用戶 aming 的密碼 。
新的 密碼:無效的密碼: 密碼少於 8 個字符
從新輸入新的 密碼:passwd:全部的身份驗證令牌已經成功更新。

鎖定帳戶 passwd -l 帳戶

[root@aming1 ~]# passwd -l aming
鎖定用戶 aming 的密碼 。
passwd: 操做成功
[root@aming1 ~]# passwd -u aming
解鎖用戶 aming 的密碼。
passwd: 操做成功

passwd -l aming 鎖定aming用戶

passwd –u aming 解鎖aming用戶

usermod –L aming 也是鎖定用戶

usermod –U aming 解鎖用戶


mkpasswd 生成密碼的小工具

用來生成密碼的小工具,默認系統沒有的,須要安裝一個包,yum install –y expect

  • 默認生成9位的高強度的字符串。
[root@aming1 ~]# mkpasswd
i48ESr(wj
  • 生成12位字符 mkpasswd -l 12
[root@localhost ~]# mkpasswd -l 12
2hrWZ$jdxqj0
  • 生成3個特殊字符mkpasswd -l 12 –s 3
[root@localhost ~]# mkpasswd -l 12 -s 3
5wi8Foh=:Vo\
  • 生成0個特殊字符 mkpasswd -l 12 –s 0
[root@localhost ~]# mkpasswd -l 12 -s 0
b0bfIodJzd8x

su 切換用戶命令

  • 用法:su - username

中間要加上「-」 ,若是不加切換不完全。試一下加與不加的區別。

[root@localhost ~]# pwd
/root
[root@localhost ~]# su user1
[user1@localhost root]$ pwd
/root
[user1@localhost root]$ su - user1
密碼:
上一次登陸:四 8月 17 09:24:20 CST 2017pts/0 上
[user1@localhost ~]$ pwd
/home/user1

who 命令查看當前登錄用戶。

[root@aming1 ~]# who 
root     pts/0        2018-05-20 14:50 (192.168.159.1)
  • 用 su - -c "命令" username 能夠指定用戶來運行一條命令而不須要登錄該用戶。

好比用su - -c 到aming3用戶下建立一個aming.112文件。

[root@localhost ~]# su - -c "touch /tmp/aming.112" user3
[root@localhost ~]# ls -lt /tmp/ |head
總用量 4
-rw-r--r--. 1 user3 grp1   0 8月  17 09:28 aming.112
drwx------. 3 root  root  17 8月  17 09:17 systemd-private-962282525abe4fc2ab6e64178898e746-vmtoolsd.service-QxhA0G
drwx------. 3 root  root  17 8月  16 09:41 systemd-private-b722b0a8816847f48d10110cb8143b36-vmtoolsd.service-i4Qxrz
drwx------. 3 root  root  17 8月  15 19:02 systemd-private-120e72494534457f832c658a3c0fe839-vmtoolsd.service-TjInFD
drwx------. 3 root  root  17 8月  15 00:18 systemd-private-2a54bfd43862496f9954bc45a0ed32f5-vmtoolsd.service-dGG7hc
drwx------. 3 root  root  17 8月  15 00:04 systemd-private-782e234483844c55bea315a060f5d536-vmtoolsd.service-xP7CVe
-rwx------. 1 root  root 836 8月  15 00:03 ks-script-qSyJ_w
-rw-------. 1 root  root   0 8月  14 23:56 yum.log
[root@localhost ~]# date
2017年 08月 17日 星期四 09:29:26 CST
[root@localhost ~]# id user3
uid=1005(user3) gid=1000(grp1) 組=1000(grp1)

sudo 臨時賦予指定用戶的權限,而不用輸入該用戶的密碼。

爲了更加安全,能夠用sudo命令來進行臨時賦予指定用戶的權限,通常狀況下賦予root權限。這樣不須要每一個人都知道root的密碼保證了安全。

  • 先看看sudo的配置文件visudo 命令查看

要用visudo命令來進行查看,這樣能夠檢測到有沒有語法錯誤,此文件是很是重要的,若是用vi 改錯了, 也不會有提示。這樣比較危險和麻煩。

[root@localhost ~]# visudo

## Sudoers allows particular users to run various commands as
## the root user, without needing the root password.
##
## Examples are provided at the bottom of the file for collections
## of related commands, which can then be delegated out to particular
## users or groups.
##
## This file must be edited with the 'visudo' command.

## Host Aliases
## Groups of machines. You may prefer to use hostnames (perhaps using
## wildcards for entire domains) or IP addresses instead.
# Host_Alias     FILESERVERS = fs1, fs2
# Host_Alias     MAILSERVERS = smtp, smtp2

## User Aliases
## These aren't often necessary, as you can use regular groups
## (ie, from files, LDAP, NIS, etc) in this file - just use %groupname
## rather than USERALIAS
# User_Alias ADMINS = jsmith, mikem


## Command Aliases
## These are groups of related commands...

## Networking
# Cmnd_Alias NETWORKING = /sbin/route, /sbin/ifconfig, /bin/ping, /sbin/dhclient, /usr/bin/net, /sbin/iptables, /usr/bin/rfcomm, /usr/bin/wvdial, /sbin/iwconfig, /sbin/mii-tool

"/etc/sudoers.tmp" 111L, 3907C

這個配置文件裏最重要的配置在這條:容許root用戶在任何地方運行全部命令

## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL
  • 若是讓user1用戶也在全部地方運行某些命令,須要在下面加上一行。
## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL
user1   ALL=(ALL)       ls,mv,cat  **或者寫ALL表明能夠運行全部目錄**
**:wq**保存後有報錯

visudo:>>> /etc/sudoers:syntax error 在行 92 附近<<<
如今作什麼?
選項有:
  從新編輯 sudoers 文件(e)
  退出,不保存對 sudoers 文件的更改(x)
  退出並將更改保存到 sudoers 文件(危險!)(Q)

------------------------------------**這個就是visudo命令的好處,提示92行有語法錯誤。按「e」從新編輯**

------------------------------------**輸入:set nu來查看行數**

     88 ## The COMMANDS section may have other options added to it.
     89 ##
     90 ## Allow root to run any commands anywhere
     91 root    ALL=(ALL)       ALL    
     92 user1   ALL=(ALL)       ls,mv,cat
     93 ## Allows members of the 'sys' group to run networking, software,

------------------------------------**正確的語法以下**
     90 ## Allow root to run any commands anywhere
     91 root    ALL=(ALL)       ALL     (root    ALL=(ALL)  ALL的意思是限制在哪裏登錄。all就是沒有限制,也能夠寫成IP 訪問部門多的時候用IP段來限制登錄 ,     )
     92 user1   ALL=(ALL)       /usr/bin/ls, /usr/bin/mv, /usr/bin/cat  (這個位置要加絕對路徑)
     93 ## Allows members of the 'sys' group to run networking, software,
  • 普通ls命令是查看不了root目錄的,更改完配置文件,用sudo就能夠了。第一次須要輸入用戶的密碼。

[user1@localhost ~]$ ls /root/
ls: 沒法打開目錄/root/: 權限不夠
[user1@localhost ~]$ sudo 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 user1: 
anaconda-ks.cfg
[user1@localhost ~]$

若是想用sudo 第一次不輸入密碼,須要在visudo裏配置「NOPASSWD:」

## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL
user1   ALL=(ALL)       /usr/bin/ls, /usr/bin/mv, /usr/bin/cat
user2   ALL=(ALL)       NOPASSWD: /usr/bin/ls, /usr/bin/mv, /usr/bin/cat

已經不用輸入密碼了

[root@localhost ~]# su - user2
[user2@localhost ~]$ ls /root/
ls: 沒法打開目錄/root/: 權限不夠

[user2@localhost ~]$ sudo ls /root/
anaconda-ks.cfg
[user2@localhost ~]$

增長命令別名 Cmnd_Alias AMING_CMD = /usr/bin/ls, /usr/bin/mv, /usr/bin/cat

  • 模仿系統寫一個命令別名。
## Networking
# Cmnd_Alias NETWORKING = /sbin/route, /sbin/ifconfig, /bin/ping, /sbin/dhclient, /usr/bin/net, /sbin/iptables, /usr/bin/rfcomm, /usr/bin/wvdial, /sbin/iwconfig, /sbin/mii-tool

Cmnd_Alias AMING_CMD = /usr/bin/ls, /usr/bin/mv, /usr/bin/cat

寫好後那麼AMING_CMD這個命令就表明了,ls,mv,cat,這三條命令。

而後能夠把如下內容

## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL
user1   ALL=(ALL)       /usr/bin/ls, /usr/bin/mv, /usr/bin/cat

換成

## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL
user1   ALL=(ALL)       AMING_CMD

這樣增長也是能夠的。


限制root遠程登錄

若是公司每一個人用root密碼來進行遠程登錄,這樣就很是危險的。若是密碼泄露,其餘人就能夠遠程登錄到root下。

因此要限制root用戶進行遠程登錄,限制以後可使用sudo su - 來進行切換root用戶

  • 首先在visudo裏面設置用戶組別名,把用戶都加入進去
# User_Alias ADMINS = jsmith, mikem
User_Alias AMINGS = user1, user2, user3
  • 而後設置輸入sudo su -命令不用輸入密碼。而且設置該用戶可使用su命令。
## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL
AMINGS  ALL=(ALL)       NOPASSWD: /usr/bin/su
  • 測試下結果,沒問題
[root@localhost ~]# su - user1
上一次登陸:四 8月 17 10:34:39 CST 2017pts/0 上
[user1@localhost ~]$ sudo su -
上一次登陸:四 8月 17 10:36:13 CST 2017pts/0 上
[root@localhost ~]# whoami
root

設置完成後,開始禁用root遠程登錄

修改配置文件/etc/ssh/sshd_config

在文件中找到#PermitRootLogin yes

修改成PermitRootLogin no (去掉#號)

輸入圖片說明

保存配置文件後重啓服務

# systemctl restart sshd.service    重啓服務命令

雖然這樣作很是方便,可是爲了安全和追責要有跳板機監控記錄每一個用戶的操做。

擴展學習

相關文章
相關標籤/搜索