6 文件系統權限(一):用戶、組


提綱


文件系統權限

3A 安全

Authentication    :  認證    --> 用戶名&密碼、指紋、人臉識別、DNA驗證
Authorization    :  授權
Accounting|Audition :  審計

權限模型

Linux 下組和用戶的特點:
    (1)Linux不支持用戶或組的嵌套,windows支持
    (2)Linux允許用戶名、組名、ID號相同

用戶分類

  • 安全上下文 Security Context:進程所能夠訪問資源的權限取決于進程的運行者的身份

  • Linux下判斷身份都是看UID號,而非名字

用戶級別 ID號 備注
管理員 0 root
普通用戶 1-65535
系統用戶 1~499(v6),1-999(v7) 對守護進程獲取資源進行權限分配(shell:/sbin/nologin;/usr/sbin/nologin)
普通用戶 500+(v6),1000+(v7) 交互式登錄
  • 對于文件和目錄而言,用戶大概分為三個級別

用戶級別 說明
1st Class 擁有者 owner
2nd Class 群組成員 group members
3rd Class 其他用戶 other users

組分類

組類型 說明
主組 用戶有且只能有一個主要組,排位第一級別
輔助組 一個用戶可以有0~n個附加組(輔助組)
私有組 組名與用戶名相同,且僅包含一個用戶
#-----------------------------------------------------------------------------
#  查看用戶組信息
#-----------------------------------------------------------------------------
[root@localhost ~]# groups alice
alice : alice g2
[root@localhost ~]# getent group alice
alice:x:502:user2
[root@localhost ~]# getent gshadow alice
alice:!::user2
[root@localhost ~]# id alice
uid=501(alice) gid=502(alice) groups=502(alice),1240(g2)

配置文件

配置文件 說明
/etc/passwd 用戶及其屬性信息(名稱、UID、主組ID等)
/etc/shadow 用戶密碼及其相關屬性
/etc/group 組及其屬性信息
/etc/gshadow 組密碼及其相關屬性

passwd 文件格式

[liang@centos7 ~]$ getent passwd root liang
root:x:0:0:root:/root:/bin/bash
liang:x:1000:1000:liang:/home/liang:/bin/bash

從左到右的含義依次是

字段 說明
name 登錄名
password 密碼(x為占位符,加密密碼在/etc/shadow)
UID

用戶ID,root的id=0,范圍:1~65535

其中,系統用戶:1-499(CentOS6),1-999(CentOS7);

    普通用戶:500+(CentOS6), 1000+ (CentOS7)

GID 用戶主組ID(系統組:V6<500, V7<1000)
GECOS 備注字段
directory 用戶家目錄
shell 用戶默認的shell
#-----------------------------------------------------------------------------
#  1) getent passwd [username...]: 查看用戶的passwd配置文件內容
#-----------------------------------------------------------------------------
[root@localhost ~]# getent passwd (= cat /etc/passwd)
[root@localhost ~]# getent passwd liang
liang:x:500:501::/home/liang:/bin/bash

#-----------------------------------------------------------------------------
#  2) chfn username : 修改用戶的GECOS備注字段內容
#-----------------------------------------------------------------------------
[root@localhost ~]# chfn liang
Changing finger information for liang.
Name []: liangchao
Office []: 110
Office Phone []: 10086
Home Phone []: 119
Finger information changed.
[root@localhost ~]# getent passwd liang
liang:x:500:501:liangchao,110,10086,119:/home/liang:/bin/bash

#-----------------------------------------------------------------------------
#  3) 修改alice的密碼
#-----------------------------------------------------------------------------
[root@localhost Packages]# echo 123456 | passwd --stdin alice
Changing password for user alice.
passwd: all authentication tokens updated successfully.

#-----------------------------------------------------------------------------
#  4) chsh -s shell username : 修改用戶默認的shell類型
#  5) su - username : 切換用戶(完全切換)
#-----------------------------------------------------------------------------
[root@localhost Packages]# getent passwd alice
alice:x:501:502::/home/alice:/bin/bash

[root@localhost Packages]# chsh -s /bin/csh alice
Changing shell for alice.Shell changed.

[root@localhost Packages]# getent passwd alice
alice:x:501:502::/home/alice:/bin/csh

[root@localhost Packages]# su - alice
[alice@localhost ~]$ echo $SHELL
/bin/csh

#-----------------------------------------------------------------------------
#  6) 將用戶的shell類型改為nologin,導致用戶無法切換,也無法登錄
#-----------------------------------------------------------------------------
[root@localhost Packages]# file /sbin/nologin
/sbin/nologin: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, stripped

[root@localhost Packages]# su - alice
This account is currently not available.

#-----------------------------------------------------------------------------
#  7) 設定是否將密碼放進shadow:pwunconv不放(password unconvert),pwconv放
#-----------------------------------------------------------------------------
[root@centos7 testdir]# pwunconv
[root@centos7 testdir]# echo 123456 | passwd --stdin liangChanging 
password for user liang.
passwd: Authentication token manipulation error 

(此時 cat /etc/shadow會報找不到文件,cat /etc/passwd發現所有用戶的密碼位均有值,不再是x)

[root@centos7 testdir]# getent passwd liang
liang:$6$XoyQiDfz$R7dcM4mGTBYejUJ8d3w/:1000:1000:liang:/home/liang:/bin/bash

[root@centos7 testdir]# pwconv
[root@centos7 testdir]# getent passwd liang
liang:x:1000:1000:liang:/home/liang:/bin/bash

shadow 文件格式

#-----------------------------------------------------------------------------
# loginName:password:last change:min change age:max useage:warning period:inactivity period:expiration date:reserve filed
#-----------------------------------------------------------------------------
[root@localhost Packages]# getent shadow alice(等同于:cat /etc/shadow )
alice:!$6$AWo3D7uD$GyqAxaEXFkIcG8XE2kPBRl82……tm0LQo7eZhUS37Fj2Pymll.:17014:0:99999:7:::

從左到右的含義依次是

