linux 用戶及權限

linux 用戶及權限

一、查詢用戶及權限

1. 常用命令

# 查詢當前登陸人
[root@localhost /]# whoami
root

# 查詢當前登錄人用戶組
[root@localhost /]# groups
root

# 查詢組下用戶
[root@localhost /]# groups kong
kong : kong

# 查詢登錄人的uid/gid
[root@localhost /]# id
uid=0(root) gid=0(root) 組=0(root)

# 查詢其他人的uid/gid
[root@localhost /]# id kong
uid=1008(kong) gid=1008(kong) 組=1008(kong)

# 查詢更多組信息
root@localhost /]# more -l /etc/group
root::0:custom-user
bin::1:
daemon::2:
root::0:custom-user

# 查詢更多用戶信息
[root@localhost /]# less /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

2.用戶/組信息存儲

與用戶(user)相關的配置文件;
  • /etc/passwd 注:用戶(user)的配置文件;
  • /etc/shadow 注:用戶(user)影子口令文件;
與用戶組(group)相關的配置文件;
  • /etc/group 注:用戶組(group)配置文件;
  • /etc/gshadow 注:用戶組(group)的影子文件;
說明
  • /etc/group :/etc/group 文件是用戶組的配置文件,內容包括用戶和用戶組,並且能顯示出用戶是歸屬哪個用戶組或哪幾個用戶組,因爲一個用戶可以歸屬一個或多個不同的用戶組;同一用 戶組的用戶之間具有相似的特徵。比如我們把某一用戶加入到root用戶組,那麼這個用戶就可以瀏覽root用戶家目錄的文件,如果root用戶把某個文件 的讀寫執行權限開放,root用戶組的所有用戶都可以修改此文件,如果是可執行的文件(比如腳本),root用戶組的用戶也是可以執行的;
  • 格式:group_name:passwd:GID:user_list,/etc/group 的內容包括用戶組(Group)、用戶組口令、GID及該用戶組所包含的用戶(User),每個用戶組一條記錄;

二、組管理

組數據結構
在/etc/group 中的每條記錄分四個字段:

  • 第一字段:用戶組名稱;
  • 第二字段:用戶組密碼;
  • 第三字段:GID
  • 第四字段:用戶列表,每個用戶之間用,號分割;本字段可以爲空;如果字段爲空表示用戶組爲GID的用戶名;

1. 添加用戶組

# 添加用戶組 test-group-01
groupadd test-group-01
# 查看剛纔創建的用戶組信息
tail -n 1 /etc/group

# 其他選項
用法:groupadd [選項] 組

選項:
  -f, --force        如果組已經存在則成功退出
            並且如果 GID 已經存在則取消 -g
  -g, --gid GID                 爲新組使用 GID
  -h, --help                    顯示此幫助信息並推出
  -K, --key KEY=VALUE           不使用 /etc/login.defs 中的默認值
  -o, --non-unique              允許創建有重複 GID 的組
  -p, --password PASSWORD       爲新組使用此加密過的密碼
  -r, --system                  創建一個系統賬戶
  -R, --root CHROOT_DIR         chroot 到的目錄

2. 刪除用戶組

# 刪除用戶組 test-group-01
groupdel test-group-01

# 其他選項
用法:groupdel [選項] 組

選項:
  -h, --help                    顯示此幫助信息並推出
  -R, --root CHROOT_DIR         chroot 到的目錄

3. 修改用戶組信息

# 修改用戶組名稱
groupmod -n test-group-02 test-group-01
# 查看修改信息
tail -n 1 /etc/group
# 修改用戶組的GID
groupmod -g 1002 test-group-02

# 其他選項
用法:groupmod [選項] 組

選項:
  -g, --gid GID                 將組 ID 改爲 GID
  -h, --help                    顯示此幫助信息並推出
  -n, --new-name NEW_GROUP      改名爲 NEW_GROUP
  -o, --non-unique              允許使用重複的 GID
  -p, --password PASSWORD    將密碼更改爲(加密過的) PASSWORD
  -R, --root CHROOT_DIR         chroot 到的目錄

4. 通過/etc/group和/etc/gshadow 的文件內容來同步或創建/etc/gshadow ,如果/etc/gshadow 不存在則創建;

grpck grpconv

