若是密碼文件若是刪除了,全部用戶就登不上去了。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
·第一個字段爲用戶名 ·第二字段以前是存放的是該帳號的密碼.早期的Unix系統口令確實存放在這裏,由於安全因素,後來就存放到了/etc/shadow中了,所·以用「x」來代替 ·第三個字段爲一個數字,表示用戶的「uid」。 ·第四個字段也是數字,表示爲組標識號,稱爲「gid」 ·第五個字段爲註釋說明,沒有實際意義。 ·第七段是用戶的shell。若是是/sbin/nologin。則不容許登錄。
[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/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:::
用法以下安全
添加用戶,默認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
[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
[root@aming1 ~]# groupadd grp1 [root@aming1 ~]# tail -n1 /etc/group grp1:x:1002:
[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之前都是爲系統來保留的。
[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 ~]#
[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 – 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)
[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 則不會。
[root@aming1 ~]# passwd 更改用戶 root 的密碼 。 新的 密碼: 從新輸入新的 密碼: passwd:全部的身份驗證令牌已經成功更新。
[root@aming1 ~]# passwd aming 更改用戶 aming 的密碼 。 新的 密碼: 從新輸入新的 密碼: passwd:全部的身份驗證令牌已經成功更新。
一鍵更改密碼:echo "密碼" | passwd --stdin 用戶名
[root@aming1 ~]# echo "123456" |passwd --stdin aming 更改用戶 aming 的密碼 。 passwd:全部的身份驗證令牌已經成功更新。
一鍵更改密碼:echo -e "密碼\n密碼" |passwd 用戶名
[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:全部的身份驗證令牌已經成功更新。
[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 解鎖用戶
用來生成密碼的小工具,默認系統沒有的,須要安裝一個包,yum install –y expect
[root@aming1 ~]# mkpasswd i48ESr(wj
[root@localhost ~]# mkpasswd -l 12 2hrWZ$jdxqj0
[root@localhost ~]# mkpasswd -l 12 -s 3 5wi8Foh=:Vo\
[root@localhost ~]# mkpasswd -l 12 -s 0 b0bfIodJzd8x
中間要加上「-」 ,若是不加切換不完全。試一下加與不加的區別。
[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 到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命令來進行臨時賦予指定用戶的權限,通常狀況下賦予root權限。這樣不須要每一個人都知道root的密碼保證了安全。
要用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
## Allow root to run any commands anywhere root ALL=(ALL) ALL
## 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 ~]$
## 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用戶進行遠程登錄,限制以後可使用sudo su - 來進行切換root用戶
# User_Alias ADMINS = jsmith, mikem User_Alias AMINGS = user1, user2, user3
## 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
修改配置文件/etc/ssh/sshd_config
在文件中找到#PermitRootLogin yes
修改成PermitRootLogin no (去掉#號)
保存配置文件後重啓服務
# systemctl restart sshd.service 重啓服務命令
sudo配置文件樣例 www.opensource.apple.com/source/sudo/sudo-16/sudo/sample.sudoers
sudo不錯的教程 http://www.jianshu.com/p/51338e41abb7
sudo -i 也能夠登陸到root嗎? http://www.apelearn.com/bbs/thread-6899-1-1.html