【linux相識相知】用戶及許可權管理

来源:http://www.cnblogs.com/liubinsh/archive/2017/07/10/7148274.html
-Advertisement-
Play Games

linux系統是多用戶(Multi-users)和多任務(Multi-tasks)的,這樣的目的是為了一臺linux主機可以給很多用戶提供服務同時運行多種服務,但是我們是怎麼區分每個用戶呢?作為一個管理員我對linux系統許可權有哪些?作為一個普通的用戶又可以對linux系統有哪些操作呢?這裡就牽扯到 ...


linux系統是多用戶(Multi-users)和多任務(Multi-tasks)的,這樣的目的是為了一臺linux主機可以給很多用戶提供服務同時運行多種服務,但是我們是怎麼區分每個用戶呢?作為一個管理員我對linux系統許可權有哪些?作為一個普通的用戶又可以對linux系統有哪些操作呢?這裡就牽扯到了linux的用戶類別和許可權管理。本次博客就用戶和許可權管理作出詳細的解釋。

用戶和組類型

在linux系統中,有著用戶和組著兩個概念,用戶是被包含在組裡面的。

用戶可以分為以下2中類別:

管理員:也就是我們常說的root

普通用戶:分為系統用戶(為了能夠讓有些後臺進程或服務類進程以非管理員的身份運行,通常需要為此創建多個普通用戶,這類用戶從不用登錄系統)和登錄用戶

作為合法居民都應該有自己的ID號,在linux中,用戶也有自己的用戶標識的UID,是由16bits的二進位數字來標識的,所以取值範圍為0-65535.不同類型的用戶取值範圍如下:
管理員:0

普通用戶:

    系統用戶:1-499(centos6),1-999(centos7)

    登錄用戶:500-60000(centos6),1000-60000(centos7)

組按不同的分類可以分為以下3中類型的組:

1.按管理員組合普通用戶組

管理員組:對系統有著管理許可權的組

普通用戶組:和普通用戶對應也有著系統組和登錄組

組也有著自己的GID,不同組的取值範圍如下(和用戶取值範圍相同)

管理員組:0 普通用戶組:     系統用戶組:1-499(CentOS6), 1-999(CentOS7)     登錄用戶組:500-60000(CentOS6), 1000-60000(CentOS7)

 

2.按基本組和附加組

基本組:用戶在創建的時候,都會預設創建一個與其名字相同的基本組

附加組:一個用戶可以屬於一個基本組後,也可以添加其他的組中,這個其他組就稱為這個用戶的附加組

 

3.按用戶數目

私有組:組名通用戶名,且只包含一個用戶

公用組:組內包含著多個用戶

 

下麵我們來說一下系統是怎麼識別這個用戶是合法用戶的,用戶在登錄的時候,必須要鍵入用戶名和密碼,系統會把用戶提供密碼與系統中配置文件中的密碼對比(當然這裡不是簡簡單單的明文對比),如果相同則允許登入,否則不允許。管理員在定義用戶密碼的時候後最好要遵循以下定義標準(雖然linux允許用戶設置弱類型密碼):

1.使用隨機的密碼

2.最短長度不要低於8位

3.應該使用大寫字母、小寫字母、數字和標點符號四類字元中至少三類

4.定期更換

我們都知道,定義的密碼都是明文的,那麼保存在配置文件中是以明文的嗎?那肯定不是的,密碼一般都會被演算法加密,在centos中有以下加密演算法,密碼被加密成的bit位也不一樣,越長說明安全性越高,加密等級為(1-6),在加密前還會添加上一段隨機數進行加密,centos預設以sha512加密:

1    md5:128bits 2    sha:160bits 3    sha224:224bits 4    sha256:256bits 5    sha384:384bits 6    sha512:512bits

可以使用命令對一段明文加密:

[root@localhost ~]# echo "Frank" | sha512sum 
d373aa36ac1061fab63c4a8ee098102476de1ff1bdff11be3629c54ccb14a35d27f658a4745a61ec183fbbd1077561a5bfcba5ead0fa4b32e2e63492e8fed3ea  -

 

用戶和組的相關配置文件