5. 通過/etc/group 和/etc/gshadow 文件內容來同步或創建/etc/group ,然後刪除gshadow文件

grpunconv

三、用戶管理

用戶數據結構
在/etc/passwd 中的每條記錄分七個字段:

  • 第一字段:用戶名稱
  • 第二字段:用戶密碼
  • 第三字段:UID
  • 第四字段:GID
  • 第五字段:登入目錄
  • 第六字段:home目錄
  • 第七字段:使用的shell執行器。

用戶的角色區分

    用戶在系統中是分角色的,在Linux 系統中,由於角色不同,權限和所完成的任務也不同;值得注意的是用戶的角色是通過UID和識別的,特別是UID;在系統管理中,系統管理員一定要堅守UID 唯一的特性;
  • root 用戶:系統唯一,是真實的,可以登錄系統,可以操作系統任何文件和命令,擁有最高權限;
  • 虛擬用戶:這類用戶也被稱之爲僞用戶或假用戶,與真實用戶區分開來,這類用戶不具有登錄系統的能力,但卻是系統運行不可缺少的用戶,比如bin、daemon、adm、ftp、mail等;這類用戶都系統自身擁有的,而非後來添加的,當然我們也可以添加虛擬用戶;
  • 普通真實用戶:這類用戶能登錄系統,但只能操作自己家目錄的內容;權限有限;這類用戶都是系統管理員自行添加的;

1. 添加用戶

adduser: 會自動爲創建的用戶指定主目錄、系統shell版本,會在創建時輸入用戶密碼。
useradd:需要使用參數選項指定上述基本設置,如果不使用任何參數,則創建的用戶無密碼、無主目錄、沒有指定shell版本。
# 添加用戶 ,會同事創建用戶組 useradd 或 adduser
useradd test-user-01
# 添加用戶,指定用戶組
useradd -g test-group-02 test-user-03 或 useradd -g 1002 test-user-04
# 添加用戶,不創建用戶主目錄
useradd -M test-user-05
# 添加用戶,創建一個系統賬戶
useradd -r test-user-06
# 添加用戶,爲用戶設置密碼
passwd custom-user

# 其他選項
用法:useradd [選項] 登錄
      useradd -D
      useradd -D [選項]

選項:
  -b, --base-dir BASE_DIR    新賬戶的主目錄的基目錄
  -c, --comment COMMENT         新賬戶的 GECOS 字段
  -d, --home-dir HOME_DIR       新賬戶的主目錄
  -D, --defaults        顯示或更改默認的 useradd 配置
  -e, --expiredate EXPIRE_DATE  新賬戶的過期日期
  -f, --inactive INACTIVE       新賬戶的密碼不活動期
  -g, --gid GROUP        新賬戶主組的名稱或 ID
  -G, --groups GROUPS    新賬戶的附加組列表
  -h, --help                    顯示此幫助信息並推出
  -k, --skel SKEL_DIR    使用此目錄作爲骨架目錄
  -K, --key KEY=VALUE           不使用 /etc/login.defs 中的默認值
  -l, --no-log-init    不要將此用戶添加到最近登錄和登錄失敗數據庫
  -m, --create-home    創建用戶的主目錄
  -M, --no-create-home        不創建用戶的主目錄
  -N, --no-user-group    不創建同名的組
  -o, --non-unique        允許使用重複的 UID 創建用戶
  -p, --password PASSWORD        加密後的新賬戶密碼
  -r, --system                  創建一個系統賬戶
  -R, --root CHROOT_DIR         chroot 到的目錄
  -s, --shell SHELL        新賬戶的登錄 shell
  -u, --uid UID            新賬戶的用戶 ID
  -U, --user-group        創建與用戶同名的組
  -Z, --selinux-user SEUSER        爲 SELinux 用戶映射使用指定 SEUSER

2. 刪除用戶

# 刪除用戶 test-user-05
userdel test-user-05

#其他選項
用法:userdel [選項] 登錄

選項:
  -f, --force                   force some actions that would fail otherwise
                                e.g. removal of user still logged in
                                or files, even if not owned by the user
  -h, --help                    顯示此幫助信息並推出
  -r, --remove                  刪除主目錄和郵件池
  -R, --root CHROOT_DIR         chroot 到的目錄
  -Z, --selinux-user            爲用戶刪除所有的 SELinux 用戶映射

3. 修改用戶