字段 說明
login name 登錄名
encrypted password 加密密碼
date of last password change 從1970年1月1日起到密碼最近一次被更改的時間,天數(空即禁用)
minimum password age 密碼再過幾天可以被變更(0表示隨時可被變更)
maximum password age 密碼再過幾天必須被變更(99999表示永不過期)
password warning period 密碼過期前幾天系統提醒用戶(默認為一周)
password inactivity period 密碼過期幾天后帳號會被鎖定
account expiration date 從1970年1月1日算起,多少天后帳號失效
reserved field 預留字段

關于各個時間的先后順序,如下圖所示

image

[root@localhost Packages]# getent shadow alice(等同于:cat /etc/shadow )
alice:!$6$AWo3D7uD$GyqAxaEX……hUS37Fj2Pymll.:17014:0:99999:7:::

#-----------------------------------------------------------------------------
#  關于第二列密碼詳解:
#       1)  $6: 加密方式
#               常見的加密方式:md5($1),sha1,sha224,sha256,sha384,sha512($6)
#            *  修改加密算法:authconfig --passalgo=md5 --update
#-----------------------------------------------------------------------------
[root@localhost Packages]# authconfig --passalgo=md5 --update

[root@localhost Packages]# useradd john
[root@localhost Packages]# echo 12345 | passwd --stdin john
Changing password for user john.
passwd: all authentication tokens updated successfully.

[root@localhost Packages]# getent shadow john
john:$1$nJw0PIvZ$jJ0IklD4k9u3WYxMM4Ssr.:17014:0:99999:7:::

#-----------------------------------------------------------------------------
#       2)  $8MvEcVLBt2bVhbld$:隨機數,故即便密碼相同,加密后也不同;
#       3)  ?。河脩翩i定,不可登陸,但root可以su過去
#               * 加鎖:usermod -L username
#               * 解鎖:usermod -U username
#-----------------------------------------------------------------------------
[root@localhost Packages]# usermod -L alice
[root@localhost Packages]# getent shadow alice
alice:!$6$AWo3D7uD$GyqAxaEXFkIcG8XE2k……S37Fj2Pymll.:17014:0:99999:7:::
[root@localhost Packages]# usermod -U alice
[root@localhost Packages]# getent shadow alice
alice:$6$AWo3D7uD$GyqAxaEXFkIcG8XE2kPBR……7Fj2Pymll.:17014:0:99999:7:::

#-----------------------------------------------------------------------------
#       4)  密碼建議:數字/大小寫/特殊字符混合;足夠長;使用隨即密碼;定期更換
#-----------------------------------------------------------------------------
[root@localhost Packages]# openssl rand -base64 10 (生成隨機密碼)
S8DBJeAt4bugFg==
[root@localhost Packages]# echo "`date +%s`/86400" |bc17014
[root@localhost Packages]# echo $[`date +%s`/86400]17014

#-----------------------------------------------------------------------------
#   使用戶alice下次登錄必須修改密碼
#-----------------------------------------------------------------------------
# 方式一:
[root@localhost Packages]# chage -d 0 alice
[root@localhost Packages]# getent shadow alice
alice:$6$AWo3D7uD$GyqAx……37Fj2Pymll.:0:0:99999:7:::

# 方式二:
[root@localhost Packages]# passwd -e alice
Expiring password for user alice.
passwd: Success

[root@localhost Packages]# getent shadow alice
alice:$6$AWo3D7uD$GyqAxa……ZhUS37Fj2Pymll.:0:0:99999:7:::

group 文件格式

#-----------------------------------------------------------------------------
# groupName:passwd:GID:userList
#-----------------------------------------------------------------------------
[root@centos7 Desktop]# getent group admins
admins:x:1002:harry,sarah
字段名 說明
group_name 用戶名
password 密碼,若為空則不需密碼
GID 組ID
user_list 組成員列表

gshadow 文件格式

#-----------------------------------------------------------------------------
# 關于第二列【密碼】的詳解:
#   1) 若密碼出現非加密字符,如!或*,用戶將不能用unix密碼使用組(組成員不受限)
#   2) 組密碼用于一個非組成員想要獲取組權限(參考 newgrp命令)
#   3) ! 開頭表明密碼鎖定
#-----------------------------------------------------------------------------
[root@centos7 Desktop]# getent gshadow admins hehe
admins:!::harry,sarah
hehe:*::
header 1 header 2
group name 存在于系統中的有效組名
encrypted password 密碼
administrators 組管理員列表(權限與組成員相同,但可修改組員和組密碼)
members 成員列表

用戶、組 管理命令

useradd

  • 語法

useradd [options] LOGIN
useradd -D
useradd -D [options]
  • 參數

參數 使用說明
-b BASE_DIR 指定用戶的默認家目錄的BASE目錄; 默認參考配置文件; 若無-m,則家目錄必須存在。
-c COMMENT 描述信息,用作用戶的全名
-d HOME_DIR 指定用戶家目錄;默認在BASE_DIR下建與用戶同名的目錄作為家目錄;
-D 改變默認值(當僅用-D則使用默認值;當-D配合其他選項,則用指定值更新默認)
-e YYYY-MM-DD 設定用戶賬號的失效時間(account expiredDate);默認不失效;
-f INACTIVE_DAYS 設定當密碼過期后多少天帳號將被禁用
-g GROUP 設定主組(組存在);若未指定,則參考/etc/login.defs的USERGROUPS_ENAB的設定(yes:創建同名組;no:參考/etc/default/useradd的GROUP,或100)
-G 2nd_GROUPS… 設定附屬組
-k SKEL_DIR 設定創建家目錄后,從SKEL_DIR拷貝文件到用戶家目錄
-K KEY=VALUE 設定如下默認值(-K UID_MIN=100 -K UID_MAX=499 -K UMASK=… -K PASS_MAX_DAYS=-1)
-l 不降用戶添加到lastlog 和 faillog 數據庫。
-m 若用戶家目錄不存在則創建,并從-k指定的數據拷貝到該家目錄;家目錄的父目錄必須存在才能創建
-M 不創建家目錄,即使/etc/login.defs(CREATE_HOME=yes)也不行
-N 不創建同名組,為用戶添加組:-g 或 /etc/default/useradd(GROUP)指定的
-o 允許創建UID相同的用戶,僅當配合-u時有效
-r 創建系統賬戶(不創建家目錄,若必須指定需使用-m選項)
-s SHELL 設定用戶默認登錄shell
-u UID 設定用戶UID,必須唯一(除非使用-o)
-U 創建同名組
  • 配置文件

    /etc/default/useradd : 用戶創建的默認值

    /etc/login.defs    : 密碼相關的配置項

    /etc/skel/        : 包含默認文件的目錄

  • 示例