/etc/passwd

我們先看一下這個文件:

[root@localhost ~]# cat /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
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
......(省略)
tcpdump:x:72:72::/:/sbin/nologin
claire:x:1001:1001::/home/claire:/bin/bash

會看到一行從左到右被冒號分割成了7個部分,下麵就這七個部分作出解釋,我們以最後一行為例:

1.claire,也就是用戶名啦

2.x,密碼占位符,密碼不是沒有保存在這個文件下,後面會講

3.1001,UID,也就是用戶ID

4.1001,GID,也就是組ID

5.空的,這裡一般是註釋信息,可能是用戶的全稱

6./home/claire,用戶的家目錄

7./bin/bash,用戶登錄的預設shell

我們可以看到前面為UID為0的為管理員root,那些UID小於等於999的,如bin為1,是系統用戶,他的預設shell為/nologin,也就是不允許登錄的。

 

/etc/shadow

我們先來看一下這個文件:

[root@localhost ~]# cat /etc/shadow
root:$6$0CIKvP15hvSin5V5$oc.amWyL11jfB1pYxYiaGNfyN8HVq2s0iaVW0KiUd5RrS2SwKmWhTTqUzJ5uNnHi7.pc3OEqO/BMeLIFPOnpJ.::0:99999:7:::
bin:*:17110:0:99999:7:::
daemon:*:17110:0:99999:7:::
adm:*:17110:0:99999:7:::
lp:*:17110:0:99999:7:::
sync:*:17110:0:99999:7:::
.....(省略)
tcpdump:!!:17348::::::
claire:$6$ZZ5ZKnr4$UI7/gW2z6rtmZygBpH81V8MawY7oLgPTaU65w.zmNyi8Bd9rWVgLQPuZtB1.Q6p6T5KOcd9wnCEJapqcAKCLj.:17357:0:99999:7:::

會看到一行被冒號分為了9個部分,我們還是以claire為例子來說明:

1.claire,用戶名

2.用戶被加密後的密碼,第一個$和$之間的為加密等級,"6"為sha512(前面說過咯),第二個$和第三個$之間為隨機數(也被稱為加salt),之後為加密後的密文,當密碼前有"!"或者"*"代表這個用戶被禁用了

3.用戶最近修改密碼的日期,用天數表示,表示從1970年1月1日到被修改那天之間的天數,可以通過以下方法將天數換算成具體的日期:

[root@localhost ~]# date -u -d "1970-01-01 UTC $((17357 * 86400 )) seconds"
Mon Jul 10 00:00:00 UTC 2017

4.密碼最短使用天數,"0"表示可以隨時修改密碼,如果為"3",那麼表示用戶只有在最近一次修改的三天之後才能修改改密碼

5.密碼最長使用天數,"99999"就不需要修改了,對你來說也就是永久的了

6.密碼告警時間,也就是你密碼最長使用天數的,前多少天提醒你,如果的你的密碼最長使用天數為100天,密碼告警時間為7,那麼在      94天的時候,就會提示用戶改修改密碼了

7.密碼過期的恕限時間,如果這裡的值為2,當你在告警時間結束之後,仍然沒有修改密碼,那麼在2天內,你還可以使用這個密碼登錄

8.賬號失效時間,也是基於1970年1月1日的天數,當用戶到了這個時間的時候,就無法在使用了,這一項一般會被使用在收費服務的系統中,當超過這個時間的時候,賬戶就不能使用了。

9.保留位,未來有可能會使用

 

/etc/group

我們還是先看一下這配置文件下有什麼

[root@localhost ~]# cat /etc/group
root:x:0:
bin:x:1:
daemon:x:2:
sys:x:3:
adm:x:4:
......(省略)
slocate:x:21:
tcpdump:x:72:
claire:x:1001:

每一行被冒號從左至右分割成了4個部分,還是以最後一行來說明:

1.claire:預設創建一個用戶,就會自己創建一個與其同名的組

2.x,組密碼占位符,密碼也不是放在這裡的哦

3.1001,GID,組ID

4.是一個以逗號分隔的用戶列表,以此組為附加組的用戶的用戶列表

 