# 修改用戶 將test-user-04修改成test-user-05,但是沒有修改信箱
usermod -l test-user-05 test-user-04
# 將用戶custom-user附加組root
usermod -G root custom-user
# 重新登錄查看custom-user分組
groups
#結果:custom-group root
# 鎖定用戶
usermod -L custom-user
# 解鎖用戶
usermod -U custom-user


#其他選項
用法:usermod [選項] 登錄

選項:
  -c, --comment 註釋            GECOS 字段的新值
  -d, --home HOME_DIR           用戶的新主目錄
  -e, --expiredate EXPIRE_DATE  設定帳戶過期的日期爲 EXPIRE_DATE
  -f, --inactive INACTIVE       過期 INACTIVE 天數後,設定密碼爲失效狀態
  -g, --gid GROUP               強制使用 GROUP 爲新主組
  -G, --groups GROUPS           新的附加組列表 GROUPS
  -a, --append GROUP            將用戶追加至上邊 -G 中提到的附加組中,                                                   並不從其它組中刪除此用戶
  -h, --help                    顯示此幫助信息並推出
  -l, --login LOGIN             新的登錄名稱
  -L, --lock                    鎖定用戶帳號
  -m, --move-home               將家目錄內容移至新位置 (僅於 -d 一起使用)
  -o, --non-unique              允許使用重複的(非唯一的) UID
  -p, --password PASSWORD       將加密過的密碼 (PASSWORD) 設爲新密碼
  -R, --root CHROOT_DIR         chroot 到的目錄
  -s, --shell SHELL             該用戶帳號的新登錄 shell
  -u, --uid UID                 用戶帳號的新 UID
  -U, --unlock                  解鎖用戶帳號
  -Z, --selinux-user  SEUSER       用戶賬戶的新 SELinux 用戶映射

四、權限管理

權限數據結構

權限名稱 符號 權限值
read r 4
write w 2
execute x 1
每種身份(owner/group/others)各自的三個權限(r/w/x)分數是需要累加的,例如當權限爲:
  1. owner = rwx = 4+2+1 = 7
  2. group = rwx = 4+2+1 = 7
  3. others= --- = 0+0+0 = 0

符號對應關係表

命令 身份 設置 權限 文件夾/文件
chmod u(user) + (加入) r (read) file
g(group) - (除去) w (wirte)
o(other) = (設置) x (execute)
a(all)

1. 查詢權限

ls -l 輸出

[權限屬性信息] [連接數] [擁有者] [擁有者所屬用戶組] [大小] [最後修改時間] [文件名]

權限屬性列表爲10個字符

  • 第一個字符表示文件類型,

    • d爲目錄
    • -爲普通文件
    • l爲連接
    • b爲可存儲的接口設備
    • c爲鍵盤鼠標等輸入設備
2、3、4個字符表示所有者權限,5、6、7個字符表示所有者同組用戶權限,8、9、10爲其他用戶權限**
  • 第二個字符表示所有者讀權限,如果有權限則爲r,沒有權限則爲-
  • 第三個字符表示所有者寫權限,如果有權限則爲w,沒有權限則爲-
  • 第四個字符表示所有者執行權限,如果有權限則爲x,沒有權限則爲-
  • 第五個字符表示所有者同組用戶讀權限,如果有權限則爲r,沒有權限則爲-
  • 第六個字符表示所有者同組用戶寫權限,如果有權限則爲w,沒有權限則爲-
  • 第七個字符表示所有者同組用戶執行權限,如果有權限則爲x,沒有權限則爲-
  • 第八個字符表示其他非同組讀權限,如果有權限則爲r,沒有權限則爲-
  • 第九個字符表示其他非同組寫權限,如果有權限則爲w,沒有權限則爲-
  • 第十個字符表示其他非同組執行權限,如果有權限則爲x,沒有權限則爲-
[root@localhost kong]# ls -l
總用量 4
-rw-rw-r-- 1 kong kong 13 3月   7 20:59 readme

2. 查看可用的shell命令,及修改

# 查看命令
chsh -l
# 指定登錄的 shell,可以通過tail -l /etc/passwd 查看變更結果,如下圖
chsh -s /bin/sh

# 其他選項
用法:
 chsh [選項] [用戶名]