#-----------------------------------------------------------------------------
# 新增用戶alice:
#   1)新增完成后,查看alice的組是alice(未指定時自動創建同名組)
#   2)新增完成后,未指定家目錄的,自動創建家目錄(系統用戶不創建)
#-----------------------------------------------------------------------------
[root@localhost ~]# useradd alice
[root@localhost ~]# id alice
uid=501(alice) gid=502(alice) groups=502(alice)
[root@localhost ~]# ll /home
total 12
drwx------.  4 alice alice 4096 Aug  1 11:45 alice
drwx------. 28 liang liang 4096 Jul 20 18:04 liang

#-----------------------------------------------------------------------------
# 創建UID相同的兩個用戶:mag,mag2
#-----------------------------------------------------------------------------
[root@localhost Packages]# useradd -u 1234 mag
[root@localhost Packages]# useradd -u 1234 mag2
useradd: UID 1234 is not unique
[root@localhost Packages]# useradd -u 1234 -o mag2
[root@localhost Packages]# getent passwd mag mag2
mag:x:1234:1234::/home/mag:/bin/bash
mag2:x:1234:1235::/home/mag2:/bin/bash

#-----------------------------------------------------------------------------
# 創建用戶user2,為其添加輔助組:liang,alice,bin
#-----------------------------------------------------------------------------
[root@localhost Packages]# useradd -G liang,alice,bin user2
[root@localhost Packages]# getent passwd user2
user2:x:1236:1236::/home/user2:/bin/bash
[root@localhost Packages]# groups user2
user2 : user2 bin liang alice

#-----------------------------------------------------------------------------
# 1)創建用戶user3,為其指定家目錄:/testdir/user3home,目錄不存在
# 2)創建用戶user4,為其指定家目錄:/testdir/user4,目錄存在不重建,所需文件不復制
#-----------------------------------------------------------------------------
[root@localhost Packages]# useradd -d /testdir/user3home user3
[root@localhost Packages]# getent passwd user3
user3:x:1237:1237::/testdir/user3home:/bin/bash
[root@localhost Packages]# ll /testdirtotal 
69876
drwx------. 2 root  root     16384 Jul 20 16:54 lost+found
drwx------. 4 user3 user3     4096 Aug  1 15:51 user3home
-r--r--r--. 1 root  root    71524872 Jul 22 11:51 VMwareTools-10.0.0-2977863.tar.gz
drwxr-xr-x. 9 root  root     4096 Aug 12  2015 vmware-tools-distrib
[root@localhost Packages]# mkdir /testdir/user4
[root@localhost Packages]# useradd -d /testdir/user4 user4
useradd: warning: the home directory already exists.
Not copying any file from skel directory into it.

#-----------------------------------------------------------------------------
# 創建用戶user5,不創建默認組:因未指定組,默認設定GID=100
#-----------------------------------------------------------------------------
[root@localhost Packages]# useradd -N user5
[root@localhost Packages]# getent passwd user5
user5:x:1239:100::/home/user5:/bin/bash

#-----------------------------------------------------------------------------
# 創建系統用戶user6,設定shell為/sbin/nologin:不創建家目錄、郵箱
#-----------------------------------------------------------------------------
[root@localhost Packages]# useradd -r -s /sbin/nologin user6
[root@localhost Packages]# getent passwd user6
user6:x:496:492::/home/user6:/sbin/nologin
[root@localhost Packages]# ls /homealice  
john  liang  mage  mage2  tom  user1  user2  user5
[root@localhost Packages]# cd /var/spool/mail
[root@localhost mail]# ll
total 8
-rw-rw----. 1 liang   mail    0 Jul 20 17:15 liang
-rw-------. 1 root   mail    5376 Aug  1  09:11 root
-rw-rw----. 1 rpc   mail    0 Jul 20 16:59 rpc

#-----------------------------------------------------------------------------
# 查看系統創建用戶的默認設置:
#   (1) useradd -D == cat /etc/default/useradd
#   (2) /etc/skel
#-----------------------------------------------------------------------------
[root@localhost Packages]# useradd -DGROUP=100HOME=/home
INACTIVE=-1EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes

[root@localhost Packages]# ll -a /etc/skeltotal 
36
drwxr-xr-x.   4 root root  4096 Jul 20 17:00 .
drwxr-xr-x.   125 root root  12288 Aug  1 15:55 ..
-rw-r--r--.   1 root root   18 May 11 07:21 .bash_logout
-rw-r--r--.   1 root root   176 May 11 07:21 .bash_profile
-rw-r--r--.   1 root root   124 May 11 07:21 .bashrc
drwxr-xr-x.   2 root root  4096 Nov 12 2010  .gnome2
drwxr-xr-x.   4 root root  4096 Jul 20 16:58 .mozilla

#-----------------------------------------------------------------------------
# 修改用戶創建的默認shell:/sbin/nologin
#-----------------------------------------------------------------------------
[root@localhost mail]# useradd -D -s /sbin/nologin
[root@localhost mail]# useradd -D 
GROUP=100
HOME=/home
INACTIVE=-1EXPIRE=
SHELL=/sbin/nologin
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes

#-----------------------------------------------------------------------------
# 1、創建用戶gentoo,附加組為bin和root,默認shell為/bin/csh,注釋信息為"Gentoo Distribution"
#-----------------------------------------------------------------------------
[root@centos7 Packages]# useradd -G bin,root -s /bin/csh -c "Gentoo Distribution" gentoo
[root@centos7 Packages]# getent passwd gentoo
gentoo:x:1001:1001:Gentoo Distribution:/home/gentoo:/bin/csh
[root@centos7 Packages]# groups gentoogentoo : gentoo root bin