/etc/gshadow

先打開文件看一下:

[root@localhost ~]# cat /etc/gshadow
root:::
bin:::
daemon:::
sys:::
......
avahi:!::
slocate:!::
tcpdump:!::
claire:!::

每一行被冒號從左至右分割成了4個部分,還是以最後一行來說明:

1.claire:預設創建一個用戶,就會自己創建一個與其同名的組

2.如果為"!"或者是"*",那麼其他用戶就不需要密碼就可以加入到這個組中,如果組是設置的密碼,則為一串密文,如果是空,則表示只有該組的成員可以獲得組的許可權

3.用戶組管理員,是一個以逗號分隔的用戶列表,用戶組管理員可以修改密碼和組成員,也很組裡其他成員擁有相同的許可權

4.成員,是一個以逗號分隔的用戶列表,以此組為附加組的用戶的用戶列表,應該要和/etc/group下的用戶列表一樣

 

用戶和組管理常用命令

 作為一個管理員,我們可以增刪用戶、增刪組、修改用戶和組屬性,下麵我們就來介紹常用的用戶和組管理命令。

 groupadd

NAME:創建一個新的組

SYNOPSIS:groupadd [options] group

常用選項:

-g GID:指定GID,預設是上一個組的GID+1

-r:創建系統組

舉例如下:

[root@localhost ~]# groupadd my_group
[root@localhost ~]# tail -2 /etc/group
claire:x:1001:
my_group:x:1002:    #預設上一個組號加一,註意必須是同類型的組,這裡都位登錄用戶組
[root@localhost ~]# groupadd -g 1500 cloud    #指定GID為1500
[root@localhost ~]# tail -2 /etc/group
my_group:x:1002:
cloud:x:1500:    #GID被指定為1500
[root@localhost ~]# groupadd -r my_sys    #創建系統用戶組 my_sys
[root@localhost ~]# tail -2 /etc/group
cloud:x:1500:
my_sys:x:983:    #系統用戶組的GID為983

 

 groupmod

NAME:修改組的屬性

SYNOPSIS:groupmod [options] GROUP

常用選項:

-g GID:修改GID

-n new_name:修改組名

舉例如下:

[root@localhost ~]# tail -3 /etc/group
my_group:x:1002:
cloud:x:1500:
my_sys:x:983:
[root@localhost ~]# groupmod -g 1003 cloud    #修改GID為1003
[root@localhost ~]# tail -3 /etc/group
my_group:x:1002:
cloud:x:1003:
my_sys:x:983:
[root@localhost ~]# groupmod -n  my_system my_sys    #將組名my_sys修改為my_system
[root@localhost ~]# tail -3 /etc/group
my_group:x:1002:
cloud:x:1003:
my_system:x:983:

 

groupdel

NAME:刪除一個組

SYNOPSIS:groupdel [options] GROUP

舉例如下:

[root@localhost ~]# tail -3 /etc/group
my_group:x:1002:
cloud:x:1003:
my_system:x:983:
[root@localhost ~]# groupdel my_system   #刪除系統組my_system
[root@localhost ~]# tail -3 /etc/group
claire:x:1001:
my_group:x:1002:
cloud:x:1003:

 

useradd

NAME:創建一個用戶或者更新用戶的信息

SYNOPSIS:useradd [options] LOGIN

                       useradd -D

                       useradd -D [options]

常用選項:

-u:--uid UID:指定UID

-g:--gid GROUP:指定基本組,此組得事先存在

-G:--groups GROUP1[,GROUP2,...[,GROUPN]]]:指定用戶所屬的附加組,多個組之間用逗號分隔

-c:--comment COMMENT:指明註釋信息

-d:--home HOME_DIR:指定的路徑為用戶的家目錄:通過複製/etc/skel此目錄並重命名實現,指定的家目錄路徑如果事先存在,則不                                            會為用戶複製環境配置文件

-s:--shell SHELL:指定用戶的預設shell,可用所有的shell存放在/etc/shells下

-r:--system:創建系統用戶

舉個例子