選項:
 -s, --shell <shell>  指定登錄 shell
 -l, --list-shells    打印 shell 列表並退出

 -u, --help     顯示此幫助並退出
 -v, --version  輸出版本信息並退出

linux-shell-01
linux-shell-02

3. 查看自己或者默認的UID/GID信息

# 查看自己的uid和gid
id
# 查看test-user-03的uid和gid
id test-user-03

#其他選項
Usage: id [OPTION]... [USER]
Print user and group information for the specified USER,
or (when USER omitted) for the current user.

  -a             ignore, for compatibility with other versions
  -Z, --context  print only the security context of the current user
  -g, --group    print only the effective group ID
  -G, --groups   print all group IDs
  -n, --name     print a name instead of a number, for -ugG
  -r, --real     print the real ID instead of the effective ID, with -ugG
  -u, --user     print only the effective user ID
  -z, --zero     delimit entries with NUL characters, not whitespace;
                   not permitted in default format
      --help        顯示此幫助信息並退出
      --version        顯示版本信息並退出

如果不附帶任何選項,程序會顯示一些可供識別用戶身份的有用信息。

4. 修改文件所屬組命令

# 修改文件組信息
chgrp custom-group 1.txt

# 其他選項
用法:chgrp [選項]... 用戶組 文件...
 或:chgrp [選項]... --reference=參考文件 文件...
Change the group of each FILE to GROUP.
With --reference, change the group of each FILE to that of RFILE.

  -c, --changes          like verbose but report only when a change is made
  -f, --silent, --quiet  suppress most error messages
  -v, --verbose          output a diagnostic for every file processed
      --dereference      affect the referent of each symbolic link (this is
                         the default), rather than the symbolic link itself
  -h, --no-dereference   affect symbolic links instead of any referenced file
                         (useful only on systems that can change the
                         ownership of a symlink)
      --no-preserve-root  do not treat '/' specially (the default)
      --preserve-root    fail to operate recursively on '/'
      --reference=RFILE  use RFILE's group rather than specifying a
                         GROUP value
  -R, --recursive        operate on files and directories recursively

The following options modify how a hierarchy is traversed when the -R
option is also specified.  If more than one is specified, only the final
one takes effect.

  -H                     if a command line argument is a symbolic link
                         to a directory, traverse it
  -L                     traverse every symbolic link to a directory
                         encountered
  -P                     do not traverse any symbolic links (default)

      --help        顯示此幫助信息並退出
      --version        顯示版本信息並退出

示例:
  chgrp staff /u            將 /u 的屬組更改爲"staff"。
  chgrp -hR staff /u    將 /u 及其子目錄下所有文件的屬組更改爲"staff"。

5. 修改文件所屬者和組的命令

# 修改文件的所屬者
chown custom-user 1.txt
# 修改文件所屬者及組
chown -R root:root 1.txt

# 其他選項
-R recursive 遞歸的意思

6. 修改文件訪問權限命令

# 使用符號或數字來表述權限

# 給文件執行權限
chmod u+x 3.sh
# 給文件所有權限
chmod 777 2.txt

# 使用符號設置權限
chmod u=rw-,g=rw-,o=--- 2.txt
# 單獨設置 user的execute權限
chmod u+x 2.txt
# 單獨設置 other的read權限
chmod o+r 2.txt
# 單獨去除 other的read權限
chmod o-r 2.txt
# 設置所有身份的read權限
chmod a+r 2.txt
# 刪除所有身份的write權限
chmod a-w 2.txt

# 其他選項
用法:chmod [選項]... 模式[,模式]... 文件...
 或:chmod [選項]... 八進制模式 文件...
 或:chmod [選項]... --reference=參考文件 文件...
Change the mode of each FILE to MODE.
With --reference, change the mode of each FILE to that of RFILE.

  -c, --changes          like verbose but report only when a change is made
  -f, --silent, --quiet  suppress most error messages
  -v, --verbose          output a diagnostic for every file processed
      --no-preserve-root  do not treat '/' specially (the default)
      --preserve-root    fail to operate recursively on '/'
      --reference=RFILE  use RFILE's mode instead of MODE values
  -R, --recursive        change files and directories recursively
      --help        顯示此幫助信息並退出
      --version        顯示版本信息並退出

Each MODE is of the form '[ugoa]*([-+=]([rwxXst]*|[ugo]))+|[-+=][0-7]+'.
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章