#-----------------------------------------------------------------------------
# 2、創建下面的用戶、組和組成員關系
#       名字為admins 的組
#       用戶natasha,使用admins 作為附屬組
#       用戶harry,也使用admins 作為附屬組
#       用戶sarah,不可交互登錄系統,且不是admins 的成員,
#       natasha,harry,sarah密碼都是centos
#-----------------------------------------------------------------------------
[root@centos7 Packages]# groupadd admins

[root@centos7 Packages]# useradd -G admins natasha
[root@centos7 Packages]# useradd -G admins harry
[root@centos7 Packages]# useradd -s /sbin/nologin sarah

[root@centos7 Packages]# echo centos | passwd --stdin sarah
Changing password for user sarah.
passwd: all authentication tokens updated successfully.
[root@centos7 Packages]# echo centos | passwd --stdin harry
Changing password for user harry.
passwd: all authentication tokens updated successfully.
[root@centos7 Packages]# echo centos | passwd --stdin natasha
Changing password for user natasha.
passwd: all authentication tokens updated successfully.

[root@centos7 Packages]# getent passwd natasha harry sarah
natasha:x:1002:1003::/home/natasha:/bin/bash
harry:x:1003:1004::/home/harry:/bin/bash
sarah:x:1004:1005::/home/sarah:/sbin/nologin

[root@centos7 Packages]# groups natasha harry sarah
natasha : natasha admins
harry : harry admins
sarah : sarah
  • 其他參考

    newusers passwd格式文件:批量創建用戶

    chpasswd :批量修改用戶口令

#-----------------------------------------------------------------------------
# 批量創建用戶:newusers filename
#-----------------------------------------------------------------------------
[root@centos7 testdir]# cat user.txt
hehe:x:2000:2000::/home/hehe:/bin/bash
hehe2:x:2000:2000::/home/hehe2:/bin/bash
hehe3:x:2000:2000::/home/hehe3:/bin/bash
hehe4:x:2000:2000::/home/hehe4:/bin/bash
hehe5:x:2000:2000::/home/hehe5:/bin/bash

[root@centos7 testdir]# newusers user.txt

#-----------------------------------------------------------------------------
# 批量設定密碼:chpasswd
#       1) cat passwdfile | chpasswd
#       2) echo mage:centos | chpasswd
#       3) echo centos | passwd --stdin mage &> /dev/null
#-----------------------------------------------------------------------------
[root@centos7 testdir]# cat passwd.txt
hehe:123456
hehe2:123456
hehe3:123456
hehe4:123456
hehe5:123456
[root@centos7 testdir]# cat passwd.txt | chpasswd
#-----------------------------------------------------------------------------
# 拷貝默認配置文件等:
#       1) cp -r /etc/skel/.[^.]*   /path/to/homedir 
#        2) cp -r `ls -A`  /path/to/homedir (這種方法要求用戶當前處在/etc/skel) 
#       3) cp -r /etc/skel/. /path/to/homedir (注意/etc/skel/.和 /etc/skel/.*的差異)
#-----------------------------------------------------------------------------
[root@centos7 testdir]# cd /etc/skel
[root@centos7 skel]# ls -a
.  ..  .bash_logout  .bash_profile  .bashrc  .mozilla
[root@centos7 skel]# ls /home
gentoo  harry  hehe  hehe2  hehe3  hehe4  hehe5  liang  natasha  sarah
[root@centos7 skel]# cp -r /etc/skel/.[^.]* /home/hehe
[root@centos7 skel]# cp -r /etc/skel/.[^.]* /home/hehe2
[root@centos7 skel]# cp -r /etc/skel/.[^.]* /home/hehe3
[root@centos7 skel]# cp -r /etc/skel/.[^.]* /home/hehe4
[root@centos7 skel]# cp -r /etc/skel/.[^.]* /home/hehe5
[root@centos7 skel]# ls -a /home/hehe3
.  ..  .bash_logout  .bash_profile  .bashrc  .mozilla

usermod

  • 語法

    usermod [OPTION] login

  • 參數

header 1 header 2
-a 新增附加組
-u UID 新UID
-g GID 新基本組
-G GROUP1[,GROUP2,…[,GROUPN]]] 新附加組,原來的附加組將會被覆蓋;若保留原有,則要同時使用-a選項,表示append;
-s SHELL 新的默認SHELL;
-c 'COMMENT' 新的注釋信息;
-d HOME 新家目錄不會自動創建,原家目錄中的文件不會同時移動至新的家目錄;若要創建新家目錄并移動原家數據,同時使用-m選項
-l login_name 新的名字;
-L lock指定用戶,在/etc/shadow 密碼欄的增加 !
-U unlock指定用戶,將 /etc/shadow 密碼欄的 ! 拿掉
-e YYYY-MM-DD 指明用戶賬號過期日期;
-f INACTIVE 設定非活動期限;
  • 示例

#-----------------------------------------------------------------------------
# 修改hehe:
#       1)設定UID=20000, 主組=liang,附加組=bin,root,shell=/bin/csh
#       2)自動創建家目錄=/testdir/hehedir,并移動其下文件
#       3)重命名username=newhehe,增加備注=hehe test
#       4)設定帳號過期時間=2017-08-01,非活動時間=10天
#-----------------------------------------------------------------------------
[root@centos7 skel]# getent passwd hehe
hehe:x:2000:2000::/home/hehe:/bin/bash
[root@centos7 skel]# usermod -u 20000 -g liang -G bin,root -s /bin/csh -d /testdir/hehedir -m -c "hehe test" -l newhehe -e 2017-08-01 -f 10 hehe
[root@centos7 skel]# getent passwd newhehe
newhehe:x:20000:1000:hehe test:/testdir/hehedir:/bin/csh
[root@centos7 skel]# getent shadow newhehe
newhehe:$6$.VWAU/eiQyR/M$vn/bC13Qyy……lLet0wV4BNzhfQ/:17014:0:99999:7:10:17379:
[root@centos7 skel]# cd /testdir/hehedir
[root@centos7 hehedir]# ls -a /testdir/hehedir
.   .bash_history  .bash_profile  .cache   .mozilla
..  .bash_logout   .bashrc        .config
[root@centos7 hehedir]# ll /testdir
total 2
-rw-r--r--. 1 root    root    64 Aug  1 16:56 passwd.txt
-rw-r--r--. 1 root    root   203 Aug  1 17:01 user.txt

