命令(15個)linux
useradd,usermod,userdel,groupadd,groupdel,groupmod,newgrp,gpaswd,chage,passwd,id,su,visudo,sudo,mkpasswdshell
8.1.useradd數據庫
功能:添加新用戶或更新新用戶信息
vim
語法: useradd 選項 用戶名
centos
經常使用參數:
安全
-u:用戶uid
bash
-g:用戶的主組
服務器
-G:附加組
網絡
-s:默認shell
app
-d:家目錄
-D:變動預設值
-c:註釋說明
-e:過時時間
-f: <緩衝天數> 指定在密碼過時後多少天即關閉該帳號。
-m:自動創建用戶的家目錄。
-M: 不要自動創建用戶的家目錄。
-n:取消創建以用戶名爲名的用戶組。
-r: 創建系統帳戶。
在知道怎麼使用這個命令前,先普及一些基礎知識:
用戶標識:UserID,UID,共65535個;
管理員(root):0
系統用戶:
centos5,6:1-499
centos 7:1-999
普通用戶:
centos5,6:500+
centos 7:1000+
用戶管理相關的文件:
/etc/passwd
/etc/shadow
/etc/group
/etc/gshadow
說明:
系統默認給一個家 /home/$username 家裏還添置了一些傢俱
指定默認shell(能不能登陸操做系統)
# cat /etc/shells
/bin/sh 早期unxi
/bin/bash 系統默認的shell(能夠登陸操做系統)
/sbin/nologin 非交互式shell(不能登陸操做系統)
/bin/dash
/bin/tcsh
/bin/csh
默認還會指定uid和gid(建立一個主組)
示例:
[root@localhost ~]# useradd -u 4294967295 user2 #不成功,報錯,證實uid數超過最大值 useradd: invalid user ID '4294967295' [root@localhost ~]# useradd -u 4294967294 user2 #成功,這個數就是就是當前版本支持的最大uid數 [root@localhost ~]# [root@localhost ~]# useradd -u 1001 -g 1001 -d /home/abc/user03 user03 useradd: group '1001' does not exist [root@localhost ~]# id user03 id: user03: No such user [root@localhost ~]# useradd -u 1001 -g 1001 -d /home/abc/user03 user03 useradd: cannot create directory /home/abc/user03 [root@localhost ~]# id user03 id: user03: No such user [root@localhost ~]# mkdir /home/abc [root@localhost ~]# useradd -u 1001 -g 1001 -d /home/abc/user03 user03 [root@localhost ~]# id user03 uid=1001(user03) gid=1001(admin) groups=1001(admin) [root@localhost ~]# su - user03 [user03@localhost ~]$ pwd /home/abc/user03 [root@localhost ~]# useradd -s /sbin/nologin -d /rhome/abc/ -c 'zidingyi' user04 useradd: warning: the home directory already exists. Not copying any file from skel directory into it. [root@localhost ~]# su - user04 This account is currently not available. [root@localhost ~]# usermod -s /bin/bash user04 [root@localhost ~]# su - user04 -bash-4.1$ pwd /rhome/abc/ -bash-4.1$ logout [root@localhost ~]# cp -a /etc/skel/. /rhome/abc/ [root@localhost ~]# su - user04
幾個小實驗:
(1)去掉/etc/passwd裏root用戶第二列的x,確認登陸系統不須要密碼,加回x,密碼不變
[root@localhost ~]# sed -i '1s/x//' /etc/passwd 說明:驗證登陸是沒有密碼了 [root@localhost ~]# sed -i '1s/root::/root:x:/' /etc/passwd #加回去 [root@localhost ~]# head -1 /etc/passwd root:x:0:0:root:/root:/bin/bash
(2)普通用戶只能本身改本身的密碼,還須要原密碼才能改,改的密碼還要必定的密碼複雜度(最少8位,字母,數字,符號最好都有就沒問題)
(3)用一個普通用戶來測試/etc/shadow裏的第四列
步驟一:第四列爲0,這個普通用戶隨時能夠修改本身的密碼
步驟二:把0改成2,這個普通用戶改密碼會報You must wait longer to change your password的錯誤
步驟三:可使用date -s "20140719"這樣的命令把當前時間改爲3天后,再去測試,發現能夠改了,驗證成功;時間改回來的例子# date -s "20140716 15:12:10"
以user04爲例 [root@localhost ~]# tail -1 /etc/shadow #第四列爲0 user04:$6$3Ujgmfgh$cbbnJKG24jTL2CjjbNngiknKJhGpbaITrakxGPxDu05aCGzCR.i/.nDUzvEB/.a4YbXw5tp4HXbkKh0eaIGf00:17339:0:99999:7::: [root@localhost ~]# tail -1 /etc/shadow #第四列改成2 user04:$6$3Ujgmfgh$cbbnJKG24jTL2CjjbNngiknKJhGpbaITrakxGPxDu05aCGzCR.i/.nDUzvEB/.a4YbXw5tp4HXbkKh0eaIGf00:17339:2:99999:7::: [user04@localhost ~]$ passwd #報錯了 Changing password for user user04. Changing password for user04. (current) UNIX password: You must wait longer to change your password passwd: Authentication token manipulation error [root@localhost ~]# date -s "20170625 11:43:40" #修改日期 Sun Jun 25 11:43:40 CST 2017 [root@localhost ~]# date Sun Jun 25 11:43:42 CST 2017 [user04@localhost ~]$ passwd Changing password for user user04. Changing password for user04. (current) UNIX password: New password: Retype new password: Sorry, passwords do not match. New password: Retype new password: passwd: all authentication tokens updated successfully. [root@localhost ~]# date -s "20170622 11:47:40" #改回日期 Thu Jun 22 11:47:40 CST 2017 [root@localhost ~]# date Thu Jun 22 11:47:42 CST 2017
(4)驗證/etc/shadow裏的第8列
步驟一:以測試user1用戶爲列,把它在shadow裏的第8列改爲16266(這至關於今天來講是昨天就過時了)
步驟二:先用su - test切換另外一個普通用戶,再用這個普通用戶來su - user1切換user1,輸入正確密碼,但報下面的錯誤
$ su - user1 Password: Your account has expired; please contact your system administrator su: incorrect password
8.2.userdel
功能說明:刪除用戶帳號。
若是一個用戶的帳號再也不使用,能夠從系統中刪除。刪除用戶帳號就是要將/etc/passwd等系統文件中的該用戶記錄刪除,必要時還刪除用戶的主目錄。刪除一個已有的用戶帳號使用userdel命令。
語法:userdel 選項 用戶名
參數:
-r 它的做用是把用戶的主目錄一塊兒刪除。
-f 刪除用戶家目錄以及目錄中全部文件。
示例
# userdel -r sam
8.3.usermod
功能說明:修改用戶信息
語法:usermod 選項 用戶名
經常使用選項:
-u:用戶uid
-g:用戶的主組
-G:附加組
-s:默認shell
-d:家目錄
-c:註釋說明
補充說明:
用戶信息相關的配置文件:
/etc/passwd 存放用戶相關信息
/etc/shadow 存放用戶密碼相關信息
$home 用戶的家目錄
man 5 passwd
/etc/passwd
account:password:UID:GID:GECOS:directory:shell
帳號:密碼:UID:GID:註釋說明:家目錄:默認的登陸shell
--vim /etc/passwd
root:x:0:0:root:/root:/bin/bash
第一列: 用戶名
第二列:密碼 老版本這裏放的就是密碼,爲了安全性考慮,密碼放到了/etc/shadow的第二列
x表明/etc/shadow的第二列生效,去掉x就表示此用戶登陸的時候沒有密碼
第三列:uid 用戶識別ID值,系統是經過這個值來確認是哪一個用戶
第四列:gid 組識別ID值
第五列:描述項 comment
第六列:家目錄
第七個:bash 當前用戶使用的bash
/bin/bash 表示此用戶使用bash,用戶能夠登陸系統,能夠收郵件,能夠登陸FTP
/sbin/nologin 表示用戶不能登陸系統,能夠收郵件,能夠登陸FTP
/bin/false 表示用戶不能登陸系統,能夠收郵件,不能登陸FTP
/etc/shadow
--vim /etc/shadow
root:$1$.1RfCu/n$ModWntxLJRC6SpgAXSDO81:14694:0:99999:7:::
與/etc/passwd相對應 (但這裏有九列)
第一列:login name 用戶名
第二列:encrypted password 密碼 (這裏以*號開頭或!開頭默認是不能登錄的)!!表明空密碼,未設置密碼
第三列:date of last password change 上一次修改密碼的時間,linux以1970年1月1日到如今的天數來算的,等於0表明下一次登陸操做系統強制修改密碼
# date --date='1970-01-01 +16896days'
Tue Apr 5 00:00:00 CST 2016
第四列:minimum password age 修改密碼後幾天內不容許再修改,若是這裏爲5,那改過密碼後5天內不能再修改 0表明不限制(只對普通用戶有效)
第五列:maximum password age 多少天內必需要求你改,30表明每隔30天更新一次密碼; 默認永遠不更新,99999表明不限制
第六列:password warning period 過時前幾天給你一個告警信息,7表明密碼過時前7天發出警告
第七列:password inactivity period,密碼過時後還給的一個寬限天數,3表明密碼過時後3天內依然能夠登陸操做系統;過了3天后賬號被封鎖。
第8列: account expiration date 這裏能夠寫一個過時天數,這裏也是以1970年1月1日到如今的天數來計算的,多用於收費系統
第九列:reserved field 保留,留着之後功能擴展
8.4.passwd
功能說明:更新用戶的身份驗證令牌
語法:passwd 選項 用戶名
補充說明:passwd指令讓用戶能夠更改本身的密碼,而系統管理者則能用它管理系統用戶的密碼。只有管理者能夠指定用戶名稱,通常用戶只能變動本身的密碼。
(1)passwd:修改當前用戶密碼;
(2)passwd username:修改其餘用戶的密碼,僅root有此權限;
參數:
-l 鎖定口令,即禁用帳號。
-u 口令解鎖。
-d 使帳號無口令。
-f 強迫用戶下次登陸時修改口令,若是默認用戶名,則修改當前用戶的口令。
-k 設置只有在密碼過時失效後,方能更新。
-s 列出密碼的相關信息。
--stdin:從標準輸入接收密碼;
echo "PASSWORD" |passwd --stdin USERNAME
以下圖:
示例:
[root@localhost ~]# passwd -d user03 #刪除用戶密碼 Removing password for user user03. passwd: Success # passwd -l sam [root@localhost ~]# passwd -l user04 #鎖定用戶 Locking password for user user04. passwd: Success
8.5.chage
功能說明:更改用戶密碼過時信息
# chage --help
Usage: chage [options] [LOGIN]
經常使用選項:
-d, --lastday 最後一次更改密碼的時間
-E, --expiredate 賬號的過時時間
-h, --help 顯示這個幫助消息和退出
-I, --inactive 寬限期 (注意這裏是大寫i)
-l, --list 查看用戶密碼信息
-m, --mindays 密碼的最小生存週期
-M, --maxdays 密碼的最大生存週期
-W, --warndays 密碼過時前幾天發出警告
示例:
[root@localhost ~]# chage -l user03 #列出用戶密碼的信息 Last password change : Jun 22, 2017 Password expires : never Password inactive : never Account expires : never Minimum number of days between password change : 0 Maximum number of days between password change : 99999 Number of days of warning before password expires : 7 root@localhost ~]# chage -d 0 user03用戶下一次登陸操做系統強制修改密碼
8.6.groupadd
功能:增長用戶組
語法:groupadd 選項 用戶組
經常使用選項:
-g:指定gid
-o:指定相同的gid, 通常與-g選項同時使用,表示新用戶組的GID能夠與系統已有用戶組的GID相同
-r:指定組管理員
groupadd --help 查看
/etc/group 組信息
組名:組密碼:組id:組成員
示例:
[root@localhost ~]# groupadd group1 [root@localhost ~]# groupadd -g 101 group2
8.7.groupdel
功能:刪除用戶組
語法:groupdel 用戶組
示例:
[root@localhost ~]# groupdel group1
8.8.groupmod
功能:修改組屬性
語法:groupmod 選項 用戶組
經常使用選項:
-g GID 爲用戶組指定新的組標識號。
-o 與-g選項同時使用,用戶組的新GID能夠與系統已有用戶組的GID相同。
-n 新用戶組 將用戶組的名字改成新名字
示例:
[root@localhost ~]# groupmod -g 102 group2 [root@localhost ~]# groupmod -g 10000 -n group3 group2
8.9.newgrp
功能:登錄到一個新組
語法:newgrp [-] [group]
示例:
[root@localhost ~]# usermod -G root user03 [root@localhost ~]# id user03 uid=1001(user03) gid=1001(admin) groups=1001(admin),0(root) [user03@localhost ~]$ newgrp root #一個用戶有多個組,就能夠用newgrp進行切換當前組
8.10.gpasswd
功能:爲組添加密碼
組密碼文件:/etc/gshadow
gpasswd 【選項】 group
經常使用參數:
-a USERNAME:把用戶添加至組中;
-d USERNAME:今後組中移除此用戶;
-r USER_NAMEG : 刪除組的密碼
# gpasswd --help
示例:
[root@localhost ~]# groupadd -g 10015 group1 [root@localhost ~]# gpasswd -a user03 group1 Adding user user03 to group group1 [root@localhost ~]# id user03 uid=1001(user03) gid=1001(admin) groups=1001(admin),0(root),10015(group1) [root@localhost ~]# gpasswd -d user03 group1 Removing user user03 from group group1 [root@localhost ~]# gpasswd -M user03,user04 group1 [root@localhost ~]# id user03 uid=1001(user03) gid=1001(admin) groups=1001(admin),0(root),10015(group1) [root@localhost ~]# id user04 uid=1002(user04) gid=1002(user04) groups=1002(user04),10015(group1)
8.11.id
功能:打印真實有效的用戶和組ID
語法格式:id [OPTION]... [USERNAME]
經常使用選項:
打印指定USERNAME或者當前的用戶和組信息
-a 忽略,爲了與其餘版本的兼容性
-Z,--context 只打印當前用戶的安全上下文
-g,--group 只打印有效的組ID
示例:
[root@localhost ~]# id -g 0 -G,--groups 打印全部的組【附加組】ID -n,--name 打印名稱而不是數字。適用於 -ugG [root@localhost ~]# id -nug user_00 id: cannot print "only" of more than one choice [root@localhost ~]# id -ng user_00 user_00 [root@localhost ~]# id -nu user_00 user_00 [root@localhost ~]# id -n user_00 id: cannot print only names or real IDs in default format -r,--real 打印真實的ID替代有效的ID。 對-ugG 而言 [root@localhost ~]# id -r id: cannot print only names or real IDs in default format [root@localhost ~]# id -ru 0 [root@localhost ~]# id -rg user_00 502 [root@localhost ~]# id -rG 0 [root@localhost ~]# id -ruG id: cannot print "only" of more than one choice -u,--user 只打印用戶有效的ID [root@localhost ~]# id -u user_00 502
8.12.su
功能:變動用戶身份(super user)
切換用戶時:
切換用戶時:
(1) 不讀取目標用戶的配置文件(非登陸式切換,半切換);
su USERNAME
(2) 讀取目標用戶的配置文件(登陸式切換,徹底切換);
su -l USERNAME
su - USERNAME
注意:root切換至任何其它用戶無須認證密碼;普通用戶切換至其它用戶,都須要密碼;
8.13.visudo
功能:編輯sudoer文件
sudo的工做過程以下:
1,當用戶執行sudo時,系統會主動尋找/etc/sudoers文件,判斷該用戶是否有執行sudo的權限
2,確認用戶具備可執行sudo的權限後,讓用戶輸入用戶本身的密碼確認
3,若密碼輸入成功,則開始執行sudo後續的命令
4,root執行sudo時不須要輸入密碼(eudoers文件中有配置root ALL=(ALL) ALL這樣一條規則)
5,若欲切換的身份與執行者的身份相同,也不須要輸入密碼
sudo的目的:爲非根用戶授予根用戶的權限;
配置文件:/etc/sudoers
visudo命令編輯修改/etc/sudoers配置文件
visudo使用vi打開/etc/sudoers文件,可是在保存退出時,visudo會檢查內部語法,避免用戶輸入錯誤信息
visudo須要root權限
[hadoop@localhost ~]$ visudo visudo:/etc/sudoers:權限不夠 visudo:/etc/sudoers:權限不夠 使用visudo命令打開sudo配置文件 ## Sudoers allows particular users to run various commands as the root user, without needing the root password. #容許特定用戶像root用戶同樣使用各類各樣的命令,而不須要root密碼 ## ## 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. 該文件必須使用"visudo"命令編輯 ## Host Aliases ## Groups of machines. You may prefer to use hostnames (perhaps using ## wildcards for entire domains) or IP addresses instead. ## 對於一組服務器,你可能會更喜歡使用主機名(多是全域名的通配符) ## 、或IP地址,這時能夠配置主機別名 # 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... ## 指定一系列相互關聯的命令(固然能夠是一個)的別名,經過賦予該別名sudo權限, ## 能夠經過sudo調用全部別名包含的命令,下面是一些示例 ## 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 ## Installation and management of software 軟件安裝管理相關命令別名 # Cmnd_Alias SOFTWARE = /bin/rpm, /usr/bin/up2date, /usr/bin/yum ## Services 服務相關命令別名 # Cmnd_Alias SERVICES = /sbin/service, /sbin/chkconfig ## Updating the locate database 本地數據庫升級命令別名 # Cmnd_Alias LOCATE = /usr/bin/updatedb ## Storage 磁盤操做相關命令別名 # Cmnd_Alias STORAGE = /sbin/fdisk, /sbin/sfdisk, /sbin/parted, /sbin/partprobe , /bin/mount, /bin/umount ## Delegating permissions 代理權限相關命令別名 # Cmnd_Alias DELEGATING = /usr/sbin/visudo, /bin/chown, /bin/chmod, /bin/chgrp ## Processes 進程相關命令別名 # Cmnd_Alias PROCESSES = /bin/nice, /bin/kill, /usr/bin/kill, /usr/bin/killall ## Drivers 驅動命令別名 # Cmnd_Alias DRIVERS = /sbin/modprobe # Defaults specification # # Disable "ssh hostname sudo <cmd>", because it will show the password in clear. # You have to run "ssh -t hostname sudo <cmd>". # 一些環境變量的相關配置,具體狀況可見man soduers Defaults requiretty Defaults env_reset Defaults env_keep = "COLORS DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR LS_COLORS" Defaults env_keep += "MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE" Defaults env_keep += "LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES" Defaults env_keep += "LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE" Defaults env_keep += "LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY" Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin ## Next comes the main part: which users can run what software on ## which machines (the sudoers file can be shared between multiple ## systems). ## 下面是規則配置:什麼用戶在哪臺服務器上能夠執行哪些命令(sudoers文件能夠在多個系統上共享) ## Syntax(語法): ## ## user MACHINE=COMMANDS 用戶 登陸的主機=(能夠變換的身份) 能夠執行的命令 ## ## The COMMANDS section may have other options added to it. ## 命令部分能夠附帶一些其它的選項 ## ## Allow root to run any commands anywhere ## 容許root用戶執行任意路徑下的任意命令 root ALL=(ALL) ALL ## Allows members of the 'sys' group to run networking, software, ## service management apps and more. ## 容許sys中戶組中的用戶使用NETWORKING等全部別名中配置的命令 # %sys ALL = NETWORKING, SOFTWARE, SERVICES, STORAGE, DELEGATING, PROCESSES, LOCATE , DRIVERS ## Allows people in group wheel to run all commands ## 容許wheel用戶組中的用戶執行全部命令 %wheel ALL=(ALL) ALL ## Same thing without a password ## 容許wheel用戶組中的用戶在不輸入該用戶的密碼的狀況下使用全部命令 # %wheel ALL=(ALL) NOPASSWD: ALL ## Allows members of the users group to mount and unmount the ## cdrom as root ## 容許users用戶組中的用戶像root用戶同樣使用mount、unmount、chrom命令 # %users ALL=/sbin/mount /mnt/cdrom, /sbin/umount /mnt/cdrom ## Allows members of the users group to shutdown this system ## 容許users用戶組中的用戶關閉localhost這臺服務器 # %users localhost=/sbin/shutdown -h now ## Read drop-in files from /etc/sudoers.d (the # here does not mean a comment) ## 讀取放置在/etc/sudoers.d/文件夾中的文件(此處的#不意味着這是一個聲明) #includedir /etc/sudoers.d 特別要注意的是別名必定要使用大寫 示例: 1)通常用戶賦權設置: [root@localhost ~]# visudo 76 root ALL=(ALL) ALL77 test ALL=(root) /usr/sbin/useradd #新增長用戶行 說明: 第一字段:root爲能使用sudo命令的用戶; 第二字段:第一個ALL爲容許使用sudo的主機,第二個括號裏的ALL爲使用sudo後以什麼身份(目的用戶身份)來執行命令; 第三字段:ALL爲以sudo命令容許執行的命令; 第四字段:test ALL=(root) /usr/sbin/useradd,表示容許test用戶從任何主機登陸,以root的身份執行/usr/sbin/useradd命令。 用戶執行命令效果: [root@server ~]# su - redhat [redhat@server ~]$ sudo /usr/sbin/useradd test #命令須要輸入完整的路徑 口令: #這裏輸入用戶redhat本身的密碼 [redhat@server ~]$ cat /etc/passwd |tail -5 xfs:x:43:43:X Font Server:/etc/X11/fs:/sbin/nologin gdm:x:42:42::/var/gdm:/sbin/nologin sabayon:x:86:86:Sabayon user:/home/sabayon:/sbin/nologin redhat:x:500:500::/home/redhat:/bin/bash test:x:501:501::/home/test:/bin/bash #新增長的用戶 2)sudo配置深刻 1)多個用戶的設置(非同一羣組用戶): 對於不一樣需求的用戶:能夠按照上面的方法依次增長多行,每行對應一個用戶。 對於相同需求的多個用戶 User_Alias UUU=user1,user2…… 定義用戶別名; [root@localhost ~]# visudo 20 # User_Alias ADMINS = jsmith, mikem #這個就是一個實例行,按照這個寫本身的 21 User_Alisa sudouser=user1,user2,user3,user4 #第一一個別名suduouser 76 root ALL=(ALL) ALL77 sudouser ALL=(root) /usr/sbin/useradd #命令行書寫格式,用戶列用別名 對於多個命令的設置: Cmnd_Alias CCC=command1,command2…… 定義命令別名; [root@localhost ~]# visudo 27 Cmnd_Alias NETWORKING = /sbin/route, /sbin/ifconfig, /bin/ping, /sbin/dh client, /usr/bin/net, /sbin/iptables, /usr/bin/rfcomm, /usr/bin/wvdial, /sbin/iwconfig, /sbin/mii-tool //多個命令定義一個命令別名; 76 root ALL=(ALL) ALL77 sudouser ALL=(root) NETWORKING //命令行書寫格式,命令列用別名 對於多主機的設置和多登錄角色的設置: 修改 Host_Alias HHH=host1,host2…… 定義主機別名; 修改後對應的命令行主機列位置也是用別名 Runas_Alias RRR=role1,role2…… 定義runas別名,指定的是「目的用戶」,即sudo 容許轉換至的用戶; 創建相關別明後,相關命令行相應的列也是用咱們定義的別名。 2)多個用戶的設置(同一羣組用戶): [root@localhost ~]# visudo 82## Allows people in group wheel to run all commands 83# %wheel ALL=(ALL) ALL //用戶列%+羣組名
8.14.sudo
功能說明:用來以其餘用戶來執行命令
經常使用選項:
-b:在後臺執行指令;
-h:顯示幫助;
-H:將HOME環境變量設爲新身份的HOME環境變量;
-k:結束密碼的有效期限,也就是下次再執行sudo時便須要輸入密碼;。
-l:列出目前用戶可執行與沒法執行的指令;
-p:改變詢問密碼的提示符號;
-s:執行指定的shell;
-u<用戶>:以指定的用戶做爲新的身份。若不加上此參數,則預設以root做爲新的身份;
-v:延長密碼有效期限5分鐘; 由於sudo在第一次執行時或是在N分鐘內沒有執行(N預設爲5)會詢問密碼。這個參數是從新作一次確認,若是超過N分鐘,也會問密碼。
-V :顯示版本信息。
8.15.mkpasswd
mkpasswd命令生成隨機複雜密碼,前提安裝expect,而後執行mkpasswd命令便可生成隨機的密碼
安裝:
[root@localhost scripts]# yum install -y expect
經常使用選項
-l # (密碼的長度定義, 默認是 9)
-d # (數字個數, 默認是 2)
-c # (小寫字符, 默認是 3)
-C # (大寫字符, 默認是 2)
-s # (特殊字符, 默認是 1)
-v (詳細。。。)
-p prog (程序設置密碼, 默認是 passwd)
示例:
建立了一個長度爲20位,包括數字個數,包含小寫字母個數,包含大寫字母個數,包含特殊符號個數。 # mkpasswd -l 20 -d 5 -c 5 -C 5 -s 5 Z}K7hp0UPJ6v@&,c5{d3
練習一:
1 )創建一個組,名字爲admin,組id爲900
groupadd admin groupmod -g 900 admin 或者 groupadd -g 900 admin
2)創建一個用戶tom,而且將admin組做爲tom用戶的附加組(創建用戶的時候完成),密碼是123
useradd -G 900(或者admin)tom echo 123 |passwd --stdin tom
3)創建一個用戶爲jack,要求在創建用戶後將jack加入到admin組裏,密碼爲123
useradd jack gpasswd -a jack admin echo 123 |passwd --stdin jack
4)給admin組設置一個密碼,爲123
gpasswd admin 測試: newgrp admin
5)把tom用戶設定爲admin組的管理員
gpasswd -A tom admin 測試: su - tom gpasswd -d user1 admin
練習二:
1)添加3個用戶,harry,natash,sarsh。要求harry,natash用戶的附加組爲admin組,sarsh用戶的默認shell爲非交互式,密碼均爲123.
方法一: useradd -G admin harry useradd -G admin natash useradd -s /sbin/nologin sarsh echo 123 |passwd --stdin harry 方法二: useradd harry usermod -G admin harry 。。。
2)修改haryy用戶的家目錄爲/home/uplooking/redhat/harry
mkdir /home/uplooking/redhat -p usermod -m -d /home/uplooking/redhat/harry harry
或者練習:
一、將/etc/passwd文件拷貝到/tmp目錄下面。在/tmp/passwd文件的第15行下添加「hello uplooking」,並複製其下5行,粘貼在文件的最下面,保存。而後全文搜索將「/bin/bash」替換成uplooking,並保存後面20行到/tmp/passwd.bak文件中,退出編輯。
二、找出/etc/下面的全部目錄並將其重定向到/tmp/etcdir文件裏
三、在/tmp/etcdir文件中追加「好好學習,每天向上」,而後把/etc/passwd文件的內容添加到/tmp/etcdir文件裏,並重命名爲newetcdir
mkdir /home/uplooking/redhat/harry usermod -d /home/uplooking/redhat/harry harry cp -a /etc/skel/. /home/uplooking/redhat/harry
說明:
usermod命令修改家目錄,家目錄的上一級目錄必須存在,家目錄自己系統會自動建立;若是不存在須要建立。
3)修改natash,sarsh用戶的主組爲uplooking,而且能夠登陸操做系統
groupadd uplooking usermod -g uplooking natash usermod -g uplooking -s /bin/bash sarsh
練習三:
一、新建一個公司uplooking,該公司有3個部門cw、rs、sc;每一個部門要求創建2個用戶,如cw01,cw02..;boss01管理公司全部部門,全部用戶的密碼均爲123456
groupadd uplooking groupadd cw groupadd rs groupadd sc useradd cw01 -g cw -G uplooking useradd boss01 -g uplooking -G cw,rs,sc echo 123456|passwd --stdin cw01 ...
二、全部用戶賬號的有效期爲3個月(90天),第一次登陸操做系統強制修改密碼,每隔15天更新一次密碼
chage -l cw01 chage -E "$(date +%Y%m%d --date='90 days')" -d 0 -M 15 cw01 或者 date +%F --date='90 days' 2016-07-04 # chage -E '2016-07-04' -d 0 -m 3 cw01
練習四:
批量添加用戶
(1)編輯一個文本用戶文件test.txt,每一列按照/etc/passwd格式書寫,注意用戶名、UID、宿主目錄都不能相同,其中密碼欄能夠空白或輸入x,內容以下:
[root@localhost scripts]# cat test.txt user001::600:100:user:/home/user001:/bin/bash user002::601:100:user:/home/user002:/bin/bash user003::602:100:user:/home/user003:/bin/bash user004::603:100:user:/home/user004:/bin/bash user005::604:100:user:/home/user005:/bin/bash user006::605:100:user:/home/user006:/bin/bash
(2)以root身份執行命令/usr/sbin/newusers,從剛建立的用戶文件user.txt中導入數據,建立用戶:
[root@localhost scripts]# newusers < test.txt [root@localhost scripts]# tail -6 /etc/passwd user001:x:600:100:user:/home/user001:/bin/bash user002:x:601:100:user:/home/user002:/bin/bash user003:x:602:100:user:/home/user003:/bin/bash user004:x:603:100:user:/home/user004:/bin/bash user005:x:604:100:user:/home/user005:/bin/bash user006:x:605:100:user:/home/user006:/bin/bash
(3)執行命令/usr/sbin/pwunconv,將/etc/shadow產生的shadow密碼解碼,而後回寫到/etc/passwd中,並將/etc/shadow的shadow密碼欄刪掉。這是爲了方便下一步的密碼轉換工做,即先取消shadow password功能。
[root@localhost scripts]# pwunconv
(4)編輯密碼文件passwd.txt
[root@localhost scripts]# cat > passwd.txt user001:d69f8c user002:29fe48 user003:e9004b user004:4471ef user005:7668c0 user006:b04f19
(5)以root身份執行命令/usr/sbin/chpasswd,建立用戶密碼,chpasswd會將通過/usr/bin/passwd命令編碼過的密碼寫入/etc/passwd的密碼欄。
[root@localhost scripts]# chpasswd < passwd.txt
(6)肯定密碼經編碼寫入/etc/passwd的密碼欄後,執行命令/usr/sbin/pwconv將密碼編碼爲shadow password,並將結果寫入/etc/shadow。
[root@localhost scripts]# pwconv [root@localhost scripts]# tail -6 /etc/passwd user001:x:600:100:user:/home/user001:/bin/bash user002:x:601:100:user:/home/user002:/bin/bash user003:x:602:100:user:/home/user003:/bin/bash user004:x:603:100:user:/home/user004:/bin/bash user005:x:604:100:user:/home/user005:/bin/bash user006:x:605:100:user:/home/user006:/bin/bash
這樣就完成了大量用戶的建立了,能夠進行驗證了