1. 程式人生 > 實用技巧 >二、賬戶與安全

二、賬戶與安全

賬戶與安全

Linux系統對賬號與組的管理是通過ID號來實現的,我們在登入系統時,輸入使用者對應的密碼,後臺系統會將使用者名稱轉化為ID號後再判斷該賬號是否存在,並對比密碼是否匹配。在Linux中,使用者ID號被稱為UID,組ID被稱為GID。其中UID為0,代表超級管理員,也就是通常說的root賬號,1~499之間ID號系統會預留下來。這樣我們建立的賬號會從500算起。

Linux的組有基本組與附加組之分,一個使用者只可以加入一個基本組中,但可以同時加入多個附加組。建立使用者時,系統預設會自動建立同名的組,並設定使用者加入該基本組中。

建立賬戶以及組

建立賬戶及組需要管理員許可權

1、useradd

建立新賬號 useradd 【選項】 使用者名稱稱

  • -c 設定賬號描述資訊,一般為賬號全稱
  • -d 設定賬號家HOME_DIR目錄
  • -e 設定賬戶的失效日期,格式為YYYY-MM-DD
  • -g 設定賬戶的基本組
  • -G 設定賬戶的附加組,多個附加組中間用逗號隔開
  • -M 不建立賬戶家目錄,一般與-s結合使用
  • -s設定賬戶的登入Shell,預設bash
  • -u指定賬戶UID

useradd Frank 建立普通賬戶Frank

useradd -c adminstrator -d /home/admin -e 2013-12-24 \

-g root -G bin,adm,mail admin

\ 是換行輸入命令

建立系統賬戶名稱為admin,全名為adminstrator,賬戶家目錄為/home/admin,賬戶失效日期為2013年12月24日,賬戶基本組為root,附加組為bin、adm、mail

2、groupadd

建立組賬戶 groupadd [選項] 組名稱

-g 設定組ID號

  • group tom 建立tom組
  • group -g 1000 jerry 建立GID為1000的組jerry

3、id

顯示賬戶及組資訊

id root 檢視root賬戶及相關組資訊

修改賬戶及組

1、passwd

更新賬號認證資訊 passwd [選項][賬號名稱]

  • -l 鎖定賬戶,僅root可使用此選項
  • --stdin 從檔案或管道讀取密碼
  • -u 解鎖賬戶
  • -d 快速清空賬戶密碼,僅root可使用此選項

passwd 為當前使用者設定新密碼

passwd 指定修改tom的密碼

echo "qwer0987" | passwd --stdin tom` 設定tom的密碼為`qwer0987

passwd -l tom 鎖定賬戶tom

passwd -u tom 解鎖賬戶tom

passwd -d tom 清空賬戶tom的密碼(無密碼可登陸)

2、gpasswd

設定組密碼

gpasswd admin 設定組密碼

gpasswd -A mail admin 將mail賬戶設定組admin的管理員

3、usermod

修改賬戶資訊 usermode [選項] 賬戶名稱

  • -d 修改賬戶家目錄
  • -e修改賬戶失效日期
  • -g 修改賬戶所屬基本組
  • -G 修改賬戶所屬附加組
  • -s 修改賬戶登入Shell
  • -u 修改賬戶UID

usermod -d /home/tomcat tom 修改tom的家目錄, /home/tomcat目錄必須存在

usermod -e 2013-10-01 tom 修改tom的失效日期為2013-10-01

usermode -g mail tom 修改賬戶tom的基本組為mail

usermode -s /bin/bash user2 修改user2登入Shell為bash

usermode -u 1001 tom 修改tom的UID為1001

刪除賬戶及組

1、userdel

刪除賬戶及相關檔案

-r刪除賬戶及相關檔案

userdel tom 刪除賬戶tom,但該賬戶下的檔案不刪除

userdel -r tom 刪除賬戶tom,並刪除相應的家目錄

2、groupdel

刪除組賬戶

groupdel jerry 刪除組jerry