#-----------------------------------------------------------------------------
# 為用戶newhehe新增附加組:bin,root
#-----------------------------------------------------------------------------
[root@centos7 hehedir]# groups newhehe
newhehe : liang ftp
[root@centos7 hehedir]# usermod -aG bin,root newhehe
[root@centos7 hehedir]# groups newhehe
newhehe : liang root bin ftp

#-----------------------------------------------------------------------------
# 清空sarah的附加組
#-----------------------------------------------------------------------------
[root@centos7 hehedir]# usermod -G "" sarah 
[root@centos7 hehedir]# usermod -G sarah sarah

userdel

  • 語法

    userdel [OPTION]… login

  • 參數

    -r: 刪除用戶家目錄;

  • 示例

[root@centos7 hehedir]# userdel -r natasha
[root@centos7 hehedir]# ls /homegentoo  
harry  hehe2  hehe3  hehe4  hehe5  liang  sarah
[root@centos7 hehedir]# ll /var/spool/mail/
total 76
-rw-rw----. 1 gentoo  mail     0 Aug  1 16:08 gentoo
-rw-rw----. 1 harry  mail     0 Aug  1 16:13 harry
-rw-rw----. 1 liang  mail     628 Jul  31 23:11 liang
-rw-------. 1 root   mail     71445 Jul  22 10:25 root
-rw-rw----. 1 rpc   mail     0 Jul  21 17:34 rpc
-rw-rw----. 1 sarah  mail     0 Aug  1 16:15 sarah

id 查看用戶相關的ID信息

  • 用法

    id [OPTION]… [USER]

  • 參數

參數 說明
-u UID
-g GID
-G Groups
-n Name
  • 示例

[root@localhost ~]# groups bin
bin : bin daemon sys
[root@localhost ~]# id bin
uid=1(bin) gid=1(bin) groups=1(bin),2(daemon),3(sys)

su 用戶切換(switch user)

  • 使用說明

    su命令使用戶可以切換用戶和組ID來執行命令。

    su不加參數默認切換至root。

    為了向后兼容,su默認不會改變用戶當前目錄,只會改變環境變量:HOME, SHELL, 如果目標用戶不是root也會改變LOGNAME 和 USER。

    強烈建議所有切換均使用 su – 以避免復雜環境的副作用。

  • 參數說明

參數 使用說明
-c command 切換用戶后執行command
-, -l, –login 近似真正登錄,會重置環境變量:HOME,SHELL,USER,LOGNAME,PATH,同時會切換到用戶家目錄
  • 配置文件

/etc/nologin  : 若要限制除管理員外的普通用戶登錄系統,則可以創建該文件(V6 & V7)
/run/nologin  : V7
[root@localhost ~]# touch /etc/nologin
[root@centos7 ~]# echo "The system is maintaining. Try again 2h later." >> /run/nologin
[root@centos7 ~]# rm -rf /etc/nologin
[root@centos7 ~]# touch /run/nologin
[root@centos7 ~]# echo "The system is maintaining. Try again 2h later." >> /run/nologin
[root@centos7 ~]# rm -rf /run/nologin
  • 示例

#-----------------------------------------------------------------------------
# 1. su username:切換后查看環境變量,PATH及當前目錄保持原用戶設定
# 2. su - username:切換后查看環境變量,PATH及當前目錄均切換至當前用戶的設定
# 3. id 、who 均顯示當前切換后的用戶信息
#-----------------------------------------------------------------------------
[root@localhost testdir]# su liang      ### su liang 不完全切換至liang用戶
[liang@localhost testdir]$ id
uid=500(liang) gid=501(liang) groups=501(liang) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[liang@localhost testdir]$ whoami
liang
[root@localhost testdir]# su - liang    ### su - liang 完全切換至liang用戶
[liang@localhost ~]$ id
uid=500(liang) gid=501(liang) groups=501(liang) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[liang@localhost ~]$ whoami
liang

#-----------------------------------------------------------------------------
# 1. su username:切換后查看環境變量,PATH及當前目錄保持原用戶設定
# 2. su - username:切換后查看環境變量,PATH及當前目錄均切換至當前用戶的設定
# 3. id 、who 均顯示當前切換后的用戶信息
#-----------------------------------------------------------------------------
[liang@localhost testdir]$ echo -e "$HOME \n$SHELL \n$USER \n$LOGNAME \n$PATH"  ### 從root 不完全切換su liang 之后查看環境變量 
/home/liang 
/bin/csh 
liang 
liang 
/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

[root@localhost testdir]# echo -e "$HOME \n$SHELL \n$USER \n$LOGNAME \n$PATH"   ### 回到 root 查看環境變量
/root 
/bin/bash 
root 
root 
/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

[liang@localhost ~]$ echo -e "$HOME \n$SHELL \n$USER \n$LOGNAME \n$PATH"      ### 從root 完全切換 su liang 后查看環境變量
/home/liang 
/bin/csh 
liang 
liang 
/usr/lib64/qt-3.3/bin:/usr/local/bin:/bin:/usr/bin

#-----------------------------------------------------------------------------
# 4. su :不完全切換,使用 w、who、finger 無法看到該登錄用戶,但查看系統進程可以發現切換后用戶發起的進程,
#-----------------------------------------------------------------------------
[liang@localhost testdir]$ w        ### 不完全切換后,w查看用戶信息
 21:00:31 up 15:17,  3 users,  load average: 0.31, 0.40, 0.38USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
root     tty1     :0               Tue16   28:32m  4.09s  4.09s /usr/bin/Xorg :0 -br -verbose -audit 4 -auth /var
root     pts/0    10.1.250.53      16:22    0.00s  0.20s  0.03s w
john     tty7     :1               Tue16   28:32m  6.49s  0.47s pam: gdm-password

