useradd命令
useradd命令:創建新用戶或更新默認的新用戶信息
格式:useradd(選項)(參數)
參數:
-c<備注>:加上備注文字。備注文字會保存在passwd的備注欄位中;
-d<登入目錄>:指定用戶登入時的啟始目錄;
-D:變更預設值;
-e<有效期限>:指定帳號的有效期限;
-f<緩沖天數>:指定在密碼過期后多少天即關閉該帳號;
-g<群組>:指定用戶所屬的群組;
-G<群組>:指定用戶所屬的附加群組;
-m:自動建立用戶的登入目錄;
-M:不要自動建立用戶的登入目錄;
-n:取消建立以用戶名稱為名的群組;
-r:建立系統帳號;
-s<shell>:指定用戶登入后所使用的shell;
-u<uid>:指定用戶id。
注意:
uid范圍:
centos7:
0 超級管理員
1-200 系統用戶,由系統分配給系統進程使用
201-999 系統用戶,用來運行服務賬戶,不需要登陸系統(動態分配)
1000+ 普通用戶
centos6
1-499 系統用戶
500+ 普通用戶
例子:
# 新建用戶加入組:
useradd –g sales jack –G company,employees //-g:加入主要組、-G:加入次要組
# 建立一個新用戶賬戶,並設置ID:
useradd caojh -u 544
usermod命令
usermod命令:修改系統已經存在的用戶屬性。
格式:usermod(選項)(參數)
參數:
-c<備注>:修改用戶帳號的備注文字;
-d<登入目錄>:修改用戶登入時的目錄;
-e<有效期限>:修改帳號的有效期限;
-f<緩沖天數>:修改在密碼過期后多少天即關閉該帳號;
-g<群組>:修改用戶所屬的群組;
-G<群組>;修改用戶所屬的附加群組;
-l<帳號名稱>:修改用戶帳號名稱;
-L:鎖定用戶密碼,使密碼無效;
-s<shell>:修改用戶登入后所使用的shell;
-u<uid>:修改用戶ID;
-U:解除密碼鎖定。
例子:
# 將newuser2添加到組staff中:
usermod -G staff newuser2
# 修改newuser的用戶名為newuser1:
usermod -l newuser1 newuser
# 鎖定賬號newuser1:
usermod -L newuser1
# 解除對newuser1的鎖定:
usermod -U newuser1
userdel命令
userdel命令:刪除給定的用戶,以及與用戶相關的文件。若不加選項,則僅刪除用戶帳號,而不刪除相關文件。
格式:userdel [options] LOGIN
參數:
-f:強制刪除用戶,即使用戶當前已登錄;
-r:刪除用戶的同時,刪除與用戶相關的所有文件。
例子:
userdel命令很簡單,比如我們現在有個用戶linuxde,其家目錄位於/var
目錄中,現在我們來刪除這個用戶:
userdel linuxde //刪除用戶linuxde,但不刪除其家目錄及文件;
userdel -r linuxde //刪除用戶linuxde,其家目錄及文件一並刪除;
請不要輕易用-r
選項;他會刪除用戶的同時刪除用戶所有的文件和目錄,切記如果用戶目錄下有重要的文件,在刪除前請備份。
其實也有最簡單的辦法,但這種辦法有點不安全,也就是直接在/etc/passwd
中刪除您想要刪除用戶的記錄;但最好不要這樣做,/etc/passwd
是極為重要的文件,可能您一不小心會操作失誤。
groupadd命令
groupadd命令:用於創建一個新的工作組,新工作組的信息將被添加到系統文件中。
格式:groupadd [options] group
參數:
-g:指定新建工作組的id;
-r:創建系統工作組,系統工作組的組ID小於500;
-K:覆蓋配置文件“/ect/login.defs”;
-o:允許添加組ID號不唯一的工作組。
例子:
# 建立一個新組,並設置組ID加入系統:
[root@xxx ~]# groupadd -g 344 linuxde
passwd命令
passwd命令:用於設置用戶的認證信息,包括用戶密碼、密碼過期時間等。系統管理者則能用它管理系統用戶的密碼。只有管理者可以指定用戶名稱,一般用戶只能變更自己的密碼。
格式:
passwd [-k] [-l] [-u [-f]] [-d] [-e] [-n mindays] [-x maxdays] [-w
warndays] [-i inactivedays] [-S] [--stdin] [username]
參數
-d:刪除密碼,僅有系統管理者才能使用;
-f:強制執行;
-k:設置只有在密碼過期失效后,方能更新;
-l:鎖住密碼;
-s:列出密碼的相關信息,僅有系統管理者才能使用;
-u:解開已上鎖的帳號。
例子:
# root賬戶能修改密碼,普通用戶只能修改自己的密碼
[root@localhost ~]# passwd linuxde //更改或創建linuxde用戶的密碼;
Changing password for user linuxde.
New UNIX password: //請輸入新密碼;
Retype new UNIX password: //再輸入一次;
passwd: all authentication tokens updated successfully. //成功;
# 普通用戶如果想更改自己的密碼,直接運行passwd即可,比如當前操作的用戶是linuxde。
[linuxde@localhost ~]$ passwd
Changing password for user linuxde. //更改linuxde用戶的密碼;
(current) UNIX password: //請輸入當前密碼;
New UNIX password: //請輸入新密碼;
Retype new UNIX password: //確認新密碼;
passwd: all authentication tokens updated successfully. //更改成功;
# 讓某個用戶不能修改密碼,可以用`-l`選項來鎖定:
[root@localhost ~]# passwd -l linuxde //鎖定用戶linuxde不能更改密碼;
Locking password for user linuxde.
passwd: Success //鎖定成功;
[linuxde@localhost ~]# su linuxde //通過su切換到linuxde用戶;
[linuxde@localhost ~]$ passwd //linuxde來更改密碼;
Changing password for user linuxde.
Changing password for linuxde
(current) UNIX password: //輸入linuxde的當前密碼;
passwd: Authentication token manipulation error //失敗,不能更改密碼;
# -d參數清空用戶密碼
[root@localhost ~]# passwd -d linuxde //清除linuxde用戶密碼;
Removing password for user linuxde.
passwd: Success //清除成功;
[root@localhost ~]# passwd -S linuxde //查詢linuxde用戶密碼狀態;
Empty password. //空密碼,也就是沒有密碼;
chage命令
chage命令:用來修改帳號和密碼的有效期限。
參數:
-m:密碼可更改的最小天數。為零時代表任何時候都可以更改密碼。
-M:密碼保持有效的最大天數。
-w:用戶密碼到期前,提前收到警告信息的天數。
-E:帳號到期的日期。過了這天,此帳號將不可用。
-d:上一次更改的日期。
-i:停滯時期。如果一個密碼已過期這些天,那么此帳號將不可用。
-l:例出當前的設置。由非特權用戶來確定他們的密碼或帳號何時過期。
例子:
# 查看root賬戶密碼的策略
[root@xxx ~]# chage -l root
Last password change : never
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@xxx ~]# chage -l boy
Last password change : Jul 19, 2019
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@xxx ~]# chage -M 60 boy
[root@xxx ~]# chage -l boy
Last password change : Jul 19, 2019
Password expires : Sep 17, 2019
Password inactive : never
Account expires : never
Minimum number of days between password change : 0
Maximum number of days between password change : 60
Number of days of warning before password expires : 7
id命令
id命令:打印真實有效的用戶和組id
參數:
-g或--group 顯示用戶所屬群組的ID。
-G或--groups 顯示用戶所屬附加群組的ID。
-n或--name 顯示用戶,所屬群組或附加群組的名稱。
-r或--real 顯示實際ID。
-u或--user 顯示用戶ID。
-help 顯示幫助。
-version 顯示版本信息。
例子:
# 用戶組為1000
[root@xxx ~]# id -g boy
1000
# 附加組為1000
[root@xxx ~]# id -G boy
1000
# 用戶uid為1000
[root@xxx ~]# id -u boy
1000
su命令
su命令:使用替代用戶和組ID運行命令
參數:
-c<指令>或--command=<指令>:執行完指定的指令后,即恢復原來的身份;
-f或——fast:適用於csh與tsch,使shell不用去讀取啟動文件;
-l或——login:改變身份時,也同時變更工作目錄,以及HOME,SHELL,USER,logname。此外,也會變更PATH變量;
-m,-p或--preserve-environment:變更身份時,不要變更環境變量;
-s<shell>或--shell=<shell>:指定要執行的shell;
--help:顯示幫助;
--version;顯示版本信息。
例子:
# 切換后boy沒有權限訪問root的家目錄
[root@xxx ~]# su -c ls boy
ls: cannot open directory .: Permission denied
[root@xxx ~]# su -c ls root
1 2.txt mongodb-linux-x86_64-rhel70-4.0.10.tgz test2.txt
1.txt anaconda-ks.cfg pwd
1.txt.bak etc.tar.gz sent
# 切換為boy同時更換家目錄
[root@xxx ~]# su -l boy
Last login: Fri Jul 19 04:22:40 EDT 2019 on pts/0
[boy@xxx ~]$ pwd
/home/boy
visudo命令
visudo命令:編輯 / etc/sudoers 文件的專屬命令。
例子:
[root@xxx ~]# cat /etc/sudoers
## 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
sudo 命令
sudo命令:用來以其他身份來執行命令,預設的身份為root。在/etc/sudoers
中設置了可執行sudo指令的用戶。若其未經授權的用戶企圖使用sudo,則會發出警告的郵件給管理員。用戶使用sudo時,必須先輸入密碼,之后有5分鍾的有效期限,超過期限則必須重新輸入密碼。
格式:
sudo -h | -K | -k | -V
sudo -v [-AknS] [-a type] [-g group] [-h host] [-p prompt] [-u user]
sudo -l [-AknS] [-a type] [-g group] [-h host] [-p prompt] [-U user]
[-u user] [command]
sudo [-AbEHnPS] [-a type] [-C num] [-c class] [-g group] [-h host]
[-p prompt] [-r role] [-t type] [-T timeout] [-u user] [VAR=value]
[-i | -s] [command]
sudoedit [-AknS] [-a type] [-C num] [-c class] [-g group] [-h host]
[-p prompt] [-T timeout] [-u user] file ...
參數:
-b:在后台執行指令;
-h:顯示幫助;
-H:將HOME環境變量設為新身份的HOME環境變量;
-k:結束密碼的有效期限,也就是下次再執行sudo時便需要輸入密碼;。
-l:列出目前用戶可執行與無法執行的指令;
-p:改變詢問密碼的提示符號;
-s<shell>:執行指定的shell;
-u<用戶>:以指定的用戶作為新的身份。若不加上此參數,則預設以root作為新的身份;
-v:延長密碼有效期限5分鍾;
-V :顯示版本信息。
相關知識:
sudo的工作過程如下:
1,當用戶執行sudo時,系統會主動尋找/etc/sudoers文件,判斷該用戶是否有執行sudo的權限
2,確認用戶具有可執行sudo的權限后,讓用戶輸入用戶自己的密碼確認
3,若密碼輸入成功,則開始執行sudo后續的命令
4,root執行sudo時不需要輸入密碼(eudoers文件中有配置root ALL=(ALL) ALL這樣一條規則)
5,若欲切換的身份與執行者的身份相同,也不需要輸入密碼
例子:
# 開啟日志記錄功能
1.創建sudo.log文件
touch /var/log/sudo.log
2./etc/rsyslog.conf配置文件最后面添加一行
local2.debug /var/log/sudo.log #空白處不能用空格鍵,必需用tab鍵
3./etc/ sudoers配置文件最后添加如下
Defaults logfile=/var/log/sudo.log
Defaults loglinelen=0
Defaults !syslog
4.重啟syslog服務
[root@localhost .ssh]systemctl restart syslog
5.確定進程
[root@localhost .ssh]# ps -aux |grep rsyslog
6.測試
測試賬戶使用sudo命令,在root用戶查看是否有記錄
# 第一個終端記錄sudo
[root@xxx ~]# tail -f /var/log/sudo.log
Jul 19 05:12:36 : root : TTY=pts/1 ; PWD=/root ; USER=root ; COMMAND=/bin/ls
# 第二個終端使用sudo
[root@xxx ~]# sudo ls
1 2.txt mongodb-linux-x86_64-rhel70-4.0.10.tgz test2.txt
1.txt anaconda-ks.cfg pwd
1.txt.bak etc.tar.gz sent
相關文件
與用戶、組賬戶信息相關的文件
存放用戶信息:
/etc/passwd
/etc/shadow
存放組信息:
/etc/group
/etc/gshadow
用戶信息文件分析(每項用:
隔開)
例如:jack:X:503:504:::/home/jack/:/bin/bash
jack //用戶名
X //口令、密碼
503 //用戶id(0代表root、普通新建用戶從500開始)
504 //所在組
: //描述
/home/jack/ //用戶主目錄
/bin/bash //用戶缺省Shell
組信息文件分析
例如:jack:$!$:???:13801:0:99999:7:*:*:
jack //組名
$!$ //被加密的口令
13801 //創建日期與今天相隔的天數
0 //口令最短位數
99999 //用戶口令
7 //到7天時提醒
* //禁用天數
* //過期天數
可以編輯/etc/login.defs
來設定幾個參數,以后設置口令默認就按照參數設定為准:
PASS_MAX_DAYS 99999
PASS_MIN_DAYS 0
PASS_MIN_LEN 5
PASS_WARN_AGE 7
當然在/etc/default/useradd
可以找到如下2個參數進行設置:
# useradd defaults file
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes
通過修改配置文件,能對之后新建用戶起作用,而目前系統已經存在的用戶,則直接用chage來配置。