導航:首頁 > 操作系統 > linux強制鎖

linux強制鎖

發布時間:2022-08-03 16:33:27

1. linux中fcntl()函數的使用

前面的這5個基本函數實現了文件的打開、讀寫等基本操作,這一節將討論的是,在文 件已經共享的情況下如何操作,也就是當多個用戶共同使用、操作一個文件的情況,這時,Linux 通常採用的方法是給文件上鎖,來避免共享的資源產生競爭的狀態。
文件鎖包括建議性鎖和強制性鎖。
建議性鎖要求每個上鎖文件的進程都要檢查是否有鎖存,並且尊重已有的鎖。在一般情況下,內核和系統都不使用建議性鎖。強制性鎖是由內 核執行的鎖,當一個文件被上鎖進行寫入操作的時候,內核將阻止其他任何文件對其進行讀寫操作。採用強制性鎖對性能的影響很大,每次讀寫操作都必須檢查是否有鎖存在。
在 Linux 中,實現文件上鎖的函數有lock和fcntl,其中flock用於對文件施加建議性鎖,而fcntl不僅可以施加建議性鎖,還可以施加強制鎖。同時,fcntl還能對文件的某一記錄進行上鎖,也就是記錄鎖。
記錄鎖又可分為讀取鎖和寫入鎖,其中讀取鎖又稱為共享鎖,它能夠使多個進程都能在文件的同一部分建立讀取鎖。而寫入鎖又稱為排斥鎖,在任何時刻只能有一個進程在文件的某個部分上建立寫入鎖。當然,在文件的同一部分不能同時建立讀取鎖和寫入鎖。

2. LINUX設置密碼復雜度的文件/etc/pam.d/system-auth,具體需要怎麼改

一、准備工作:

安裝 PAM 的 cracklib 模塊,cracklib 能提供額外的密碼檢查能力。

二、具體操作:

Debian、Ubuntu 或 Linux Mint 系統上:

代碼如下:


$ sudo apt-get install libpam-cracklib


CentOS、Fedora、RHEL 系統已經默認安裝了 cracklib PAM 模塊,所以在這些系統上無需執行上面的操作。

為了強制實施密碼策略,需要修改 /etc/pam.d 目錄下的 PAM 配置文件。一旦修改,策略會馬上生效。

注意:此教程中的密碼策略只對非 root 用戶有效,對 root 用戶無效。

策略設置:

1、禁止使用舊密碼

找到同時有 「password」 和 「pam_unix.so」 欄位並且附加有 「remember=5」 的那行,它表示禁止使用最近用過的5個密碼(己使用過的密碼會被保存在 /etc/security/opasswd 下面)。

Debian、Ubuntu 或 Linux Mint 系統上:

代碼如下:

$ sudo vi /etc/pam.d/common-password
password [success=1 default=ignore] pam_unix.so obscure sha512 remember=5


CentOS、Fedora、RHEL 系統上:

代碼如下:


$ sudo vi /etc/pam.d/system-auth
password sufficient pamunix.so sha512 shadow nullok tryfirstpass useauthtok remember=5

二、設置最短密碼長度

找到同時有 「password」 和 「pam_cracklib.so」 欄位並且附加有 「minlen=10」 的那行,它表示最小密碼長度為(10 - 類型數量)。這里的 「類型數量」 表示不同的字元類型數量。PAM 提供4種類型符號作為密碼(大寫字母、小寫字母、數字和標點符號)。如果密碼同時用上了這4種類型的符號,並且 minlen 設為10,那麼最短的密碼長度允許是6個字元。

Debian、Ubuntu 或 Linux Mint 系統上:

代碼如下:

$ sudo vi /etc/pam.d/common-password
password requisite pam_cracklib.so retry=3 minlen=10 difok=3

CentOS、Fedora、RHEL 系統上:

代碼如下:

$ sudo vi /etc/pam.d/system-auth
password requisite pam_cracklib.so retry=3 difok=3 minlen=10

三、設置密碼復雜度

找到同時有 「password」 和 「pam_cracklib.so」 欄位並且附加有 「ucredit=-1 lcredit=-2 dcredit=-1 ocredit=-1」 的那行,表示密碼必須至少包含一個大寫字母(ucredit),兩個小寫字母(lcredit),一個數字(dcredit)和一個標點符號(ocredit)。

Debian、Ubuntu 或 Linux Mint 系統上:

代碼如下:

$ sudo vi /etc/pam.d/common-password
password requisite pam_cracklib.so retry=3 minlen=10 difok=3 ucredit=-1 lcredit=-2 dcredit=-1 ocredit=-1

CentOS、Fedora、RHEL 系統上:

代碼如下:

$ sudo vi /etc/pam.d/system-auth
password requisite pam_cracklib.so retry=3 difok=3 minlen=10 ucredit=-1 lcredit=-2 dcredit=-1 ocredit=-1

四、設置密碼過期期限

編輯 /etc/login.defs 文件,可以設置當前密碼的有效期限,具體變數如下所示:

代碼如下:

$ sudo vi /etc/login.defs
PASSMAXDAYS 150 PASSMINDAYS 0 PASSWARNAGE 7

這些設置要求用戶每6個月改變密碼,並且會提前7天提醒用戶密碼快到期了。

如果想為每個用戶設置不同的密碼期限,使用 chage 命令。下面的命令可以查看某個用戶的密碼限期:

代碼如下:


$ sudo chage -l xmolo
Last password change : Dec 30, 2013 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


默認情況下,用戶的密碼永不過期。

五、下面的命令用於修改 xmolo 用戶的密碼期限:

代碼如下:

$ sudo chage -E 6/30/2014 -m 5 -M 90 -I 30 -W 14 xmolo

上面的命令將密碼期限設為2014年6月3日。另外,修改密碼的最短周期為5天,最長周期為90天。密碼過期前14天會發送消息提醒用戶,過期後帳號會被鎖住30天。

設置完後,驗證效果如下:

3. 如何在Linux上使用命令行管理密碼

passwd命令說明

passwd命令用於設置用戶的認證信息,包括用戶密碼、密碼過期時間等。系統管理者則能用它管理系統用戶的密碼。只有管理者可以指定用戶名稱,一般用戶只能變更自己的密碼。

語法 passwd(選項)(參數)

選項

-d:刪除密碼,僅有系統管理者才能使用;

-f:強制執行;

-k:設置只有在密碼過期失效後,方能更新;

-l:鎖住密碼;

-s:列出密碼的相關信息,僅有系統管理者才能使用;

-u:解開已上鎖的帳號

參數

用戶名:需要設置密碼的用戶名。

與用戶、組賬戶信息相關的文件

存放用戶信息: /etc/passwd

/etc/shadow

存放組信息: /etc/group

/etc/gshadow

4. 操作系統,linux中 lockf(1,1,0);和 lockf(1,0,0); 是什麼作用

ockf(fd,1,0)是給fd文件上鎖,lockf(fd,0,0)是解鎖,配合使用,實現進程的互斥。

頭文件

#include <sys/file.h>

函數:

int lockf(int fd, int cmd, off_t len);

fd -- 文件id.

fcntl(2)的介面(inteface)函數

返回1表示調用lockf成功.

lockf用於鎖定或打開鎖定一個共享文件.

操作有:

F_LOCK(鎖定),F_TLOCK,F_ULOCK(打開鎖定),F_TEST

(4)linux強制鎖擴展閱讀:

注意事項

lockf()函數允許將文件區域用作信號量(監視鎖),或用於控制對鎖定進程的訪問(強制模式記錄鎖定)。試圖訪問已鎖定資源的其他進程將返回錯誤或進入休眠狀態,直到資源解除鎖定為止。當關閉文件時,將釋放進程的所有鎖定,即使進程仍然有打開的文件。當進程終止時,將釋放進程保留的所有鎖定。

函數聲明:

/* 'lockf' is a simpler interface to the locking facilities of 'fcntl'. LEN is always relative to the current file position. The CMD argument is one of the following. This function is a cancellation point and therefore not marked with __THROW. */

#include <unistd.h>

int lockf(int fd, int cmd, off_t len);

5. linux上flock用獨占鎖運行的shell腳本超時後,如何讓它自動強制結束

大前提,你用的是bash,其他shell應該也有類似的任務管理功能,具體你自己去查。


簡單說一下思路,假定你那個有 flock 的腳本叫 a.sh, 你不要直接在crontab中調用 a.sh,而是調用另外一個腳本,比如 main.sh,main.sh 應該長成這個樣子

#!/bin/bash

#啟動a.sh
/path/to/a.sh&

#每秒鍾檢查一下a.sh是否結束,如果結束,則退出當前進程,如果10秒鍾後a.sh仍未結束,則kill掉它