創建一個組ID為1200,基本組為cloud(已存在),附加組為"my_group",註釋信息為"my_test",家目錄為"/home/my_home",shell為csh,用戶名為my_test的用戶

[root@localhost ~]# useradd -u 1200 -g cloud -G my_group -c "my_test" -d /home/my_home  -s /bin/csh my_test 
[root@localhost home]# id my_test    id命令後面會講到
uid=1200(my_test) gid=1003(cloud) groups=1003(cloud),1002(my_group)
[root@localhost home]# 
[root@localhost home]# tail -1 /etc/passwd
my_test:x:1200:1003:my_test:/home/my_home:/bin/csh
[root@localhost home]# tail -3 /etc/group
claire:x:1001:
my_group:x:1002:my_test
cloud:x:1003:
[root@localhost home]# ll -a  /home/my_home/
total 12
drwx------. 3 my_test cloud  78 Jul 10 06:23 .
drwxr-xr-x. 5 root    root   48 Jul 10 06:23 ..
-rw-r--r--. 1 my_test cloud  18 Aug  2  2016 .bash_logout
-rw-r--r--. 1 my_test cloud 193 Aug  2  2016 .bash_profile
-rw-r--r--. 1 my_test cloud 231 Aug  2  2016 .bashrc
drwxr-xr-x. 4 my_test cloud  39 Jul  1 07:56 .mozilla

 註意:創建用戶時的預設設定配置文件為/etc/login.defs如:

PASS_MAX_DAYS    99999
PASS_MIN_DAYS    0
PASS_MIN_LEN    5
PASS_WARN_AGE    7
#
# Min/max values for automatic uid selection in useradd
#
UID_MIN                  1000
UID_MAX                 60000
# System accounts
SYS_UID_MIN               201
SYS_UID_MAX               999
#
# Min/max values for automatic gid selection in groupadd
#
GID_MIN                  1000
GID_MAX                 60000
# System accounts
SYS_GID_MIN               201
SYS_GID_MAX               999
.....
CREATE_HOME    yes
UMASK           077
ENCRYPT_METHOD SHA512 

 也可使用useradd -D顯示創建用戶的預設配置

[root@localhost home]# useradd -D
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes

修改預設的屬性

useradd -D 

選項:

-b,--base-dir:家目錄

-e,--expiredate:賬號失效時間

-f,--inactive:密碼過期的恕限時間

-g,--gid:在創建新的用戶的時候,一般都會自動創建與其同命的組,當在創建用戶的時候使用了-N/--no-user-group,也就是不創建組或者在/etc/login.defs里的USERGROUPS_ENAB變數被設置成了no,就會將預設指定的組(預設為組100,user)指定改用戶的組。

[root@localhost ~]# useradd -N no_group
[root@localhost ~]# id no_group
uid=1201(no_group) gid=100(users) groups=100(users)

 -s,--shell:用戶登錄的shell

 

 usermod

NAME:修改一個用戶的屬性

SYNOPSIS:usermod [options] LOGIN

常用選項:

-u, --uid UID:修改用戶的ID為此處指定的新UID; -g, --gid GROUP:修改用戶所屬的基本組; -G, --groups GROUP1[,GROUP2,...[,GROUPN]]]:修改用戶所屬的附加組;原來的附加組會被覆蓋; -a, --append:與-G一同使用,用於為用戶追加新的附加組; -c, --comment COMMENT:修改註釋信息; -d, --home HOME_DIR:修改用戶的家目錄;用戶原有的文件不會被轉移至新位置; -m, --move-home:只能與-d選項一同使用,用於將原來的家目錄移動為新的家目錄; -l, --login NEW_LOGIN:修改用戶名; -s, --shell SHELL:修改用戶的預設shell; -L, --lock:鎖定用戶密碼;即在用戶原來的密碼字元串之前添加一個"!"; -U, --unlock:解鎖用戶的密碼;

與useradd類型,這裡就不在多說了

 

 userdel

NAME:刪除一個用戶和其相關的文件

SYNOPSIS:userdel [options] LOGIN

常用選項:

-r:刪除用戶時一併刪除其家目錄,預設不刪除