[liang@localhost ~]$ w           ### 完全切換后,w查看用戶信息
 21:05:02 up 15:22,  3 users,  load average: 0.01, 0.19, 0.30USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
root     tty1     :0               Tue16   28:36m  4.09s  4.09s /usr/bin/Xorg :0 -br -verbose -audit 4 -auth /var
root     pts/0    10.1.250.53      16:22    0.00s  0.17s  0.00s w
john     tty7     :1               Tue16   28:36m  6.50s  0.47s pam: gdm-password

[liang@localhost testdir]$ who        ### 不完全切換后,who查看登錄用戶信息root     tty1         2016-08-02 16:28 (:0)
root     pts/0        2016-08-03 16:22 (10.1.250.53)
john     tty7         2016-08-02 16:36 (:1)

[liang@localhost ~]$ who          ### 完全切換后,who查看登錄用戶信息root     tty1         2016-08-02 16:28 (:0)
root     pts/0        2016-08-03 16:22 (10.1.250.53)
john     tty7         2016-08-02 16:36 (:1)

[liang@centos7 root]$ finger        ### 不完全切換后,finger查看登錄用戶信息Login     Name       Tty      Idle  Login Time   Office     Office Phone   Host
root      root      *:0             Aug  2 10:01                           (:0)
root      root       pts/0          Aug  4 09:11                           (10.1.250.53)
root      root       pts/1      42  Aug  4 09:11                           (10.1.250.53)

[liang@centos7 ~]$ finger          ### 完全切換后,finger查看登錄用戶信息Login     Name       Tty      Idle  Login Time   Office     Office Phone   Host
root      root      *:0             Aug  2 10:01                           (:0)
root      root       pts/0          Aug  4 09:11                           (10.1.250.53)
root      root       pts/1      42  Aug  4 09:11                           (10.1.250.53)


[liang@localhost testdir]$ ps aux | grep ps           ### 不完全切換后,查看系統進程root         64  0.0  0.0      0     0 ?        S    05:42   0:00 [kpsmoused]
root       2247  0.0  0.1 189124  3504 ?        Ss   05:43   0:00 cupsd -C /etc/cups/cupsd.conf
liang      7856  0.0  0.0 110248  1148 pts/0    R+   21:00   0:00 ps aux
liang      7857  0.0  0.0 103320   856 pts/0    S+   21:00   0:00 grep ps
[liang@localhost ~]$ ps aux |grep ps            ### 完全切換后,查看系統進程root         64  0.0  0.0      0     0 ?        S    05:42   0:00 [kpsmoused]
root       2247  0.0  0.1 189124  3504 ?        Ss   05:43   0:00 cupsd -C /etc/cups/cupsd.conf
liang      7907  0.0  0.0 110244  1148 pts/0    R+   21:04   0:00 ps aux
liang      7908  0.0  0.0 103320   856 pts/0    S+   21:04   0:00 grep ps

#-----------------------------------------------------------------------------
# 5. su username -c 'COMMAND' : 使用liang身份執行COMMAND
#-----------------------------------------------------------------------------
[root@centos7 ~]# su - liang -c 'echo $SHELL'/bin/bash
[root@centos7 ~]# 

#-----------------------------------------------------------------------------
# 6. 在su 命令中,單引號 與 雙引號 的差異
#-----------------------------------------------------------------------------
[root@centos7 ~]# su - liang -c 'echo $USER'
liang
[root@centos7 ~]# su - liang -c "echo $USER"
root

passwd

  • 語法說明

    passwd [-k] [-l] [-u [-f]] [-d] [-e] [-n mindays] [-x maxdays] [-w warndays] [-i inactivedays] [-S] [–stdin] [username]

  • 參數說明