for((x=0;x<10;x++));do
sleep1
#檢查a.sh任務是否存在
jobs%12>/dev/null
if[$?-ne0];then
#a.sh已經結束
exit0
fi
done

#超時,kill掉a.sh
kill-9%1


如上面的注釋,main.sh 後台啟動 a.sh 後,在10秒內不斷的檢查這個任務是否還在運行,如果不在了,那說明 a.sh 已經結束了,那 main.sh 也可以結束。如果超時,則強行殺掉 a.sh。

6. python log 文件鎖判斷是否有鎖

Python的文件鎖目前使用的是fcntl這個庫,它實際上為 Unix上的ioctl,flock和fcntl 函數提供了一個介面。
1.fcntl庫的簡單使用
[python] view plain
import fcntl
import os, time
FILE = "counter.txt"
if not os.path.exists(FILE):
# create the counter file if it doesn't exist
file = open(FILE, "w")
file.write("0")
file.close()
for i in range(20):
file = open(FILE, "r+") #由於flock生成的是勸告鎖,不能阻止進程對文件的操作,所以這里可以正常打開文件
fcntl.flock(file.fileno(), fcntl.LOCK_EX) #為了避免同時操作文件,需要程序自己來檢查該文件是否已經被加鎖。這里如果檢查到加鎖了,進程會被阻塞
print 'acquire lock'
counter = int(file.readline()) + 1
file.seek(0)
file.write(str(counter))
print os.getpid(), "=>", counter
time.sleep(10)
file.close() # unlocks the file
print 'release lock'
time.sleep(3)
分別啟動2個進程來同時運行這個腳本,我們可以很明顯的看到2者互相之間交替阻塞。同一時刻只有一個進程能夠對counter.txt文件進行操作。
2.對fcntl.flock()函數的說明:
linux的flock() 的函數原型如下所示:
int flock(int fd, int operation);
其中,參數 fd 表示文件描述符;參數 operation 指定要進行的鎖操作,該參數的取值有如下幾種:
LOCK_SH:表示要創建一個共享鎖,在任意時間內,一個文件的共享鎖可以被多個進程擁有;
LOCK_EX:表示創建一個排他鎖,在任意時間內,一個文件的排他鎖只能被一個進程擁有;
LOCK_UN:表示刪除該進程創建的鎖;
LOCK_MAND:它主要是用於共享模式強制鎖,它可以與 LOCK_READ 或者 LOCK_WRITE聯合起來使用,從而表示是否允許並發的讀操作或者並發的寫操作;
通常情況下,如果加鎖請求不能被立即滿足,那麼系統調用 flock()會阻塞當前進程。比如,進程想要請求一個排他鎖,但此時,已經由其他進程獲取了這個鎖,那麼該進程將會被阻塞。如果想要在沒有獲得這個排他鎖的情況下不阻塞該進程,可以將LOCK_NB 和 LOCK_SH 或者 LOCK_EX 聯合使用,那麼系統就不會阻塞該進程。flock()所加的鎖會對整個文件起作用。
注意:
1. 對於文件的 close() 操作會使文件鎖失效;
2. 同理,進程結束後文件鎖失效;
3. flock() 的 LOCK_EX是「勸告鎖」,系統內核不會強制檢查鎖的狀態,需要在代碼中進行文件操作的地方顯式檢查才能生效。

7. linux強制鎖和自旋鎖的關系

沒聽過linux有強制鎖。
與自旋鎖有點相似的是互斥量。它們都是為了解決對某項資源的互斥使用。同一時間,只能有一個線程或進程持有資源。
自旋鎖特點:當資源被鎖住時,它會反復的去看鎖是否被釋放,一直佔用CPU。屬於忙等待。
互斥量特點:當資源被鎖住時,它會調用調度函數把CPU使用權釋放給其他進程。

8. linux系統 在安裝jdk時總是出現E: 無法獲得鎖 /var/lib/dpkg/lock - open (11: 資源暫時不可用) 怎麼辦

解決辦法如下:
1。終端輸入 ps -aux ,列出進程。找到含有apt『-get的進程,直接sudo kill PID。解決。
2。強制解鎖,命令
sudo rm /var/cache/apt/archives/lock
sudo rm /var/lib/dpkg/lock

9. linux用戶登錄三次被鎖了,這設置在哪配置的.