[root@localhost home]# userdel no_group
[root@localhost home]# ll /home/
total 0
drwx------. 3 claire  claire 78 Jul 10 03:35 claire
drwx------. 2 frank   frank  62 Jun 30 10:17 frank
drwx------. 3 my_test cloud  78 Jul 10 06:23 my_home
drwx------. 3    1201 users  78 Jul 10 06:49 no_group

 

passwd

NAME:修改用戶的認證信息

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

僅適用passwd,修改用戶自己的密碼,要輸入2次,輸入密碼的密碼為隱藏狀態

[root@localhost home]# passwd
Changing password for user root.
New password: 
Retype new password: 
passwd: all authentication tokens updated successfully.

passwd  USERNAME:修改指定用戶的密碼,一般只用管理員root才可以修改

常用選項:

-l,-u:鎖定和解鎖用戶

-d:清除用戶密碼

-e DATE:賬戶失效時間,日期,也可以使用1970年1月1日到現在的天數,試過不可用,如果兄弟試了可用,麻煩告知,可以通過設置/etc/default/useradd的EXPIRE的day數,預設不設置,當設置為"99999"時,創建賬戶Never_user預設賬戶失效時間就被設為了"99999",也可以使用後面的命令chage,後面再說!

[root@localhost home]# cat /etc/default/useradd 
# useradd defaults file
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=99999
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes
[root@localhost home]# useradd Never_user
[root@localhost home]# tail -1 /etc/shadow   #用戶失效時間被設置為了99999
Never_user:!!:0:0:99999:7::99999:

-i DAYS:密碼過期的恕限時間

-n DAYS:密碼的最短使用期限; -x DAYS:密碼的最長使用期限; -w DAYS:警告期限;

以上親測(除-e之外)均可設置,

--stdin:標準輸入,避免重覆輸入2次密碼

使用方法:

[root@localhost home]# echo "Never_user" | passwd --stdin Never_user
Changing password for user Never_user.
passwd: all authentication tokens updated successfully.
[root@localhost home]# tail -1 /etc/shadow
Never_user:$6$vogq3txX$7pcR5l4sb6YMRbE9CK2gNg2ZR12tCeqdgMWb3vmhlZmcnw2hfgjozcSellI7w7QLTHoQpuik1EGFkAn.74py30:17357:0:99999:7::99999:

 

gpasswd

NAME:可以設置組密碼

SYNOPSIS:gpasswd [option] group

常用選項:

-a USERNAME:向組中添加用戶

-d USERNAME:從組中移除用戶

比如我們將用戶"Never_user"添加到組"cloud"中

[root@localhost home]# gpasswd -a Never_user cloud
Adding user Never_user to group cloud
[root@localhost home]# tail -3 /etc/group
my_group:x:1002:my_test
cloud:x:1003:Never_user
Never_user:x:1201:
[root@localhost home]# 

 

newgrp

NAME:臨時切換基本組

SYNOPSIS:newgrp [-] [group]

常用選項:

-:會模擬用戶重新登錄以實現初始化其工作環境,返回以前的狀態,是用exit退出

#我們切換到Never_user下,Never_user基本組為Never_user和cloud
[Never_user@localhost ~]$ id
uid=1201(Never_user) gid=1201(Never_user) groups=1201(Never_user),1003(cloud) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[Never_user@localhost ~]$ touch test.txt
[Never_user@localhost ~]$ ll     #我們可以看見創建的文件的組為Never
total 0
-rw-rw-r--. 1 Never_user Never_user 0 Jul 10 08:07 test.txt
[Never_user@localhost ~]$ newgrp - cloud   #切換為組cloud
[Never_user@localhost ~]$ 
[Never_user@localhost ~]$ touch test1.txt   #test1文件的用戶組為cloud
[Never_user@localhost ~]$ ll
total 0
-rw-r--r--. 1 Never_user cloud      0 Jul 10 08:07 test1.txt
-rw-rw-r--. 1 Never_user Never_user 0 Jul 10 08:07 test.txt

 

chage

NAME:修改用戶密碼的過期信息

SYNOPSIS:chage [options] LOGIN

常用選項:

-d:修改最後一次修改密碼時間

