우분투에서 csr을 생성할 때 /dev/fd/63을 찾을 수 없습니다.

우분투에서 csr을 생성할 때 /dev/fd/63을 찾을 수 없습니다.

온라인 강좌를 수강 중인데 단계 중 하나는 인증서 서명 요청 또는 CSR 파일을 생성하여 자체 서명된 인증서를 생성하는 것입니다.
인증서를 생성해야 하는 명령은 다음과 같습니다.

sudo openssl req \ 
    -out / root/certreq.csr \
    -key /etc/ssl/private/priv.key \
    -subj "/CN=server.lab" \
    -reqexts SAN \
    -config <(cat /etc/ssl/openssl.cnf <(printf "[SAN]\nsubjectAltName=DNS:server.lab")) \
    -new

그러나 위 명령을 실행하는 동안 다음 오류가 발생합니다.

error on line -1 of /dev/fd/63  
140520560354976:error:02001002:system library:fopen:No such file or directory:bs s _ file. c: 169: fopen( ' /dev/fd/63' , 'rb')
routinesI:B10 new file:no such file:bss file.c: 172:
140520560354976:error:OE078072:configuration file routines:DEF LOAD:no such file :conf def.c: 197:

오류 출력은 명령을 실행 중인 가상 머신에서 느슨하게 복사됩니다.

내가 여기서 뭘 잘못하고 있는 걸까?

답변1

sudo0, 1, 2 이외의 파일 설명자를 명시적으로 닫습니다.

$ sudo ls -l /proc/self/fd 5< /dev/null
total 0
lrwx------ 1 root root 64 Dec  1 08:04 0 -> /dev/pts/7
lrwx------ 1 root root 64 Dec  1 08:04 1 -> /dev/pts/7
lrwx------ 1 root root 64 Dec  1 08:04 2 -> /dev/pts/7
lr-x------ 1 root root 64 Dec  1 08:04 3 -> /proc/5390/fd

따라서 여기에는 프로세스 교체로 생성된 파이프의 읽기 끝인 fd 63이 포함됩니다.

아니요 sudo:

$ ls -l <(:) /proc/self/fd
lr-x------ 1 chazelas chazelas 64 Dec  1 08:07 /dev/fd/63 -> 'pipe:[146184]'

/proc/self/fd:
total 0
lrwx------ 1 chazelas chazelas 64 Dec  1 08:07 0 -> /dev/pts/7
lrwx------ 1 chazelas chazelas 64 Dec  1 08:07 1 -> /dev/pts/7
lrwx------ 1 chazelas chazelas 64 Dec  1 08:07 2 -> /dev/pts/7
lr-x------ 1 chazelas chazelas 64 Dec  1 08:07 3 -> /proc/7305/fd
lr-x------ 1 chazelas chazelas 64 Dec  1 08:07 63 -> 'pipe:[146184]'

그리고 sudo:

$ sudo ls -l <(:) /proc/self/fd
ls: cannot access '/dev/fd/63': No such file or directory
/proc/self/fd:
total 0
lrwx------ 1 root root 64 Dec  1 08:07 0 -> /dev/pts/7
lrwx------ 1 root root 64 Dec  1 08:07 1 -> /dev/pts/7
lrwx------ 1 root root 64 Dec  1 08:07 2 -> /dev/pts/7
lr-x------ 1 root root 64 Dec  1 08:07 3 -> /proc/7929/fd

허용되는 경우 sudoers( closefrom_override기본값은 꺼짐) 옵션을 사용하여 비활성화할 수 sudo있습니다 -C.

$ sudo -C65536 ls -l <(:) /proc/self/fd
lr-x------ 1 root root 64 Dec  1 08:15 /dev/fd/63 -> 'pipe:[148888]'

/proc/self/fd:
total 0
lrwx------ 1 root root 64 Dec  1 08:15 0 -> /dev/pts/8
lrwx------ 1 root root 64 Dec  1 08:15 1 -> /dev/pts/8
lrwx------ 1 root root 64 Dec  1 08:15 2 -> /dev/pts/8
lr-x------ 1 root root 64 Dec  1 08:15 3 -> /proc/15147/fd
lr-x------ 1 root root 64 Dec  1 08:15 63 -> 'pipe:[148888]'

sudo(여기서 나는 65536 이하의 fd를 닫지 말라고 말합니다 )

또는 사용하는 경우 파이프 대신 임시 파일을 사용하고 해당 경로를 전달하는 프로세스 대체 형식을 zsh사용할 수 있습니다 .=(...)/dev/fd/<its-fd>

관련 정보