Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Linux 系統教學 >> Linux 教學

Oracle TNS-12555 權限拒絕錯誤排查:/var/tmp/.oracle 目錄權限修復實戰

編輯:Linux 教學

在 Oracle 10g + RedHat 環境中,sqlplus / as sysdba 正常但 lsnrctl start 報 TNS-12555: TNS:permission denied、TNS-00525: Insufficient privilege for operation、Linux Error: 1: Operation not permitted。本文深度剖析根因——/var/tmp/.oracle 目錄權限問題,提供標準修復步驟與預防措施。

錯誤現象


[oracle@rhel4 admin]$ lsnrctl start
...
Error listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1)))
TNS-12555: TNS:permission denied
TNS-12560: TNS:protocol adapter error
TNS-00525: Insufficient privilege for operation
Linux Error: 1: Operation not permitted
  • sqlplus / as sysdba 正常 → 數據庫實例、權限、環境變量無問題。
  • 監聽器啟動失敗於 **IPC 協議** (KEY=EXTPROC1) → 涉及本地進程間通信,需寫入 /var/tmp/.oracle。

根因分析

  • Oracle 監聽器使用 IPC (Unix Domain Socket) 進行本地進程通信,Socket 文件創建在 /var/tmp/.oracle 目錄下 (如 /var/tmp/.oracle/sEXTPROC1)。
  • 該目錄**必須由 Oracle 安裝用戶 (如 oracle) 擁有讀寫執行權限**。
  • 常見導致權限異常的操作:
  1. Root 用戶誤執行 chmod -R 777 /var/tmp 或 chown -R root:root /var/tmp。
  2. 系統清理腳本誤刪/修改 /var/tmp/.oracle 屬性。
  3. SELinux 標籤錯誤 (較少見,通常報 EACCES 而非 EPERM)。

標準修復步驟


# 1. 切換到 root
su - root

# 2. 檢查現狀
ls -ld /var/tmp/.oracle
# 正常應為:drwxrwxrwt. 2 oracle oinstall 4096 ... /var/tmp/.oracle
# 關鍵:所有者 oracle:oinstall,權限 1777 (sticky bit + 全權限)

# 3. 修復所有權與權限
chown oracle:oinstall /var/tmp/.oracle
chmod 1777 /var/tmp/.oracle   # 1777 = sticky bit (1) + rwxrwxrwx (777)

# 4. 如目錄不存在,創建
mkdir -p /var/tmp/.oracle
chown oracle:oinstall /var/tmp/.oracle
chmod 1777 /var/tmp/.oracle

# 5. 切回 oracle 用戶驗證
su - oracle
lsnrctl start
# 應成功啟動,無 TNS-12555

為什麼是 1777 而非 777?

  • 1777 = Sticky Bit (1) + rwxrwxrwx (777)。
  • Sticky Bit 確保**只有文件擁有者、目錄擁有者或 root 可刪除/重命名目錄下文件**,防止用戶誤刪他人 Socket 文件(/tmp、/var/tmp 標準屬性)。
  • Oracle 進程以 oracle 用戶運行,需在目錄下創建/綁定 Socket 文件,故需 rwx。

驗證與後續檢查


# 監聽器啟動後,檢查 Socket 文件
ls -l /var/tmp/.oracle/
# 應見 sEXTPROC1 等 Socket 文件,所有者 oracle

# 檢查監聽狀態
lsnrctl status
# Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1))) 應顯示正常

# 測試本地連接
sqlplus user/pass@localhost:1521/sid
# 或
tnsping localhost

預防措施與最佳實踐

  1. 不要隨意修改 /var/tmp、/tmp 權限/所有者。系統服務 (Oracle、PostgreSQL、Redis、Nginx 等) 依賴其標準屬性。
  2. 備份腳本/清理腳本排除 /var/tmp/.oracle:find /var/tmp -path /var/tmp/.oracle -prune -o -type f -mtime +30 -delete。
  3. 自動化部署 (Ansible/Salt/Terraform) 納入目錄狀態檢查:

- name: Ensure Oracle IPC directory
  file:
    path: /var/tmp/.oracle
    state: directory
    owner: oracle
    group: oinstall
    mode: '1777'
  1. SELinux 環境檢查上下文:ls -Z /var/tmp/.oracle 應為 tmp_t 或 oracle_tmp_t。異常時 restorecon -Rv /var/tmp/.oracle。
  2. 監控告警:監聽器進程存活、端口 1521、IPC Socket 文件存在性。

擴展:其他 TNS-12555 可能原因

場景特徵排查
監聽器配置 IPC 但 listener.ora KEY 衝突多實例共用同 KEY每實例唯一 KEY,如 EXTPROC1, EXTPROC2
SELinux 拒絕audit.log 有 AVC deniedausearch -m avc -ts recent,調整策略或 restorecon
磁盤滿/Inode 滿df -h /var/tmp、df -i /var/tmp 100%清理空間
文件系統掛載 noexec/nosuidmount | grep /var/tmp調整掛載選項

總結

TNS-12555 配合 Linux Error: 1: Operation not permitted、**僅 IPC 協議失敗**,90% 以上為 /var/tmp/.oracle 目錄權限/所有者異常。標準修復:chown oracle:oinstall /var/tmp/.oracle && chmod 1777 /var/tmp/.oracle。納入自動化部署與巡檢,徹底杜絕復發。

Copyright © Windows教程網 All Rights Reserved