-E:修改用戶失效時間

-I:修改密碼過期怒限時間

-W:修改告警天數

-m:修改密碼最小使用天數

-M:修改密碼最長使用天數

舉個例子:修改Never_user賬戶失效的時間為2017年07月30日

[root@localhost home]# chage  -E  2017-07-30 Never_user
[root@localhost home]# tail -1 /etc/shadow   #2017年07月30日,自動轉換為了從1970年1月1日到2017年07月30日的天數
Never_user:$6$vogq3txX$7pcR5l4sb6YMRbE9CK2gNg2ZR12tCeqdgMWb3vmhlZmcnw2hfgjozcSellI7w7QLTHoQpuik1EGFkAn.74py30:17357:0:99999:7::17377:

 

id

NAME:顯示真的和有效的用戶和組ID

SYNOPSIS:id [OPTION]... [USER]

常用選項:

-u: 僅顯示有效的UID

-g: 僅顯示用戶的基本組ID

-G:僅顯示用戶所屬的所有組的ID

[root@localhost home]# id frank
uid=1000(frank) gid=1000(frank) groups=1000(frank)
[root@localhost home]# id -u frank
1000
[root@localhost home]# id -g frank
1000
[root@localhost home]# id -G frank
1000

 

 su

NAME:切換用戶

SYNOPSIS:su [options...] [-] [user [args...]]

登錄式時切換,會通過讀取目標用戶的配置文件來重新初始化

su - USERNAME

非登錄式時切換,不會讀取目的用戶的配置文件進行初始化

su USERNAME

管理員可以無密碼切換至其他任何用戶

-c  'COMMADN':僅以指定用戶的身份運行此處制定的命令

[root@localhost home]# su -c "whoami" Never_user
Never_user

 

許可權的定義

 我們先任意看一下目錄下的文件:

[root@localhost ~]# ll /etc/default/
total 12
-rw-r--r--. 1 root root  254 Jun 30 10:19 grub
-rw-r--r--. 1 root root 1756 Nov  4  2016 nss
-rw-r--r--. 1 root root  124 Jul 10 07:20 useradd

每一行的最左位為文件的類型,-代表普通文件,那麼接下來的9為又是什麼呢?

左三位:定義了owner(屬主)的許可權,也就是user的

中三位:定義了group(屬組)的許可權

右三位:定義了others(其他人)的許可權

 

進程以其發起者的身份運行,進程對文件的訪問許可權,取決於發起此進程的用戶的許可權;當使用一個進程對一個文件進行操作的時候,會對比進行的發起者是不是和文件的屬主一致,如果一致,則應用屬主的許可權,如果不一致,則對比進程的發起者是不是屬於文件的屬組,如果屬於則執行屬組的許可權,如果都不是,則只能應用其他人的許可權。用戶也只能修改那些屬主是自己的那些文件。

那麼rwx分別代表什麼呢?

r:readable,可讀

w:writable,可寫

x:excutable,可執行

rwx對文件和目錄的操作是不同的:

對文件:

r:可獲取該文件的數據

w:可修改文件的數據

x:該文件可以執行

對目錄:

r:可以使用ls命令回去其下的所有文件的列表,如果只有r,則只能看到目錄下的文件名列表

w:可修改此文件目錄下的文件列表,就是可以刪除和創建文件,前提必須有x的許可權,如果只有w,不能幹任何事

x:且可使用ls -l來獲取所有文件的詳細屬性信息,前提必須是有r的許可權,如果只有x,只能cd到目錄下

 
許可權與二進位和八進位的對應關係表

 

 

 許可權的管理命令

 chmod

NAME:change file mode bits,修改文件的許可權

SYNOPSYS:

      1. chmod [OPTION]... MODE[,MODE]... FILE...        2.chmod [OPTION]... OCTAL-MODE FILE...        3.chmod [OPTION]... --reference=RFILE FILE... 下麵來介紹一下這三種方式,每種方式適合不同的場景 1. chmod [OPTION]... MODE[,MODE]... FILE...

首先我們來瞭解一下,在命令中使用以下字母代表相應用戶類型

