Ubuntuでcsrを作成すると、/dev/fd/63が見つかりません。

Ubuntuでcsrを作成すると、/dev/fd/63が見つかりません。

オンラインコースを受講中のステップの1つは、証明書署名要求または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

許可されている場合sudoersclosefrom_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>

おすすめ記事