賬戶與組檔案解析

1、etc/passwd

賬戶資訊檔案

james:x:500:500:普通使用者:/home/james:/bin/bash
1
賬戶名稱:密碼佔位符:UID:GID:賬戶的描述資訊:賬戶家目錄:賬戶登入Shell
  • /bin/bash 可登入系統Shell
  • /sbin/nologin表示賬戶無法登入系統

2、/etc/shadow

賬戶密碼檔案

賬戶名稱:密碼(如果未設定密碼,是為!!):。。。

3、/etc/group

組賬戶資訊檔案

postfix:x:89:
sshd:x:74:
tom:x:500:
123
組賬戶名稱:密碼佔位符:GID:組成員資訊(僅顯示基本成員,附加成員不顯示)

4、/etc/gshadow

組賬戶密碼檔案

root:::
bin:::bin,daemon
12
組賬戶名稱:組密碼(一般為組管理員密碼):組管理員:組成員(與/etc/group第四列相同)

檔案許可權

Linux許可權主要分為讀r|4、寫w|2、執行x|1三種許可權如:

[root@localhost ~]# ls -l
總用量 28
-rw-------. 1 root root  1139 11月 22 19:31 anaconda-ks.cfg
-rw-r--r--. 1 root root 13642 11月 22 19:31 install.log
-rw-r--r--. 1 root root  3482 11月 22 19:30 install.log.syslog
drwxr-xr-x. 2 root root  4096 12月  1 14:05 test
123456
  • 第1位檔案:-普通檔案、d代表目錄、l連結檔案、b,c裝置
  • 第2-4位 所有者許可權
  • 第5-7位 所屬組許可權
  • 第8-10位 其他賬戶許可權
  • 最後一為 .沒有新增ACL控制,+新增ACL控制
檔案許可權:連結數量或者子目錄個數:文件的所有者:文件的所屬組:大小:修改時間:文件名稱

修改文件屬性

1、chmod

修改檔案或者目錄許可權 chmod [選項] 許可權 文件

  • --reference=RFILE 根據參考文件設定許可權
  • -R 遞迴將許可權應用於所有的子目錄與子檔案

u代表所有者,g代表所屬組,o代表其他使用者,a代表所有人

chmod u=rwx,g=rwx,o=rwx install.log
chmod a=rw install.log
chmod g-x,o-wx install.log
chmod u+w install.log
chmod 700 install.log #修改檔案許可權rwx------
chmod 644 install.log #修改檔案許可權rw-r--r--
chmod 755 /home # 修改目錄許可權 rwxr-xr-x
chmod --reference=install.log.syslog install.log # 以install.log.syslog 為標準修改install.log許可權
12345678

2、chown

修改檔案或者目錄的所有者所屬組 chown [選項][所有者][:[所屬組]] 檔案或目錄

  • -R 遞迴將許可權應用於所有的子目錄與子檔案

    chown user2:mail install 修改檔案的所有者為user2,所屬組為mail

    chown :root install 僅修改檔案的所屬組為root

    chown root install 修改檔案的所屬組為root

ACL訪問控制權限

由於系統的基本許可權是針對文件所有者、所屬組或其他賬戶進行控制的,無法針對某個單獨的賬戶進行控制,所以就有ACLAccount Control List訪問控制列表概念,使用ACL,可以針對單一賬戶設定文件的訪問許可權

1、getfacl

檢視文件的ACL許可權

# 下面install.log未設定ACL訪問控制條目,僅有基本的檔案所有者、所屬組、其他賬戶的訪問控制
[root@localhost ~]# getfacl install.log
# file: install.log
# owner: root
# group: root
user::rw-
group::r--
other::r--
12345678
[root@localhost ~]# ls -l test.txt
-rw-rw-r--+ 1 root root 0 12月  2 14:00 test.txt
[root@localhost ~]# getfacl test.txt
# file: test.txt
# owner: root
# group: root
user::rw-
user:user1:rw- #新增的ACL條目,使用使用者user1對test.txt檔案可讀可寫
group::r--
group:user1:r-- # 新增ACL條目,使user1組對test.txt檔案可讀
mask::rw-
other::r--
123456789101112