u:屬主

g:屬組

o:其他人

a:所有

(1)可以直接將rwx直接賦值給相應的用戶類型,比如:u=rwx,g=x,o= ,空代表該位沒有許可權

舉個例子:

[root@localhost ~]# cd /tmp/read/
[root@localhost read]# ll
total 4
-rw-r--r--. 1 root root 4 Jul 10 09:49 read.txt
[root@localhost read]# chmod u=rwx,g=rw,o= /tmp/read/read.txt 
[root@localhost read]# ll
total 4
-rwxrw----. 1 root root 4 Jul 10 09:49 read.txt

(2)直接操作一類用戶的一個許可權位

舉個例子:
[root@localhost read]# ll
total 4
-rwxrw----. 1 root root 4 Jul 10 09:49 read.txt
[root@localhost read]# chmod u-x /tmp/read/read.txt
[root@localhost read]# ll
total 4
-rw-rw----. 1 root root 4 Jul 10 09:49 read.txt

2.chmod [OPTION]... OCTAL-MODE FILE...

直接指定八進位

舉個例子:

[root@localhost read]# chmod 777 /tmp/read/read.txt 
[root@localhost read]# ll
total 4
-rwxrwxrwx. 1 root root 4 Jul 10 09:49 read.txt

3.chmod [OPTION]... --reference=RFILE FILE...

參考其他文件的許可權

[root@localhost read]# chmod --reference=/etc/passwd  /tmp/read/read.txt 
[root@localhost read]# ll
total 4
-rw-r--r--. 1 root root 4 Jul 10 09:49 read.txt

常用選項:

-R:--recursive:遞歸修改

 

 chown

只有管理員可以修改文件的屬主和屬組

NAME:修改文件的屬主和屬組

SYNOPSIS:

       chown [OPTION]... [OWNER][:[GROUP]] FILE...        chown [OPTION]... --reference=RFILE FILE...

舉個例子:

[root@localhost read]# ll
total 4
-rw-r--r--. 1 root root 4 Jul 10 09:49 read.txt
[root@localhost read]# chown frank:frank ./read.txt 
[root@localhost read]# ll
total 4
-rw-r--r--. 1 frank frank 4 Jul 10 09:49 read.txt

常用選項:

-R:如果修改目錄,也想遞歸修改下麵的文件,則是用該參數

 

chgrp

NAME:修改屬組 SYNOPSIS:        chgrp [OPTION]... GROUP FILE...        chgrp [OPTION]... --reference=RFILE FILE... 其實直接使用chown就可以了 這裡補充一個內容就是umask,當我們創建一個普通文件或者目錄文件的時候,都會有預設的許可權,那麼這個預設許可權是怎麼定義的呢? 預設umask(只看後三位):
[root@localhost read]# umask
0022

對於新建文件的許可權為666-umask=644=rw-r--r--

[root@localhost read]# touch test.txt
[root@localhost read]# ll
total 4
-rw-r--r--. 1 frank frank 4 Jul 10 09:49 read.txt
drwxr-xr-x. 2 root  root  6 Jul 10 10:36 test
-rw-r--r--. 1 root  root  0 Jul 10 10:37 test.txt

對於新建目錄的許可權為777-umask=755=rwxr-xr-x

[root@localhost read]# mkdir ./test
[root@localhost read]# ll
total 4
-rw-r--r--. 1 frank frank 4 Jul 10 09:49 read.txt
drwxr-xr-x. 2 root  root  6 Jul 10 10:36 test

可以使用umask MASK來設置umask,當然只對當前Shell進程有效

 

補充命令:

install

NAME:複製文件並設置屬性,也可以創建目錄,不能複製目錄和遞歸複製

SYNOPSYS:

       install [OPTION]... [-T] SOURCE DEST        install [OPTION]... SOURCE... DIRECTORY        install [OPTION]... -t DIRECTORY SOURCE...        install [OPTION]... -d DIRECTORY...

和cp的用法類似,這裡不再敖述,新的用法是install -d 可以創建目錄

常用選項:

-m:設置目標文件的屬性,預設屬性為755

-o:設置目標文件的屬主