鎖用戶的設定
/etc/pam.d/下包含各種認證程序或服務的配置文件。編輯這些可限制認證失敗次數,當失敗次數超過指定值時用戶會被鎖住。
在此,以run
level為3的時候,多次登錄登錄失敗即鎖用戶為例:
在/etc/pam.d/login文件中追加如下兩行:
auth
required
/lib/security/pam_tally.so
onerr=fail
no_magic_root
account
required
/lib/security/pam_tally.so
deny=3
no_magic_root
reset
deny=3
設置登錄失敗3次就將用戶鎖住,該值可任意設定。
如下為全文見設定例:
auth
required
pam_securetty.so
auth
required
pam_stack.so
service=system-auth
auth
required
pam_nologin.so
auth
required
pam_tally.so
onerr=fail
no_magic_root
account
required
pam_stack.so
service=system-auth
account
required
pam_tally.so
deny=3
no_magic_root
reset
password
required
pam_stack.so
service=system-auth
session
required
pam_stack.so
service=system-auth
session
optional
pam_console.so
這樣當用戶在run
level=3的情況下登錄時,/var/log/faillog會自動生成,裡面記錄用戶登錄失敗次數等信息。
可用"faillog
-u
用戶名"命令來查看。
當用戶登錄成功時,以前的登錄失敗信息會重置。
2)用戶的解鎖
用戶因多次登錄失敗而被鎖的情況下,可用faillog命令來解鎖。具體如下:
faillog
-u
用戶名
-r
此命令實行後,faillog里記錄的失敗信息即被重置,用戶又可用了。
關於faillog的其他命令。。參見man
failog。
二:手動鎖定用戶禁止使用
可以用usermod命令來鎖定用戶密碼,使密碼無效,該用戶名將不能使用。
如:
usermod
-L
用戶名
解鎖命令:usermod
-U
用戶名
......
要想強制用戶下次登錄更改密碼就使用chage
-d
0
username
強制把上次更改密碼的日期歸零.
定義用戶密碼變更天數在/etc/shadow
這個文件中定義
對新建的用戶在/etc/login.defs這個文件中定義

10. Linux下怎麼創建鎖文件及相關命令

方法 鎖文件僅僅是充當一個指示器的角色,程序間需要通過相互協作來使用它們。鎖文件只是建議性鎖,與此對立的是強制性鎖。 為創建一個用作指示器的文件,我們使用帶O_CREATE和O_EXCL標志的open系統調用。這將使我們以一個原子操作同時完成兩項工作:確定文件不存在,然後創建它。 實現 //file : lock.c #i nclude #i nclude #i nclude #i nclude #i nclude int main() { int file_desc; int save_errno; file_desc = open(/tmp/LockFile.test, O_RDWR O_CREAT O_EXCL, 0444); if (file_desc < 0) { save_errno = errno; printf(Open failed with error is %dn, save_errno); } else { printf(Open succeededn); } exit(EXIT_SUCCESS); } 第一次運行程序: $ lock 輸出如下: Open succeeded 我們再次運行程序: $ lock 輸出如下: Open failed with error is 17 分析: 第一次運行程序時,由於文件並不存在,所以執行成功。對於後續的執行,因為文件已經存在而失敗了。若想程序再次執行成功,必須刪除鎖文件。 在Linux系統中,通常錯誤號碼17代表的是EEXIST,此錯誤用以表示一個文件已存在。錯誤號定義在頭文件errno.h或(更常見的)它所包含的頭文件中。

閱讀全文

與linux強制鎖相關的資料

熱點內容
網路編程經典書籍 瀏覽:608
曲靖創建網站java程序員 瀏覽:682
256位加密中是什麼意思 瀏覽:91
php多維數組去重 瀏覽:305
做程序員這一行儲備人才怎麼看 瀏覽:458
參加密逃文 瀏覽:327
蘋果編程語言ios 瀏覽:763
求解病態系統常用的演算法 瀏覽:993
駕校用的app叫什麼 瀏覽:219
數控編程線的纏繞方法 瀏覽:972
安卓線性布局怎麼設計計算器布局 瀏覽:24
拓本pdf 瀏覽:79
2017法碩指南pdf 瀏覽:295
linuxphp命令參數 瀏覽:425
可靠性預測和推薦演算法 瀏覽:855
程序員送女友的相冊 瀏覽:254
壓縮文件怎麼設置打開加密 瀏覽:768
tracert命令結果詳解 瀏覽:360
唯賽思通用什麼APP 瀏覽:376
古玩哪個app好賣 瀏覽:149