2、setfacl

設定文件訪問控制列表setfacl [選項][{-m|-x} acl條目] 檔案或目錄

  • -b 刪除所有的附加的ACL條目
  • -k # 刪除預設的ACL
  • -m 新增ACL條目
  • -x 刪除指定的ACL條目
  • -R 遞迴處理所有的子目檔案或子目錄

setfacl -m u:user:rw test.txt 新增ACL條目,使用使用者user1對test.txt檔案可讀可寫

setfacl -m g:user1:r test.txt 新增ACL條目,使user1組隊test.txt檔案可讀

setfacl -x g:user1 test.txt 刪除user1組的ACL條目

setfacl -x u:user1 test.txt 刪除賬戶user1的ACL條目

setfacl -b test.txt 刪除所有附加的ACL條目

賬戶管理案例

模擬公司組織結構,EXAMPLE公司是一個從事教育培訓的組織,公司結構主要分為教研室(teach)、校長辦公室(office)、財務部(finance)、行政部(admin)、市場部(martket)。

部署檔案共享伺服器,需要為每個部門建立各自獨立的共享目錄,根據要求為所有的普通員工建立各自獨立的賬戶,這些賬戶僅要讀許可權即可,併為每個部門的負責人建立一個管理賬戶(管理員名稱為Op_部門名稱),這個賬戶可以進行讀寫操作。為了後期管理的方便需要為每個部門建立與部門名稱相同的名的組賬戶。

#建立共享目錄
[root@centos6 ~]# mkdir -p /var/{teach,office,finance,admin,market}
#建立組賬戶
[root@centos6 ~]# groupadd teach
[root@centos6 ~]# groupadd finance
[root@centos6 ~]# groupadd admin
[root@centos6 ~]# groupadd market
[root@centos6 ~]# groupadd office
#建立組管理員賬戶
[root@centos6 ~]# useradd -g teach Op_teach
[root@centos6 ~]# useradd -g office Op_office
[root@centos6 ~]# useradd -g finance Op_finance
[root@centos6 ~]# useradd -g admin Op_admin
[root@centos6 ~]# useradd -g market Op_market
#建立普通員工賬戶
[root@centos6 ~]# useradd -g teach endy009
[root@centos6 ~]# useradd -g office lucy030
[root@centos6 ~]# useradd -g finance jacob060
[root@centos6 ~]# useradd -g admin jerry160
[root@centos6 ~]# useradd -g market marry001
#新增組管理員
[root@centos6 ~]# gpasswd -A Op_teach teach
[root@centos6 ~]# gpasswd -A Op_office office
[root@centos6 ~]# gpasswd -A Op_finace finance
[root@centos6 ~]# gpasswd -A Op_finance finance
[root@centos6 ~]# gpasswd -A Op_admin admin
[root@centos6 ~]# gpasswd -A Op_market market
#給共享資料夾賦予相應的許可權控制
[root@centos6 ~]# chown Op_teach.teach /var/teach
[root@centos6 ~]# ll -a /var/teach
總用量 8
drwxr-xr-x.  2 Op_teach teach 4096 12月  2 14:27 .
drwxr-xr-x. 23 root     root  4096 12月  2 14:27 ..
[root@centos6 ~]# chown Op_office:office /var/office
[root@centos6 ~]# ll -a /var/office
總用量 8
drwxr-xr-x.  2 Op_office office 4096 12月  2 14:27 .
drwxr-xr-x. 23 root      root   4096 12月  2 14:27 ..
[root@centos6 ~]# chown Op_finance.finance /var/finance
[root@centos6 ~]# chown Op_admin.admin /var/admin
[root@centos6 ~]# chown Op_market.market /var/market

[root@centos6 ~]# chmod 755 /var/{teach,office,finance,admin,market}