參數 使用說明
-l 鎖定指定用戶
-u 解鎖指定用戶
-e 強制用戶下次登錄修改密碼(相當于 chage -d 0 username)
-n mindays 指定最短使用期限
-x maxdays 最大使用期限
-w warndays 提前多少天開始警告
-i inactivedays 非活動期限
–stdin 從標準輸入接收賬戶密碼(echo "password"

chage

設置用戶密碼過期信息
  • 語法說明

    passwd [-k] [-l] [-u [-f]] [-d] [-e] [-n mindays] [-x maxdays] [-w warndays] [-i inactivedays] [-S] [–stdin] [username]

  • 參數說明

參數 使用說明
-d LAST_DAY 設定密碼最后更改時間(0:強制用戶下次登錄必須修改密碼)
-E EXPIRE_DATE 設定用戶帳號不可用的日期(-1:去掉賬戶的expiration date)
-I INACTIVE 指定用戶密碼過期后多久帳號將被鎖定(-1:去掉賬戶的inactivity)
-l 最大使用期限
-m MIN_DAYS 設定多少天后用戶可以修改密碼(0:用戶可以隨時修改密碼)
-M MAX_DAYS 設定密碼最大有效天數(若 MAX_DAYS+LAST_DAY < CURRENT_DAY,要求用戶在使用賬戶前即更改密碼;-1 清楚驗證密碼有效時間)
-W WARN_DAYS 設定密碼過期日多少天之前提醒用戶修改
  • 示例

#-----------------------------------------------------------------------------
# /etc/shadow 格式:
# loginName:password:last change:min change age:max useage:warning period:inactivity period:expiration date:reserve filed
#-----------------------------------------------------------------------------
[root@centos7 ~]# getent shadow wangcai     ### wangcai 原始信息
wangcai:!!:0:0:99999:7:::

#-----------------------------------------------------------------------------
# 1)chage -d 'YYYY-MM-DD'|DAYS USERNAME:設定密碼最后更改時間(0:強制用戶下次登錄必須修改密碼)
#-----------------------------------------------------------------------------
[root@centos7 ~]# chage -d '2016-08-01' wangcai
[root@centos7 ~]# getent shadow wangcai
wangcai:!!:17014:0:99999:7:::               ### 從1970-01-01后17014天

#-----------------------------------------------------------------------------
# 2)chage -E 'YYYY-MM-DD'|DAYS USERNAME:設定用戶帳號不可用的日期(-1:去掉賬戶的expiration date)
#-----------------------------------------------------------------------------
[root@centos7 ~]# chage -E '2017-08-01' wangcai
[root@centos7 ~]# getent shadow wangcai
wangcai:!!:17014:0:99999:7::17379:

#-----------------------------------------------------------------------------
# 3)chage -I DAYS USERNAME:指定用戶密碼過期后多久帳號將被鎖定(-1:去掉賬戶的inactivity)
#-----------------------------------------------------------------------------
[root@centos7 ~]# chage -I 14 wangcai
[root@centos7 ~]# getent shadow wangcai
wangcai:!!:17014:0:99999:7:14:17379:

#-----------------------------------------------------------------------------
# 4)chage -l USERNAME:列示賬戶期限信息
#-----------------------------------------------------------------------------
[root@centos7 ~]# chage -l wangcai
Last password change	: Aug 01, 2016
Password expires : never
Password inactive: never
Account expires: Aug 01, 2017
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

#-----------------------------------------------------------------------------
# 4)chage -m DAYS USERNAME:設定多少天后用戶可以修改密碼(0:用戶可以隨時修改密碼)
#-----------------------------------------------------------------------------
[root@centos7 ~]# chage -m 3 wangcai
[root@centos7 ~]# getent shadow wangcai
wangcai:!!:17014:3:99999:7:14:17379:

#-----------------------------------------------------------------------------
# 5)chage -M DAYS USERNAME:設定密碼最大有效天數(若 MAX_DAYS+LAST_DAY<CURRENT_DAY,要求用戶在使用賬戶前即更改密碼;-1 清楚驗證密碼有效時間)
#-----------------------------------------------------------------------------
[root@centos7 ~]# chage -M 365 wangcai
[root@centos7 ~]# getent shadow wangcai
wangcai:!!:17014:3:365:7:14:17379:

#-----------------------------------------------------------------------------
# 6)chage -W DAYS USERNAME:設定密碼過期日多少天之前提醒用戶修改
#-----------------------------------------------------------------------------
[root@centos7 ~]# chage -W 15 wangcai
[root@centos7 ~]# getent shadow wangcai
wangcai:!!:17014:3:365:15:14:17379:

#-----------------------------------------------------------------------------
# 7)清除設定:chage -E -1 -I -1 -m 0 -M -1 wangcai
#-----------------------------------------------------------------------------
[root@centos7 ~]# chage -E -1 -I -1 -m 0 -M -1 wangcai
[root@centos7 ~]# getent shadow wangcai
wangcai:!!:17014:0::15:::
[root@centos7 ~]# chage -l wangcaiLast password change					            : Aug 01, 2016Password expires					                : neverPassword inactive					                : neverAccount expires						                : neverMinimum number of days between password change		: 0Maximum number of days between password change		: -1Number of days of warning before password expires	: 15

groupadd

  • 語法格式

    groupadd [OPTION]... group_name
  • 參數說明

參數 使用說明
-g, –gid GID 設定GID(非負整數),僅當-o配合時允許重復使用,否則唯一
-K, –key KEY=VALUE 修改/etc/login.defs的設定(如GID_MIN, GID_MAX),格式:-K GID_MIN=100 -K GID_MAX=499
-o, –non-unique 允許用戶創建一個同一ID的組
-p, –password PASSWORD 設定組密碼,改密碼為已經加密過的密碼(非明文)
-r, –system 創建系統組(范圍:/etc/login.defs[SYS_GID_MIN ~ SYS_GID_MAX])
  • 示例

#-----------------------------------------------------------------------------
# /etc/group組及其屬性信息 格式: groupName:passwd:GID:附加組userList
#-----------------------------------------------------------------------------
[root@localhost ~]# groupadd -r systestliang  ### 創建系統組
[root@localhost ~]# getent group systestliang
systestliang:x:491:
[root@localhost ~]# usermod -G systestliang tom  ### 設置用戶附加組為 systestliang
[root@localhost ~]# groupdel systestliang      ### 刪除systestliang組,不抱錯
[root@localhost ~]# usermod -g systestliang tom  ### 設定用戶主組為 systestliang
[root@localhost ~]# groupdel systestliang      ### 刪除組報錯
groupdel: cannot remove the primary group of user 'tom'

#-----------------------------------------------------------------------------
# /etc/group & /etc/gshadow 中的userList指的是將該組作為附加組的成員
#-----------------------------------------------------------------------------
[root@localhost ~]# usermod -g systestliang tom  ### 設定用戶主組為 systestliang
[root@localhost ~]# getent group systestliang           
systestliang:x:491:
[root@localhost ~]# getent gshadow systestliang
systestliang:!::
[root@localhost ~]# usermod -G systestliang john  ### 設置用戶附加組為 systestliang
[root@localhost ~]# getent gshadow systestliang
systestliang:!::john
[root@localhost ~]# getent group systestliang
systestliang:x:491:john

groupdel

  • 示例

#-----------------------------------------------------------------------------
# 刪除組時,若組為某用戶的主組則不可刪除,需清楚后再刪;若組內有附加成員,則可刪
#-----------------------------------------------------------------------------
[root@localhost ~]# usermod -G systestliang tom   ### 設置用戶附加組為 systestliang
[root@localhost ~]# groupdel systestliang       ### 刪除systestliang組,不抱錯
[root@localhost ~]# usermod -g systestliang tom   ### 設定用戶主組為 systestliang
[root@localhost ~]# groupdel systestliang       ### 刪除組報錯
groupdel: cannot remove the primary group of user 'tom'

groupmod

  • 語法格式

    groupmod [options] GROUP
  • 參數說明

參數 使用說明
-g, –gid GID 修改GID(非負整數),僅當-o配合時允許重復使用,否則唯一
-n, –new-name NEW_GROUP 修改組名
-o, –non-unique 允許修改組ID時,使用相同的GID
-p, –password PASSWORD 修改組密碼,改密碼為已經加密過的密碼(非明文)

gpasswd

  • 語法格式

    gpasswd [OPTION] GROUP
  • 參數說明

參數 使用說明
-a user 將user添加至指定組中;
-d user 從指定組中移除用戶user
-A user1,user2,… 設置有管理權限的用戶列表
  • 參考命令

    newgrp Groupname:臨時切換基本組,如果用戶不屬于該組,則需要組密碼

[alice@localhost ~]$ newgrp tomPassword: 
Invalid password.

groupmems

  • 語法格式

    groupmems [options] [action]
  • 參數說明

    options:
        -g, --group groupname   更改為指定組 (只有root)
    
    Actions:
        -a, --add username     指定用戶加入組    
        -d, --delete username   從組中刪除用戶    
        -p, --purge        從組中清除所有成員    
        -l, --list         顯示組成員列表
  • 示例

[root@localhost ~]# groupmems -l -g bin        ### 列示組用戶成員
bin  daemon  user2 
[root@localhost ~]# getent group bin            
bin:x:1:bin,daemon,user2

[root@localhost ~]# groupmems -g bin -a john    ### 向組添加成員
[root@localhost ~]# groupmems -l -g bin       ### 列示組用戶成員
bin  daemon  user2  john 
[root@localhost ~]# getent group bin
bin:x:1:bin,daemon,user2,john

groups

  • 語法格式

    groups [OPTION].[USERNAME]… 查看用戶所屬組列表

  • 示例

[root@localhost ~]# groups binbin : bin daemon sys

其他命令(chfn、chsh、finger、newgrp、vipw、vigr、pwck、grpck、strace)

  • 示例

#-----------------------------------------------------------------------------
# chfn username: 修改用戶備注
#-----------------------------------------------------------------------------
[root@centos7 ~]# chfn wangcai
Changing finger information for wangcai.
Name []: wangcai
Office []: tiantang
Office Phone []: 110
Home Phone []: 120
Finger information changed.

#-----------------------------------------------------------------------------
# chsh -s SHELL username: 修改用戶shell
#-----------------------------------------------------------------------------
[root@centos7 ~]# chsh -s /bin/csh wangcai
Changing shell for wangcai.Shell changed.

#-----------------------------------------------------------------------------
# finger username: 查看用戶信息
#-----------------------------------------------------------------------------
[root@centos7 ~]# getent passwd wangcai
wangcai:x:1001:1001:wangcai,tiantang,110,120:/home/wangcai:/bin/csh
[root@centos7 ~]# finger wangcai
Login: wangcai  
Name: wangcai
Directory: /home/wangcai 
Shell: /bin/cshOffice: tiantang, 110			
Home Phone: 120
Last login Thu Aug  4 11:06 (CST) on pts/0No mail.No Plan.
#-----------------------------------------------------------------------------
# vipw == vi /etc/passwd :若要直接修改/etc/passwd,建議使用vipw,修改后會自動檢查格式是否正確
# vigr == vi /etc/group  :若要直接修改/etc/group ,建議使用vigr,修改后會自動檢查格式是否正確
# pwck  (password check):檢查/etc/passwd文件  
# grpck (group check)  :檢查/etc/group文件
#-----------------------------------------------------------------------------
[root@localhost Packages]# pwck
user 'adm': directory '/var/adm' does not exist
user 'uucp': directory '/var/spool/uucp' does not exist
user 'gopher': directory '/var/gopher' does not exist
user 'ftp': directory '/var/ftp' does not exist
user 'avahi-autoipd': directory '/var/lib/avahi-autoipd' does not exist
user 'saslauth': directory '/var/empty/saslauth' does not exist
user 'pulse': directory '/var/run/pulse' does not exist
pwck: no changes

[root@localhost Packages]# grpck
group liang has an entry in /etc/gshadow, but its password field in /etc/group is not set to 'x'
grpck: no changes

#-----------------------------------------------------------------------------
# strace:跟蹤命令執行過程
#-----------------------------------------------------------------------------
[root@centos7 hehedir]# strace groupmems -l -g sarah

原創文章,作者:taobaibai,如若轉載,請注明出處:http://www.www58058.com/31286

(0)
taobaibaitaobaibai
上一篇 2016-08-10
下一篇 2016-08-10

相關推薦

  • parted使用說明

    一.為什么使用parted命令     傳統的MBR(Master Boot Record)分區方式,有一個局限:無法支持超過2TB的硬盤分區(單個分區超過2TB)。     GPT(GUID Partition Table)的分區表很好的解決了這個問題,但在Linux系統中,傳…

    Linux干貨 2015-04-13
  • 第三周n28

    1、列出當前系統上所有已經登錄的用戶的用戶名,注意:同一個用戶登錄多次,則只顯示一次即可。 who | cut -d ” ” -f 1 | sort -u 2、取出最后登錄到當前系統的用戶的相關信息。 who | tail -1 3、取出當前系統上被用戶當作其默認shell的最多的那個shell。 cat /etc/passwd | …

    Linux干貨 2017-12-17
  • 編譯安裝Apache

    實驗環境:CentOS 6 安裝包版本:httpd-2.2.29.tar.bz2 一、安裝前準備     (1)、獲取httpd-2.2.29.tar.bz2安裝包     (2)、準備開發工具,安裝相應的包組 yum groupinstall -y&nbsp…

    Linux干貨 2016-08-24
  • NFS實現共享wordpress

    實驗環境 192.168.68.134 wordpress站點 nfs-server 192.168.68.144 nfs-client   實驗要求 nfs server共享/var/www/html目錄 nfs clinet掛載nfs-server共享的目錄,部署wordpress   nfs server端 先部署wordpress…

    Linux干貨 2017-10-21
  • N22-?Linux系統的基礎命令

                                     Linux系統的基礎命令 命令的語法通用格式:# COMMAND OPTIONS  ARGUMENTS COMMA…

    Linux干貨 2016-08-15
  • CentOS軟RAID實現配置

     實現軟raid1、fdisk t fd //修改磁盤分區類型fd2、創建raid設備     創建一個RAID5,5塊兒硬盤4塊做RAID,1塊兒做空閑硬盤(頂替硬盤使用)    mdadm -C /dev/md0 -a yes -l 5  -n …

    Linux干貨 2016-08-30
欧美性久久久久