-g:設置目標文件的屬組

[root@localhost read]# install -o frank -g frank /etc/fstab /tmp/
[root@localhost read]# ll /tmp/
total 48
drwxr-xr-x. 2 root  root      6 Jul  7 02:44 07070244
drwxr-xr-x. 2 root  root      6 Jul  7 02:45 07070245
drwxr-xr-x. 2 root  root      6 Jul  7 02:53 07070253
drwxr-xr-x. 2 root  root      6 Jul  7 01:18 a_c
drwxr-xr-x. 2 root  root      6 Jul  7 01:18 a_d
drwxr-xr-x. 2 root  root      6 Jul  7 01:18 b_c
drwxr-xr-x. 2 root  root      6 Jul  7 01:18 b_d
drwxr-xr-x. 2 root  root    279 Jul  9 00:57 conf.d
-rwxr-xr-x. 1 frank frank     5 Jul 10 10:44 fstab
-rw-r--r--. 1 root  root    126 Jul  9 01:22 fstab1.out

 

mktemp

NAME:創建臨時的文件或者目錄文件,會直接返迴文件名稱

SYNOPSIS: mktemp [OPTION]... [TEMPLATE]

TEMPLATE為:name.XXXX  name可以自定義,XXXX必須為大寫的X且最少三位

[root@localhost tmp]# mktemp case.XXX
case.rMB
[root@localhost tmp]# mktemp case.XXXXX
case.HeqBH
[root@localhost tmp]# mktemp case.XXXXX
case.MatKC

常用選項:

-d:創建臨時目錄

[root@localhost tmp]# mktemp -d case.XXXXX
case.TGRtu

 那今天就寫到這裡了,如果有誤之處,還望各位大佬多多指教。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一、繼承並實現自己的屬性文件配置器類 二、Spring中配置以自定義的屬性文件配置器類來載入加密後的配置文件 三、將配置文件中的特殊屬性用相同的演算法和密鑰加密 ...
  • 配置1:-Xms64m -Xmx512m 配置2:-c default -b 0.0.0.0-Xmx1024M -Xms512M -XX:MaxPermSize=256m ...
  • vue vue.js 是用於構建互動式的 Web 界面的庫。它提供了 MVVM 數據綁定和一個可組合的組件系統,具有簡單、靈活的 API。從技術上講, Vue.js 集中在 MVVM 模式上的視圖模型層,並通過雙向數據綁定連接視圖和模型。實際的 DOM 操作和輸出格式被抽象出來成指令和過濾器。相比其 ...
  • js中滑鼠事件主要有onclick,onmousedown,onmouseup,oncontextmenu,ondblclick,所有的這些事件都包含有一個事件對象event,當然在IE低版本下,event對象是掛在window底下的。這個我們另行討論。 1.通過html添加事件 2.通過DOM0級 ...
  • 轉載註明來自: http://www.cnblogs.com/wujiancheng/ 一、正常情況下Activity的生命周期: Activity的生命周期大概可以歸為三部分 整個的生命周期:onCreate()可以設置所有的“全局”狀態, onDestory()可以釋放所有的資源 可見的生命周期 ...
  • 系列關聯文章 系列關聯文章 此系列文章歸屬於:ASP.NET MVC+Bootstrap+JQuery+SqlServer,其他幾篇文章請參照如下: 詳解google Chrome瀏覽器(理論篇) 詳解Google Chrome瀏覽器(操作篇)(上) 詳解Google Chrome瀏覽器(操作篇)( ...
  • 原理:利用mysql二進位日誌文件,實現數據同步 步驟: 一、配置主庫(Master) 1. 修改主庫my.cnf配置文件,加入如下配置 [root@localhost ~]# nano -w /etc/my.cnf [mysqld] log-bin=mysql-bin server-id=1 2. ...
  • 本文所選的例子來自於《Advanced Bash-scripting Gudie》一書,譯者 楊春敏 黃毅 -a 和 -o一般與[ ]使用,如:[ "$exp1" -a "$exp2" ] && 和 || 一般與[[ ]] 使用,如:[[ condition1 && condition2 ]] 以上 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...